@Test
- fun parseCodeNewLines() {
+ fun parseCodeNewLines_not_passing() {
testTypeNewLines(
name = "code",
- markdownPattern = "`",
- htmlExpectedTag = "code"
+ markdownPattern = "```",
+ htmlExpectedTag = "code",
+ softBreak = "\n"
)
}
@@ -163,7 +168,7 @@ class MarkdownParserTest : InstrumentedTest {
}
@Test
- fun parseCode2NewLines() {
+ fun parseCode2NewLines_not_passing() {
testTypeNewLines(
name = "code",
markdownPattern = "``",
@@ -181,7 +186,7 @@ class MarkdownParserTest : InstrumentedTest {
}
@Test
- fun parseCode3NewLines() {
+ fun parseCode3NewLines_not_passing() {
testTypeNewLines(
name = "code",
markdownPattern = "```",
@@ -243,7 +248,7 @@ class MarkdownParserTest : InstrumentedTest {
}
@Test
- fun parseBoldNewLines_not_passing() {
+ fun parseBoldNewLines2() {
"**bold**\nline2".let { markdownParser.parse(it).expect(it, "bold line2") }
}
@@ -334,13 +339,14 @@ class MarkdownParserTest : InstrumentedTest {
private fun testTypeNewLines(name: String,
markdownPattern: String,
- htmlExpectedTag: String) {
+ htmlExpectedTag: String,
+ softBreak: String = " ") {
// With new line inside the block
"$markdownPattern$name\n$name$markdownPattern"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
- expectedFormattedText = "<$htmlExpectedTag>$name $name$htmlExpectedTag>")
+ expectedFormattedText = "<$htmlExpectedTag>$name$softBreak$name$htmlExpectedTag>")
}
// With new line between two blocks
@@ -348,7 +354,7 @@ class MarkdownParserTest : InstrumentedTest {
.let {
markdownParser.parse(it)
.expect(expectedText = it,
- expectedFormattedText = "<$htmlExpectedTag>$name$htmlExpectedTag><$htmlExpectedTag>$name$htmlExpectedTag>")
+ expectedFormattedText = "<$htmlExpectedTag>$name$htmlExpectedTag> <$htmlExpectedTag>$name$htmlExpectedTag>")
}
}
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/session/securestorage/SecretStoringUtilsTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/session/securestorage/SecretStoringUtilsTest.kt
new file mode 100644
index 0000000000..7ee6caed0d
--- /dev/null
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/session/securestorage/SecretStoringUtilsTest.kt
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 2021 The Matrix.org Foundation C.I.C.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.matrix.android.sdk.internal.session.securestorage
+
+import android.os.Build
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import org.amshove.kluent.shouldBeEqualTo
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.MethodSorters
+import org.matrix.android.sdk.InstrumentedTest
+import org.matrix.android.sdk.internal.crypto.crosssigning.fromBase64
+import org.matrix.android.sdk.internal.crypto.crosssigning.toBase64NoPadding
+import java.io.ByteArrayOutputStream
+import java.util.UUID
+
+@RunWith(AndroidJUnit4::class)
+@FixMethodOrder(MethodSorters.JVM)
+class SecretStoringUtilsTest : InstrumentedTest {
+
+ private val buildVersionSdkIntProvider = TestBuildVersionSdkIntProvider()
+ private val secretStoringUtils = SecretStoringUtils(context(), buildVersionSdkIntProvider)
+
+ companion object {
+ const val TEST_STR = "This is something I want to store safely!"
+ }
+
+ @Test
+ fun testStringNominalCaseApi21() {
+ val alias = generateAlias()
+ buildVersionSdkIntProvider.value = Build.VERSION_CODES.LOLLIPOP
+ // Encrypt
+ val encrypted = secretStoringUtils.securelyStoreString(TEST_STR, alias)
+ // Decrypt
+ val decrypted = secretStoringUtils.loadSecureSecret(encrypted, alias)
+ decrypted shouldBeEqualTo TEST_STR
+ secretStoringUtils.safeDeleteKey(alias)
+ }
+
+ @Test
+ fun testStringNominalCaseApi23() {
+ val alias = generateAlias()
+ buildVersionSdkIntProvider.value = Build.VERSION_CODES.M
+ // Encrypt
+ val encrypted = secretStoringUtils.securelyStoreString(TEST_STR, alias)
+ // Decrypt
+ val decrypted = secretStoringUtils.loadSecureSecret(encrypted, alias)
+ decrypted shouldBeEqualTo TEST_STR
+ secretStoringUtils.safeDeleteKey(alias)
+ }
+
+ @Test
+ fun testStringNominalCaseApi30() {
+ val alias = generateAlias()
+ buildVersionSdkIntProvider.value = Build.VERSION_CODES.R
+ // Encrypt
+ val encrypted = secretStoringUtils.securelyStoreString(TEST_STR, alias)
+ // Decrypt
+ val decrypted = secretStoringUtils.loadSecureSecret(encrypted, alias)
+ decrypted shouldBeEqualTo TEST_STR
+ secretStoringUtils.safeDeleteKey(alias)
+ }
+
+ @Test
+ fun testStringMigration21_23() {
+ val alias = generateAlias()
+ buildVersionSdkIntProvider.value = Build.VERSION_CODES.LOLLIPOP
+ // Encrypt
+ val encrypted = secretStoringUtils.securelyStoreString(TEST_STR, alias)
+
+ // Simulate a system upgrade
+ buildVersionSdkIntProvider.value = Build.VERSION_CODES.M
+
+ // Decrypt
+ val decrypted = secretStoringUtils.loadSecureSecret(encrypted, alias)
+ decrypted shouldBeEqualTo TEST_STR
+ secretStoringUtils.safeDeleteKey(alias)
+ }
+
+ @Test
+ fun testObjectNominalCaseApi21() {
+ val alias = generateAlias()
+ buildVersionSdkIntProvider.value = Build.VERSION_CODES.LOLLIPOP
+
+ // Encrypt
+ val encrypted = ByteArrayOutputStream().also { outputStream ->
+ outputStream.use {
+ secretStoringUtils.securelyStoreObject(TEST_STR, alias, it)
+ }
+ }
+ .toByteArray()
+ .toBase64NoPadding()
+ // Decrypt
+ val decrypted = encrypted.fromBase64().inputStream().use {
+ secretStoringUtils.loadSecureSecret(it, alias)
+ }
+ decrypted shouldBeEqualTo TEST_STR
+ secretStoringUtils.safeDeleteKey(alias)
+ }
+
+ @Test
+ fun testObjectNominalCaseApi23() {
+ val alias = generateAlias()
+ buildVersionSdkIntProvider.value = Build.VERSION_CODES.M
+
+ // Encrypt
+ val encrypted = ByteArrayOutputStream().also { outputStream ->
+ outputStream.use {
+ secretStoringUtils.securelyStoreObject(TEST_STR, alias, it)
+ }
+ }
+ .toByteArray()
+ .toBase64NoPadding()
+ // Decrypt
+ val decrypted = encrypted.fromBase64().inputStream().use {
+ secretStoringUtils.loadSecureSecret(it, alias)
+ }
+ decrypted shouldBeEqualTo TEST_STR
+ secretStoringUtils.safeDeleteKey(alias)
+ }
+
+ @Test
+ fun testObjectNominalCaseApi30() {
+ val alias = generateAlias()
+ buildVersionSdkIntProvider.value = Build.VERSION_CODES.R
+
+ // Encrypt
+ val encrypted = ByteArrayOutputStream().also { outputStream ->
+ outputStream.use {
+ secretStoringUtils.securelyStoreObject(TEST_STR, alias, it)
+ }
+ }
+ .toByteArray()
+ .toBase64NoPadding()
+ // Decrypt
+ val decrypted = encrypted.fromBase64().inputStream().use {
+ secretStoringUtils.loadSecureSecret(it, alias)
+ }
+ decrypted shouldBeEqualTo TEST_STR
+ secretStoringUtils.safeDeleteKey(alias)
+ }
+
+ @Test
+ fun testObjectMigration21_23() {
+ val alias = generateAlias()
+ buildVersionSdkIntProvider.value = Build.VERSION_CODES.LOLLIPOP
+
+ // Encrypt
+ val encrypted = ByteArrayOutputStream().also { outputStream ->
+ outputStream.use {
+ secretStoringUtils.securelyStoreObject(TEST_STR, alias, it)
+ }
+ }
+ .toByteArray()
+ .toBase64NoPadding()
+
+ // Simulate a system upgrade
+ buildVersionSdkIntProvider.value = Build.VERSION_CODES.M
+
+ // Decrypt
+ val decrypted = encrypted.fromBase64().inputStream().use {
+ secretStoringUtils.loadSecureSecret(it, alias)
+ }
+ decrypted shouldBeEqualTo TEST_STR
+ secretStoringUtils.safeDeleteKey(alias)
+ }
+
+ private fun generateAlias() = UUID.randomUUID().toString()
+}
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/session/securestorage/TestBuildVersionSdkIntProvider.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/session/securestorage/TestBuildVersionSdkIntProvider.kt
new file mode 100644
index 0000000000..b08c88fb24
--- /dev/null
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/session/securestorage/TestBuildVersionSdkIntProvider.kt
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2021 The Matrix.org Foundation C.I.C.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.matrix.android.sdk.internal.session.securestorage
+
+import org.matrix.android.sdk.internal.util.system.BuildVersionSdkIntProvider
+
+class TestBuildVersionSdkIntProvider : BuildVersionSdkIntProvider {
+ var value: Int = 0
+
+ override fun get() = value
+}
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/util/JsonCanonicalizerTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/util/JsonCanonicalizerTest.kt
index 854d420a82..b5ab6589ff 100644
--- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/util/JsonCanonicalizerTest.kt
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/util/JsonCanonicalizerTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt
index a2a1586864..69ae57e644 100644
--- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,6 +18,14 @@ package org.matrix.android.sdk.session.room.timeline
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.zhuinden.monarchy.Monarchy
+import io.realm.Realm
+import io.realm.RealmConfiguration
+import io.realm.kotlin.createObject
+import org.amshove.kluent.shouldBeEqualTo
+import org.amshove.kluent.shouldBeTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.session.room.send.SendState
@@ -29,14 +37,6 @@ import org.matrix.android.sdk.internal.database.model.SessionRealmModule
import org.matrix.android.sdk.internal.session.room.timeline.PaginationDirection
import org.matrix.android.sdk.session.room.timeline.RoomDataHelper.createFakeListOfEvents
import org.matrix.android.sdk.session.room.timeline.RoomDataHelper.createFakeMessageEvent
-import io.realm.Realm
-import io.realm.RealmConfiguration
-import io.realm.kotlin.createObject
-import org.amshove.kluent.shouldBeTrue
-import org.amshove.kluent.shouldEqual
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
internal class ChunkEntityTest : InstrumentedTest {
@@ -60,10 +60,10 @@ internal class ChunkEntityTest : InstrumentedTest {
val chunk: ChunkEntity = realm.createObject()
val fakeEvent = createFakeMessageEvent().toEntity(ROOM_ID, SendState.SYNCED, System.currentTimeMillis()).let {
- realm.copyToRealmOrUpdate(it)
+ realm.copyToRealm(it)
}
chunk.addTimelineEvent(ROOM_ID, fakeEvent, PaginationDirection.FORWARDS, emptyMap())
- chunk.timelineEvents.size shouldEqual 1
+ chunk.timelineEvents.size shouldBeEqualTo 1
}
}
@@ -72,11 +72,11 @@ internal class ChunkEntityTest : InstrumentedTest {
monarchy.runTransactionSync { realm ->
val chunk: ChunkEntity = realm.createObject()
val fakeEvent = createFakeMessageEvent().toEntity(ROOM_ID, SendState.SYNCED, System.currentTimeMillis()).let {
- realm.copyToRealmOrUpdate(it)
+ realm.copyToRealm(it)
}
chunk.addTimelineEvent(ROOM_ID, fakeEvent, PaginationDirection.FORWARDS, emptyMap())
chunk.addTimelineEvent(ROOM_ID, fakeEvent, PaginationDirection.FORWARDS, emptyMap())
- chunk.timelineEvents.size shouldEqual 1
+ chunk.timelineEvents.size shouldBeEqualTo 1
}
}
@@ -88,7 +88,7 @@ internal class ChunkEntityTest : InstrumentedTest {
chunk1.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS)
chunk2.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS)
chunk1.merge(ROOM_ID, chunk2, PaginationDirection.BACKWARDS)
- chunk1.timelineEvents.size shouldEqual 60
+ chunk1.timelineEvents.size shouldBeEqualTo 60
}
}
@@ -104,7 +104,7 @@ internal class ChunkEntityTest : InstrumentedTest {
chunk1.addAll(ROOM_ID, eventsForChunk1, PaginationDirection.FORWARDS)
chunk2.addAll(ROOM_ID, eventsForChunk2, PaginationDirection.BACKWARDS)
chunk1.merge(ROOM_ID, chunk2, PaginationDirection.BACKWARDS)
- chunk1.timelineEvents.size shouldEqual 40
+ chunk1.timelineEvents.size shouldBeEqualTo 40
chunk1.isLastForward.shouldBeTrue()
}
}
@@ -119,7 +119,7 @@ internal class ChunkEntityTest : InstrumentedTest {
chunk1.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS)
chunk2.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS)
chunk1.merge(ROOM_ID, chunk2, PaginationDirection.FORWARDS)
- chunk1.prevToken shouldEqual prevToken
+ chunk1.prevToken shouldBeEqualTo prevToken
}
}
@@ -133,7 +133,7 @@ internal class ChunkEntityTest : InstrumentedTest {
chunk1.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS)
chunk2.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS)
chunk1.merge(ROOM_ID, chunk2, PaginationDirection.BACKWARDS)
- chunk1.nextToken shouldEqual nextToken
+ chunk1.nextToken shouldBeEqualTo nextToken
}
}
@@ -142,7 +142,7 @@ internal class ChunkEntityTest : InstrumentedTest {
direction: PaginationDirection) {
events.forEach { event ->
val fakeEvent = event.toEntity(roomId, SendState.SYNCED, System.currentTimeMillis()).let {
- realm.copyToRealmOrUpdate(it)
+ realm.copyToRealm(it)
}
addTimelineEvent(roomId, fakeEvent, direction, emptyMap())
}
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeGetContextOfEventTask.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeGetContextOfEventTask.kt
index 9a133032b6..b86c86c0c7 100644
--- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeGetContextOfEventTask.kt
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeGetContextOfEventTask.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakePaginationTask.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakePaginationTask.kt
index 06828ef3d1..d09bfb18c6 100644
--- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakePaginationTask.kt
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakePaginationTask.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeTokenChunkEvent.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeTokenChunkEvent.kt
index 0301157d09..657f622c5b 100644
--- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeTokenChunkEvent.kt
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeTokenChunkEvent.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/RoomDataHelper.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/RoomDataHelper.kt
index a6fe675218..1adf31be5f 100644
--- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/RoomDataHelper.kt
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/RoomDataHelper.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,7 +21,7 @@ import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.session.events.model.EventType
import org.matrix.android.sdk.api.session.events.model.toContent
import org.matrix.android.sdk.api.session.room.model.Membership
-import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
+import org.matrix.android.sdk.api.session.room.model.RoomMemberContent
import org.matrix.android.sdk.api.session.room.model.message.MessageTextContent
import org.matrix.android.sdk.api.session.room.model.message.MessageType
import kotlin.random.Random
@@ -41,11 +41,11 @@ object RoomDataHelper {
}
}
- fun createFakeEvent(type: String,
- content: Content? = null,
- prevContent: Content? = null,
- sender: String = FAKE_TEST_SENDER,
- stateKey: String = FAKE_TEST_SENDER
+ private fun createFakeEvent(type: String,
+ content: Content? = null,
+ prevContent: Content? = null,
+ sender: String = FAKE_TEST_SENDER,
+ stateKey: String = FAKE_TEST_SENDER
): Event {
return Event(
type = type,
@@ -62,8 +62,8 @@ object RoomDataHelper {
return createFakeEvent(EventType.MESSAGE, message)
}
- fun createFakeRoomMemberEvent(): Event {
- val roomMember = RoomMemberSummary(Membership.JOIN, "Fake name #${Random.nextLong()}").toContent()
+ private fun createFakeRoomMemberEvent(): Event {
+ val roomMember = RoomMemberContent(Membership.JOIN, "Fake name #${Random.nextLong()}").toContent()
return createFakeEvent(EventType.STATE_ROOM_MEMBER, roomMember)
}
}
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineBackToPreviousLastForwardTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineBackToPreviousLastForwardTest.kt
index 8c5e7f17f2..3774e6f513 100644
--- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineBackToPreviousLastForwardTest.kt
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineBackToPreviousLastForwardTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt
index facb905b35..0fe341cad6 100644
--- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -66,8 +66,8 @@ class TimelineForwardPaginationTest : InstrumentedTest {
numberOfMessagesToSend)
// Alice clear the cache
- commonTestHelper.doSync {
- aliceSession.clearCache(it)
+ commonTestHelper.runBlockingTest {
+ aliceSession.clearCache()
}
// And restarts the sync
@@ -139,7 +139,7 @@ class TimelineForwardPaginationTest : InstrumentedTest {
// Alice can see the first event of the room (so Back pagination has worked)
snapshot.lastOrNull()?.root?.getClearType() == EventType.STATE_ROOM_CREATE
// 6 for room creation item (backward pagination), 1 for the context, and 50 for the forward pagination
- && snapshot.size == 6 + 1 + 50
+ && snapshot.size == 57 // 6 + 1 + 50
}
aliceTimeline.addListener(aliceEventsListener)
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt
index 28ce75c221..03a4d41988 100644
--- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -189,7 +189,7 @@ class TimelinePreviousLastForwardTest : InstrumentedTest {
Timber.w(" event ${it.root}")
}
- snapshot.size == 8 + 1 + 35
+ snapshot.size == 44 // 8 + 1 + 35
}
bobTimeline.addListener(eventsListener)
@@ -218,7 +218,7 @@ class TimelinePreviousLastForwardTest : InstrumentedTest {
// Bob can see the first event of the room (so Back pagination has worked)
snapshot.lastOrNull()?.root?.getClearType() == EventType.STATE_ROOM_CREATE
// 8 for room creation item 60 message from Alice
- && snapshot.size == 8 + 60
+ && snapshot.size == 68 // 8 + 60
&& snapshot.checkSendOrder(secondMessage, 30, 0)
&& snapshot.checkSendOrder(firstMessage, 30, 30)
}
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineTest.kt
index b0da49cdbb..9be0a5d5af 100644
--- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineTest.kt
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -78,7 +78,7 @@ internal class TimelineTest : InstrumentedTest {
// }
// }
// latch.await()
-// timelineEvents.size shouldEqual initialLoad + paginationCount
+// timelineEvents.size shouldBeEqualTo initialLoad + paginationCount
// timeline.dispose()
// }
}
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineWithManyMembersTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineWithManyMembersTest.kt
new file mode 100644
index 0000000000..ace48cef77
--- /dev/null
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineWithManyMembersTest.kt
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.matrix.android.sdk.session.room.timeline
+
+import org.junit.Assert.fail
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.runners.MethodSorters
+import org.matrix.android.sdk.InstrumentedTest
+import org.matrix.android.sdk.api.extensions.orFalse
+import org.matrix.android.sdk.api.session.events.model.toModel
+import org.matrix.android.sdk.api.session.room.model.message.MessageContent
+import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings
+import org.matrix.android.sdk.common.CommonTestHelper
+import org.matrix.android.sdk.common.CryptoTestHelper
+import java.util.concurrent.CountDownLatch
+
+@RunWith(JUnit4::class)
+@FixMethodOrder(MethodSorters.JVM)
+class TimelineWithManyMembersTest : InstrumentedTest {
+
+ companion object {
+ private const val NUMBER_OF_MEMBERS = 6
+ }
+
+ private val commonTestHelper = CommonTestHelper(context())
+ private val cryptoTestHelper = CryptoTestHelper(commonTestHelper)
+
+ /**
+ * Ensures when someone sends a message to a crowded room, everyone can decrypt the message.
+ */
+ @Test
+ fun everyone_should_decrypt_message_in_a_crowded_room() {
+ val cryptoTestData = cryptoTestHelper.doE2ETestWithManyMembers(NUMBER_OF_MEMBERS)
+
+ val sessionForFirstMember = cryptoTestData.firstSession
+ val roomForFirstMember = sessionForFirstMember.getRoom(cryptoTestData.roomId)!!
+
+ val firstMessage = "First messages from Alice"
+ commonTestHelper.sendTextMessage(
+ roomForFirstMember,
+ firstMessage,
+ 1,
+ 600_000
+ )
+
+ for (index in 1 until cryptoTestData.sessions.size) {
+ val session = cryptoTestData.sessions[index]
+ val roomForCurrentMember = session.getRoom(cryptoTestData.roomId)!!
+ val timelineForCurrentMember = roomForCurrentMember.createTimeline(null, TimelineSettings(30))
+ timelineForCurrentMember.start()
+
+ session.startSync(true)
+
+ run {
+ val lock = CountDownLatch(1)
+ val eventsListener = commonTestHelper.createEventListener(lock) { snapshot ->
+ snapshot
+ .find { it.isEncrypted() }
+ ?.let {
+ val body = it.root.getClearContent()?.toModel()?.body
+ if (body?.startsWith(firstMessage).orFalse()) {
+ println("User " + session.myUserId + " decrypted as " + body)
+ return@createEventListener true
+ } else {
+ fail("User " + session.myUserId + " decrypted as " + body + " CryptoError: " + it.root.mCryptoError)
+ false
+ }
+ } ?: return@createEventListener false
+ }
+ timelineForCurrentMember.addListener(eventsListener)
+ commonTestHelper.await(lock, 600_000)
+ }
+ session.stopSync()
+ }
+ }
+}
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt
index 8ae8ef1b44..1baf490dfc 100644
--- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt
@@ -1,5 +1,4 @@
/*
- * Copyright 2020 New Vector Ltd
* Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,61 +17,37 @@
package org.matrix.android.sdk.session.search
import org.junit.Assert.assertTrue
-import org.junit.Assert.fail
import org.junit.FixMethodOrder
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.junit.runners.MethodSorters
import org.matrix.android.sdk.InstrumentedTest
-import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.extensions.orFalse
import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.api.session.room.model.message.MessageContent
import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings
import org.matrix.android.sdk.api.session.search.SearchResult
import org.matrix.android.sdk.common.CommonTestHelper
+import org.matrix.android.sdk.common.CryptoTestData
import org.matrix.android.sdk.common.CryptoTestHelper
-import org.matrix.android.sdk.common.TestConstants
import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
@RunWith(JUnit4::class)
@FixMethodOrder(MethodSorters.JVM)
class SearchMessagesTest : InstrumentedTest {
- private val MESSAGE = "Lorem ipsum dolor sit amet"
+ companion object {
+ private const val MESSAGE = "Lorem ipsum dolor sit amet"
+ }
private val commonTestHelper = CommonTestHelper(context())
private val cryptoTestHelper = CryptoTestHelper(commonTestHelper)
@Test
fun sendTextMessageAndSearchPartOfItUsingSession() {
- val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoom(false)
- val aliceSession = cryptoTestData.firstSession
- val aliceRoomId = cryptoTestData.roomId
- aliceSession.cryptoService().setWarnOnUnknownDevices(false)
- val roomFromAlicePOV = aliceSession.getRoom(aliceRoomId)!!
- val aliceTimeline = roomFromAlicePOV.createTimeline(null, TimelineSettings(10))
- aliceTimeline.start()
-
- commonTestHelper.sendTextMessage(
- roomFromAlicePOV,
- MESSAGE,
- 2)
-
- run {
- var lock = CountDownLatch(1)
-
- val eventListener = commonTestHelper.createEventListener(lock) { snapshot ->
- snapshot.count { it.root.content.toModel()?.body?.startsWith(MESSAGE).orFalse() } == 2
- }
-
- aliceTimeline.addListener(eventListener)
- commonTestHelper.await(lock)
-
- lock = CountDownLatch(1)
- aliceSession
+ doTest { cryptoTestData ->
+ cryptoTestData.firstSession
.searchService()
.search(
searchTerm = "lore",
@@ -82,63 +57,16 @@ class SearchMessagesTest : InstrumentedTest {
beforeLimit = 10,
orderByRecent = true,
nextBatch = null,
- roomId = aliceRoomId,
- callback = object : MatrixCallback {
- override fun onSuccess(data: SearchResult) {
- super.onSuccess(data)
- assertTrue(data.results?.size == 2)
- assertTrue(
- data.results
- ?.all {
- (it.event.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse()
- }.orFalse()
- )
- lock.countDown()
- }
-
- override fun onFailure(failure: Throwable) {
- super.onFailure(failure)
- fail(failure.localizedMessage)
- lock.countDown()
- }
- }
+ roomId = cryptoTestData.roomId
)
- lock.await(TestConstants.timeOutMillis, TimeUnit.MILLISECONDS)
-
- aliceTimeline.removeAllListeners()
- cryptoTestData.cleanUp(commonTestHelper)
}
-
- aliceSession.startSync(true)
}
@Test
fun sendTextMessageAndSearchPartOfItUsingRoom() {
- val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoom(false)
- val aliceSession = cryptoTestData.firstSession
- val aliceRoomId = cryptoTestData.roomId
- aliceSession.cryptoService().setWarnOnUnknownDevices(false)
- val roomFromAlicePOV = aliceSession.getRoom(aliceRoomId)!!
- val aliceTimeline = roomFromAlicePOV.createTimeline(null, TimelineSettings(10))
- aliceTimeline.start()
-
- commonTestHelper.sendTextMessage(
- roomFromAlicePOV,
- MESSAGE,
- 2)
-
- run {
- var lock = CountDownLatch(1)
-
- val eventListener = commonTestHelper.createEventListener(lock) { snapshot ->
- snapshot.count { it.root.content.toModel()?.body?.startsWith(MESSAGE).orFalse() } == 2
- }
-
- aliceTimeline.addListener(eventListener)
- commonTestHelper.await(lock)
-
- lock = CountDownLatch(1)
- roomFromAlicePOV
+ doTest { cryptoTestData ->
+ cryptoTestData.firstSession
+ .getRoom(cryptoTestData.roomId)!!
.search(
searchTerm = "lore",
limit = 10,
@@ -146,33 +74,47 @@ class SearchMessagesTest : InstrumentedTest {
afterLimit = 0,
beforeLimit = 10,
orderByRecent = true,
- nextBatch = null,
- callback = object : MatrixCallback {
- override fun onSuccess(data: SearchResult) {
- super.onSuccess(data)
- assertTrue(data.results?.size == 2)
- assertTrue(
- data.results
- ?.all {
- (it.event.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse()
- }.orFalse()
- )
- lock.countDown()
- }
-
- override fun onFailure(failure: Throwable) {
- super.onFailure(failure)
- fail(failure.localizedMessage)
- lock.countDown()
- }
- }
+ nextBatch = null
)
- lock.await(TestConstants.timeOutMillis, TimeUnit.MILLISECONDS)
+ }
+ }
- aliceTimeline.removeAllListeners()
- cryptoTestData.cleanUp(commonTestHelper)
+ private fun doTest(block: suspend (CryptoTestData) -> SearchResult) {
+ val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceInARoom(false)
+ val aliceSession = cryptoTestData.firstSession
+ val aliceRoomId = cryptoTestData.roomId
+ val roomFromAlicePOV = aliceSession.getRoom(aliceRoomId)!!
+ val aliceTimeline = roomFromAlicePOV.createTimeline(null, TimelineSettings(10))
+ aliceTimeline.start()
+
+ val lock = CountDownLatch(1)
+
+ val eventListener = commonTestHelper.createEventListener(lock) { snapshot ->
+ snapshot.count { it.root.content.toModel()?.body?.startsWith(MESSAGE).orFalse() } == 2
}
- aliceSession.startSync(true)
+ aliceTimeline.addListener(eventListener)
+
+ commonTestHelper.sendTextMessage(
+ roomFromAlicePOV,
+ MESSAGE,
+ 2)
+
+ commonTestHelper.await(lock)
+
+ val data = commonTestHelper.runBlockingTest {
+ block.invoke(cryptoTestData)
+ }
+
+ assertTrue(data.results?.size == 2)
+ assertTrue(
+ data.results
+ ?.all {
+ (it.event.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse()
+ }.orFalse()
+ )
+
+ aliceTimeline.removeAllListeners()
+ cryptoTestData.cleanUp(commonTestHelper)
}
}
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceCreationTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceCreationTest.kt
new file mode 100644
index 0000000000..5911414c25
--- /dev/null
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceCreationTest.kt
@@ -0,0 +1,221 @@
+/*
+ * Copyright 2021 The Matrix.org Foundation C.I.C.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.matrix.android.sdk.session.space
+
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.runners.MethodSorters
+import org.matrix.android.sdk.InstrumentedTest
+import org.matrix.android.sdk.api.session.events.model.EventType
+import org.matrix.android.sdk.api.session.events.model.toModel
+import org.matrix.android.sdk.api.session.room.model.GuestAccess
+import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
+import org.matrix.android.sdk.api.session.room.model.RoomGuestAccessContent
+import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility
+import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibilityContent
+import org.matrix.android.sdk.api.session.room.model.RoomType
+import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
+import org.matrix.android.sdk.api.session.room.model.create.CreateRoomPreset
+import org.matrix.android.sdk.api.session.room.model.create.RoomCreateContent
+import org.matrix.android.sdk.api.session.space.JoinSpaceResult
+import org.matrix.android.sdk.common.CommonTestHelper
+import org.matrix.android.sdk.common.SessionTestParams
+
+@RunWith(JUnit4::class)
+@FixMethodOrder(MethodSorters.JVM)
+class SpaceCreationTest : InstrumentedTest {
+
+ private val commonTestHelper = CommonTestHelper(context())
+
+ @Test
+ @Suppress("EXPERIMENTAL_API_USAGE")
+ fun createSimplePublicSpace() {
+ val session = commonTestHelper.createAccount("Hubble", SessionTestParams(true))
+ val roomName = "My Space"
+ val topic = "A public space for test"
+ var spaceId: String = ""
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ spaceId = session.spaceService().createSpace(roomName, topic, null, true)
+ // wait a bit to let the summary update it self :/
+ it.countDown()
+ }
+ }
+
+ val syncedSpace = session.spaceService().getSpace(spaceId)
+ commonTestHelper.waitWithLatch {
+ commonTestHelper.retryPeriodicallyWithLatch(it) {
+ syncedSpace?.asRoom()?.roomSummary()?.name != null
+ }
+ }
+ assertEquals("Room name should be set", roomName, syncedSpace?.asRoom()?.roomSummary()?.name)
+ assertEquals("Room topic should be set", topic, syncedSpace?.asRoom()?.roomSummary()?.topic)
+ // assertEquals(topic, syncedSpace.asRoom().roomSummary()?., "Room topic should be set")
+
+ assertNotNull("Space should be found by Id", syncedSpace)
+ val creationEvent = syncedSpace!!.asRoom().getStateEvent(EventType.STATE_ROOM_CREATE)
+ val createContent = creationEvent?.content.toModel()
+ assertEquals("Room type should be space", RoomType.SPACE, createContent?.type)
+
+ var powerLevelsContent: PowerLevelsContent? = null
+ commonTestHelper.waitWithLatch { latch ->
+ commonTestHelper.retryPeriodicallyWithLatch(latch) {
+ val toModel = syncedSpace.asRoom().getStateEvent(EventType.STATE_ROOM_POWER_LEVELS)?.content.toModel()
+ powerLevelsContent = toModel
+ toModel != null
+ }
+ }
+ assertEquals("Space-rooms should be created with a power level for events_default of 100", 100, powerLevelsContent?.eventsDefault)
+
+ val guestAccess = syncedSpace.asRoom().getStateEvent(EventType.STATE_ROOM_GUEST_ACCESS)?.content
+ ?.toModel()?.guestAccess
+
+ assertEquals("Public space room should be peekable by guest", GuestAccess.CanJoin, guestAccess)
+
+ val historyVisibility = syncedSpace.asRoom().getStateEvent(EventType.STATE_ROOM_HISTORY_VISIBILITY)?.content
+ ?.toModel()?.historyVisibility
+
+ assertEquals("Public space room should be world readable", RoomHistoryVisibility.WORLD_READABLE, historyVisibility)
+
+ commonTestHelper.signOutAndClose(session)
+ }
+
+ @Test
+ fun testJoinSimplePublicSpace() {
+ val aliceSession = commonTestHelper.createAccount("alice", SessionTestParams(true))
+ val bobSession = commonTestHelper.createAccount("bob", SessionTestParams(true))
+
+ val roomName = "My Space"
+ val topic = "A public space for test"
+ val spaceId: String
+ runBlocking {
+ spaceId = aliceSession.spaceService().createSpace(roomName, topic, null, true)
+ // wait a bit to let the summary update it self :/
+ delay(400)
+ }
+
+ // Try to join from bob, it's a public space no need to invite
+
+ val joinResult: JoinSpaceResult
+ runBlocking {
+ joinResult = bobSession.spaceService().joinSpace(spaceId)
+ }
+
+ assertEquals(JoinSpaceResult.Success, joinResult)
+
+ val spaceBobPov = bobSession.spaceService().getSpace(spaceId)
+ assertEquals("Room name should be set", roomName, spaceBobPov?.asRoom()?.roomSummary()?.name)
+ assertEquals("Room topic should be set", topic, spaceBobPov?.asRoom()?.roomSummary()?.topic)
+
+ commonTestHelper.signOutAndClose(aliceSession)
+ commonTestHelper.signOutAndClose(bobSession)
+ }
+
+ @Test
+ @Suppress("EXPERIMENTAL_API_USAGE")
+ fun testSimplePublicSpaceWithChildren() {
+ val aliceSession = commonTestHelper.createAccount("alice", SessionTestParams(true))
+ val bobSession = commonTestHelper.createAccount("bob", SessionTestParams(true))
+
+ val roomName = "My Space"
+ val topic = "A public space for test"
+
+ val spaceId: String = runBlocking { aliceSession.spaceService().createSpace(roomName, topic, null, true) }
+ val syncedSpace = aliceSession.spaceService().getSpace(spaceId)
+
+ // create a room
+ var firstChild: String? = null
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ firstChild = aliceSession.createRoom(CreateRoomParams().apply {
+ this.name = "FirstRoom"
+ this.topic = "Description of first room"
+ this.preset = CreateRoomPreset.PRESET_PUBLIC_CHAT
+ })
+ it.countDown()
+ }
+ }
+
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ syncedSpace?.addChildren(firstChild!!, listOf(aliceSession.sessionParams.homeServerHost ?: ""), "a", suggested = true)
+ it.countDown()
+ }
+ }
+
+ var secondChild: String? = null
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ secondChild = aliceSession.createRoom(CreateRoomParams().apply {
+ this.name = "SecondRoom"
+ this.topic = "Description of second room"
+ this.preset = CreateRoomPreset.PRESET_PUBLIC_CHAT
+ })
+ it.countDown()
+ }
+ }
+
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ syncedSpace?.addChildren(secondChild!!, listOf(aliceSession.sessionParams.homeServerHost ?: ""), "b", suggested = true)
+ it.countDown()
+ }
+ }
+
+ // Try to join from bob, it's a public space no need to invite
+ var joinResult: JoinSpaceResult? = null
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ joinResult = bobSession.spaceService().joinSpace(spaceId)
+ // wait a bit to let the summary update it self :/
+ it.countDown()
+ }
+ }
+
+ assertEquals(JoinSpaceResult.Success, joinResult)
+
+ val spaceBobPov = bobSession.spaceService().getSpace(spaceId)
+ assertEquals("Room name should be set", roomName, spaceBobPov?.asRoom()?.roomSummary()?.name)
+ assertEquals("Room topic should be set", topic, spaceBobPov?.asRoom()?.roomSummary()?.topic)
+
+ // /!\ AUTO_JOIN has been descoped
+ // check if bob has joined automatically the first room
+
+// val bobMembershipFirstRoom = bobSession.getRoomSummary(firstChild!!)?.membership
+// assertEquals("Bob should have joined this room", Membership.JOIN, bobMembershipFirstRoom)
+// RoomSummaryQueryParams.Builder()
+//
+// val childCount = bobSession.getRoomSummaries(
+// roomSummaryQueryParams {
+// activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(spaceId)
+// }
+// ).size
+//
+// assertEquals("Unexpected number of joined children", 1, childCount)
+
+ commonTestHelper.signOutAndClose(aliceSession)
+ commonTestHelper.signOutAndClose(bobSession)
+ }
+}
diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt
new file mode 100644
index 0000000000..436daf001b
--- /dev/null
+++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/space/SpaceHierarchyTest.kt
@@ -0,0 +1,645 @@
+/*
+ * Copyright 2021 The Matrix.org Foundation C.I.C.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.matrix.android.sdk.session.space
+
+import android.util.Log
+import androidx.lifecycle.Observer
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.runners.MethodSorters
+import org.matrix.android.sdk.InstrumentedTest
+import org.matrix.android.sdk.api.query.ActiveSpaceFilter
+import org.matrix.android.sdk.api.query.QueryStringValue
+import org.matrix.android.sdk.api.session.Session
+import org.matrix.android.sdk.api.session.events.model.EventType
+import org.matrix.android.sdk.api.session.events.model.toContent
+import org.matrix.android.sdk.api.session.events.model.toModel
+import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
+import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesAllowEntry
+import org.matrix.android.sdk.api.session.room.model.RoomSummary
+import org.matrix.android.sdk.api.session.room.model.RoomType
+import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
+import org.matrix.android.sdk.api.session.room.model.create.RestrictedRoomPreset
+import org.matrix.android.sdk.api.session.room.powerlevels.PowerLevelsHelper
+import org.matrix.android.sdk.api.session.room.powerlevels.Role
+import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
+import org.matrix.android.sdk.common.CommonTestHelper
+import org.matrix.android.sdk.common.SessionTestParams
+
+@RunWith(JUnit4::class)
+@FixMethodOrder(MethodSorters.JVM)
+class SpaceHierarchyTest : InstrumentedTest {
+
+ private val commonTestHelper = CommonTestHelper(context())
+
+ @Test
+ @Suppress("EXPERIMENTAL_API_USAGE")
+ fun createCanonicalChildRelation() {
+ val session = commonTestHelper.createAccount("John", SessionTestParams(true))
+ val spaceName = "My Space"
+ val topic = "A public space for test"
+ var spaceId: String = ""
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ spaceId = session.spaceService().createSpace(spaceName, topic, null, true)
+ it.countDown()
+ }
+ }
+
+ val syncedSpace = session.spaceService().getSpace(spaceId)
+
+ var roomId: String = ""
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ roomId = session.createRoom(CreateRoomParams().apply { name = "General" })
+ it.countDown()
+ }
+ }
+
+ val viaServers = listOf(session.sessionParams.homeServerHost ?: "")
+
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ syncedSpace!!.addChildren(roomId, viaServers, null, true)
+ it.countDown()
+ }
+ }
+
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ session.spaceService().setSpaceParent(roomId, spaceId, true, viaServers)
+ it.countDown()
+ }
+ }
+
+ Thread.sleep(9000)
+
+ val parents = session.getRoom(roomId)?.roomSummary()?.spaceParents
+ val canonicalParents = session.getRoom(roomId)?.roomSummary()?.spaceParents?.filter { it.canonical == true }
+
+ parents?.forEach {
+ Log.d("## TEST", "parent : $it")
+ }
+
+ assertNotNull(parents)
+ assertEquals(1, parents!!.size)
+ assertEquals(spaceName, parents.first().roomSummary?.name)
+
+ assertNotNull(canonicalParents)
+ assertEquals(1, canonicalParents!!.size)
+ assertEquals(spaceName, canonicalParents.first().roomSummary?.name)
+ }
+
+// @Test
+// fun testCreateChildRelations() {
+// val session = commonTestHelper.createAccount("Jhon", SessionTestParams(true))
+// val spaceName = "My Space"
+// val topic = "A public space for test"
+// Log.d("## TEST", "Before")
+//
+// var spaceId = ""
+// commonTestHelper.waitWithLatch {
+// GlobalScope.launch {
+// spaceId = session.spaceService().createSpace(spaceName, topic, null, true)
+// it.countDown()
+// }
+// }
+//
+// Log.d("## TEST", "created space $spaceId ${Thread.currentThread()}")
+// val syncedSpace = session.spaceService().getSpace(spaceId)
+//
+// val children = listOf("General" to true /*canonical*/, "Random" to false)
+//
+// // val roomIdList = children.map {
+// // runBlocking {
+// // session.createRoom(CreateRoomParams().apply { name = it.first })
+// // } to it.second
+// // }
+// val roomIdList = mutableListOf>()
+// commonTestHelper.waitWithLatch {
+// GlobalScope.launch {
+// children.forEach {
+// val rID = session.createRoom(CreateRoomParams().apply { name = it.first })
+// roomIdList.add(rID to it.second)
+// }
+// it.countDown()
+// }
+// }
+//
+// val viaServers = listOf(session.sessionParams.homeServerHost ?: "")
+//
+// commonTestHelper.waitWithLatch {
+// GlobalScope.launch {
+// roomIdList.forEach { entry ->
+// syncedSpace!!.addChildren(entry.first, viaServers, null, true)
+// }
+// it.countDown()
+// }
+// }
+//
+// commonTestHelper.waitWithLatch {
+// GlobalScope.launch {
+// roomIdList.forEach {
+// session.spaceService().setSpaceParent(it.first, spaceId, it.second, viaServers)
+// }
+// it.countDown()
+// }
+// }
+//
+// roomIdList.forEach {
+// val parents = session.getRoom(it.first)?.roomSummary()?.spaceParents
+// val canonicalParents = session.getRoom(it.first)?.roomSummary()?.spaceParents?.filter { it.canonical == true }
+//
+// assertNotNull(parents)
+// assertEquals("Unexpected number of parent", 1, parents!!.size)
+// assertEquals("Unexpected parent name", spaceName, parents.first().roomSummary?.name)
+// assertEquals("Parent of ${it.first} should be canonical ${it.second}", if (it.second) 1 else 0, canonicalParents?.size ?: 0)
+// }
+// }
+
+ @Test
+ @Suppress("EXPERIMENTAL_API_USAGE")
+ fun testFilteringBySpace() {
+ val session = commonTestHelper.createAccount("John", SessionTestParams(true))
+
+ val spaceAInfo = createPublicSpace(session, "SpaceA", listOf(
+ Triple("A1", true /*auto-join*/, true/*canonical*/),
+ Triple("A2", true, true)
+ ))
+
+ /* val spaceBInfo = */ createPublicSpace(session, "SpaceB", listOf(
+ Triple("B1", true /*auto-join*/, true/*canonical*/),
+ Triple("B2", true, true),
+ Triple("B3", true, true)
+ ))
+
+ val spaceCInfo = createPublicSpace(session, "SpaceC", listOf(
+ Triple("C1", true /*auto-join*/, true/*canonical*/),
+ Triple("C2", true, true)
+ ))
+
+ // add C as a subspace of A
+ val spaceA = session.spaceService().getSpace(spaceAInfo.spaceId)
+ val viaServers = listOf(session.sessionParams.homeServerHost ?: "")
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ spaceA!!.addChildren(spaceCInfo.spaceId, viaServers, null, true)
+ session.spaceService().setSpaceParent(spaceCInfo.spaceId, spaceAInfo.spaceId, true, viaServers)
+ it.countDown()
+ }
+ }
+
+ // Create orphan rooms
+
+ var orphan1 = ""
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ orphan1 = session.createRoom(CreateRoomParams().apply { name = "O1" })
+ it.countDown()
+ }
+ }
+
+ var orphan2 = ""
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ orphan2 = session.createRoom(CreateRoomParams().apply { name = "O2" })
+ it.countDown()
+ }
+ }
+
+ val allRooms = session.getRoomSummaries(roomSummaryQueryParams { excludeType = listOf(RoomType.SPACE) })
+
+ assertEquals("Unexpected number of rooms", 9, allRooms.size)
+
+ val orphans = session.getFlattenRoomSummaryChildrenOf(null)
+
+ assertEquals("Unexpected number of orphan rooms", 2, orphans.size)
+ assertTrue("O1 should be an orphan", orphans.any { it.roomId == orphan1 })
+ assertTrue("O2 should be an orphan ${orphans.map { it.name }}", orphans.any { it.roomId == orphan2 })
+
+ val aChildren = session.getFlattenRoomSummaryChildrenOf(spaceAInfo.spaceId)
+
+ assertEquals("Unexpected number of flatten child rooms", 4, aChildren.size)
+ assertTrue("A1 should be a child of A", aChildren.any { it.name == "A1" })
+ assertTrue("A2 should be a child of A", aChildren.any { it.name == "A2" })
+ assertTrue("CA should be a grand child of A", aChildren.any { it.name == "C1" })
+ assertTrue("A1 should be a grand child of A", aChildren.any { it.name == "C2" })
+
+ // Add a non canonical child and check that it does not appear as orphan
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ val a3 = session.createRoom(CreateRoomParams().apply { name = "A3" })
+ spaceA!!.addChildren(a3, viaServers, null, false)
+ it.countDown()
+ }
+ }
+
+ Thread.sleep(2_000)
+ val orphansUpdate = session.getRoomSummaries(roomSummaryQueryParams {
+ activeSpaceFilter = ActiveSpaceFilter.ActiveSpace(null)
+ })
+ assertEquals("Unexpected number of orphan rooms ${orphansUpdate.map { it.name }}", 2, orphansUpdate.size)
+ }
+
+ @Test
+ @Suppress("EXPERIMENTAL_API_USAGE")
+ fun testBreakCycle() {
+ val session = commonTestHelper.createAccount("John", SessionTestParams(true))
+
+ val spaceAInfo = createPublicSpace(session, "SpaceA", listOf(
+ Triple("A1", true /*auto-join*/, true/*canonical*/),
+ Triple("A2", true, true)
+ ))
+
+ val spaceCInfo = createPublicSpace(session, "SpaceC", listOf(
+ Triple("C1", true /*auto-join*/, true/*canonical*/),
+ Triple("C2", true, true)
+ ))
+
+ // add C as a subspace of A
+ val spaceA = session.spaceService().getSpace(spaceAInfo.spaceId)
+ val viaServers = listOf(session.sessionParams.homeServerHost ?: "")
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ spaceA!!.addChildren(spaceCInfo.spaceId, viaServers, null, true)
+ session.spaceService().setSpaceParent(spaceCInfo.spaceId, spaceAInfo.spaceId, true, viaServers)
+ it.countDown()
+ }
+ }
+
+ // add back A as subspace of C
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ val spaceC = session.spaceService().getSpace(spaceCInfo.spaceId)
+ spaceC!!.addChildren(spaceAInfo.spaceId, viaServers, null, true)
+ it.countDown()
+ }
+ }
+
+ Thread.sleep(1000)
+
+ // A -> C -> A
+
+ val aChildren = session.getFlattenRoomSummaryChildrenOf(spaceAInfo.spaceId)
+
+ assertEquals("Unexpected number of flatten child rooms ${aChildren.map { it.name }}", 4, aChildren.size)
+ assertTrue("A1 should be a child of A", aChildren.any { it.name == "A1" })
+ assertTrue("A2 should be a child of A", aChildren.any { it.name == "A2" })
+ assertTrue("CA should be a grand child of A", aChildren.any { it.name == "C1" })
+ assertTrue("A1 should be a grand child of A", aChildren.any { it.name == "C2" })
+ }
+
+ @Test
+ @Suppress("EXPERIMENTAL_API_USAGE")
+ fun testLiveFlatChildren() {
+ val session = commonTestHelper.createAccount("John", SessionTestParams(true))
+
+ val spaceAInfo = createPublicSpace(session, "SpaceA", listOf(
+ Triple("A1", true /*auto-join*/, true/*canonical*/),
+ Triple("A2", true, true)
+ ))
+
+ val spaceBInfo = createPublicSpace(session, "SpaceB", listOf(
+ Triple("B1", true /*auto-join*/, true/*canonical*/),
+ Triple("B2", true, true),
+ Triple("B3", true, true)
+ ))
+
+ // add B as a subspace of A
+ val spaceA = session.spaceService().getSpace(spaceAInfo.spaceId)
+ val viaServers = listOf(session.sessionParams.homeServerHost ?: "")
+ runBlocking {
+ spaceA!!.addChildren(spaceBInfo.spaceId, viaServers, null, true)
+ session.spaceService().setSpaceParent(spaceBInfo.spaceId, spaceAInfo.spaceId, true, viaServers)
+ }
+
+ val flatAChildren = runBlocking(Dispatchers.Main) {
+ session.getFlattenRoomSummaryChildrenOfLive(spaceAInfo.spaceId)
+ }
+
+ commonTestHelper.waitWithLatch { latch ->
+
+ val childObserver = object : Observer> {
+ override fun onChanged(children: List?) {
+// Log.d("## TEST", "Space A flat children update : ${children?.map { it.name }}")
+ System.out.println("## TEST | Space A flat children update : ${children?.map { it.name }}")
+ if (children?.any { it.name == "C1" } == true && children.any { it.name == "C2" }) {
+ // B1 has been added live!
+ latch.countDown()
+ flatAChildren.removeObserver(this)
+ }
+ }
+ }
+
+ val spaceCInfo = createPublicSpace(session, "SpaceC", listOf(
+ Triple("C1", true /*auto-join*/, true/*canonical*/),
+ Triple("C2", true, true)
+ ))
+
+ // add C as subspace of B
+ runBlocking {
+ val spaceB = session.spaceService().getSpace(spaceBInfo.spaceId)
+ spaceB!!.addChildren(spaceCInfo.spaceId, viaServers, null, true)
+ }
+
+ // C1 and C2 should be in flatten child of A now
+
+ GlobalScope.launch(Dispatchers.Main) { flatAChildren.observeForever(childObserver) }
+ }
+
+ // Test part one of the rooms
+
+ val bRoomId = spaceBInfo.roomIds.first()
+ val bRoom = session.getRoom(bRoomId)
+
+ commonTestHelper.waitWithLatch { latch ->
+
+ val childObserver = object : Observer> {
+ override fun onChanged(children: List?) {
+ System.out.println("## TEST | Space A flat children update : ${children?.map { it.name }}")
+ if (children?.any { it.roomId == bRoomId } == false) {
+ // B1 has been added live!
+ latch.countDown()
+ flatAChildren.removeObserver(this)
+ }
+ }
+ }
+
+ // part from b room
+ runBlocking {
+ bRoom!!.leave(null)
+ }
+ // The room should have disapear from flat children
+ GlobalScope.launch(Dispatchers.Main) { flatAChildren.observeForever(childObserver) }
+ }
+
+ commonTestHelper.signOutAndClose(session)
+ }
+
+ data class TestSpaceCreationResult(
+ val spaceId: String,
+ val roomIds: List
+ )
+
+ @Suppress("EXPERIMENTAL_API_USAGE")
+ private fun createPublicSpace(session: Session,
+ spaceName: String,
+ childInfo: List>
+ /** Name, auto-join, canonical*/
+ ): TestSpaceCreationResult {
+ var spaceId = ""
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ spaceId = session.spaceService().createSpace(spaceName, "Test Topic", null, true)
+ it.countDown()
+ }
+ }
+
+ val syncedSpace = session.spaceService().getSpace(spaceId)
+ val viaServers = listOf(session.sessionParams.homeServerHost ?: "")
+
+ val roomIds =
+ childInfo.map { entry ->
+ var roomId = ""
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ roomId = session.createRoom(CreateRoomParams().apply { name = entry.first })
+ it.countDown()
+ }
+ }
+ roomId
+ }
+
+ roomIds.forEachIndexed { index, roomId ->
+ runBlocking {
+ syncedSpace!!.addChildren(roomId, viaServers, null, childInfo[index].second)
+ val canonical = childInfo[index].third
+ if (canonical != null) {
+ session.spaceService().setSpaceParent(roomId, spaceId, canonical, viaServers)
+ }
+ }
+ }
+ return TestSpaceCreationResult(spaceId, roomIds)
+ }
+
+ @Suppress("EXPERIMENTAL_API_USAGE")
+ private fun createPrivateSpace(session: Session,
+ spaceName: String,
+ childInfo: List>
+ /** Name, auto-join, canonical*/
+ ): TestSpaceCreationResult {
+ var spaceId = ""
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ spaceId = session.spaceService().createSpace(spaceName, "My Private Space", null, false)
+ it.countDown()
+ }
+ }
+
+ val syncedSpace = session.spaceService().getSpace(spaceId)
+ val viaServers = listOf(session.sessionParams.homeServerHost ?: "")
+
+ val roomIds =
+ childInfo.map { entry ->
+ var roomId = ""
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ val homeServerCapabilities = session
+ .getHomeServerCapabilities()
+ roomId = session.createRoom(CreateRoomParams().apply {
+ name = entry.first
+ this.featurePreset = RestrictedRoomPreset(
+ homeServerCapabilities,
+ listOf(
+ RoomJoinRulesAllowEntry.restrictedToRoom(spaceId)
+ )
+ )
+ })
+ it.countDown()
+ }
+ }
+ roomId
+ }
+
+ roomIds.forEachIndexed { index, roomId ->
+ runBlocking {
+ syncedSpace!!.addChildren(roomId, viaServers, null, childInfo[index].second)
+ val canonical = childInfo[index].third
+ if (canonical != null) {
+ session.spaceService().setSpaceParent(roomId, spaceId, canonical, viaServers)
+ }
+ }
+ }
+ return TestSpaceCreationResult(spaceId, roomIds)
+ }
+
+ @Test
+ fun testRootSpaces() {
+ val session = commonTestHelper.createAccount("John", SessionTestParams(true))
+
+ /* val spaceAInfo = */ createPublicSpace(session, "SpaceA", listOf(
+ Triple("A1", true /*auto-join*/, true/*canonical*/),
+ Triple("A2", true, true)
+ ))
+
+ val spaceBInfo = createPublicSpace(session, "SpaceB", listOf(
+ Triple("B1", true /*auto-join*/, true/*canonical*/),
+ Triple("B2", true, true),
+ Triple("B3", true, true)
+ ))
+
+ val spaceCInfo = createPublicSpace(session, "SpaceC", listOf(
+ Triple("C1", true /*auto-join*/, true/*canonical*/),
+ Triple("C2", true, true)
+ ))
+
+ val viaServers = listOf(session.sessionParams.homeServerHost ?: "")
+
+ // add C as subspace of B
+ runBlocking {
+ val spaceB = session.spaceService().getSpace(spaceBInfo.spaceId)
+ spaceB!!.addChildren(spaceCInfo.spaceId, viaServers, null, true)
+ }
+
+ Thread.sleep(2000)
+ // + A
+ // a1, a2
+ // + B
+ // b1, b2, b3
+ // + C
+ // + c1, c2
+
+ val rootSpaces = session.spaceService().getRootSpaceSummaries()
+
+ assertEquals("Unexpected number of root spaces ${rootSpaces.map { it.name }}", 2, rootSpaces.size)
+
+ commonTestHelper.signOutAndClose(session)
+ }
+
+ @Test
+ fun testParentRelation() {
+ val aliceSession = commonTestHelper.createAccount("Alice", SessionTestParams(true))
+ val bobSession = commonTestHelper.createAccount("Bib", SessionTestParams(true))
+
+ val spaceAInfo = createPrivateSpace(aliceSession, "Private Space A", listOf(
+ Triple("General", true /*suggested*/, true/*canonical*/),
+ Triple("Random", true, true)
+ ))
+
+ commonTestHelper.runBlockingTest {
+ aliceSession.getRoom(spaceAInfo.spaceId)!!.invite(bobSession.myUserId, null)
+ }
+
+ commonTestHelper.runBlockingTest {
+ bobSession.joinRoom(spaceAInfo.spaceId, null, emptyList())
+ }
+
+ var bobRoomId = ""
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ bobRoomId = bobSession.createRoom(CreateRoomParams().apply { name = "A Bob Room" })
+ bobSession.getRoom(bobRoomId)!!.invite(aliceSession.myUserId)
+ it.countDown()
+ }
+ }
+
+ commonTestHelper.runBlockingTest {
+ aliceSession.joinRoom(bobRoomId)
+ }
+
+ commonTestHelper.waitWithLatch { latch ->
+ commonTestHelper.retryPeriodicallyWithLatch(latch) {
+ aliceSession.getRoomSummary(bobRoomId)?.membership?.isActive() == true
+ }
+ }
+
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ bobSession.spaceService().setSpaceParent(bobRoomId, spaceAInfo.spaceId, false, listOf(bobSession.sessionParams.homeServerHost ?: ""))
+ it.countDown()
+ }
+ }
+
+ commonTestHelper.waitWithLatch { latch ->
+ commonTestHelper.retryPeriodicallyWithLatch(latch) {
+ val stateEvent = aliceSession.getRoom(bobRoomId)!!.getStateEvent(EventType.STATE_SPACE_PARENT, QueryStringValue.Equals(spaceAInfo.spaceId))
+ stateEvent != null
+ }
+ }
+
+ // This should be an invalid space parent relation, because no opposite child and bob is not admin of the space
+ commonTestHelper.runBlockingTest {
+ // we can see the state event
+ // but it is not valid and room is not in hierarchy
+ assertTrue("Bob Room should not be listed as a child of the space", aliceSession.getRoomSummary(bobRoomId)?.flattenParentIds?.isEmpty() == true)
+ }
+
+ // Let's now try to make alice admin of the room
+
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ val room = bobSession.getRoom(bobRoomId)!!
+ val currentPLContent = room
+ .getStateEvent(EventType.STATE_ROOM_POWER_LEVELS)
+ ?.let { it.content.toModel() }
+
+ val newPowerLevelsContent = currentPLContent
+ ?.setUserPowerLevel(aliceSession.myUserId, Role.Admin.value)
+ ?.toContent()
+
+ room.sendStateEvent(EventType.STATE_ROOM_POWER_LEVELS, null, newPowerLevelsContent!!)
+ it.countDown()
+ }
+ }
+
+ commonTestHelper.waitWithLatch { latch ->
+ commonTestHelper.retryPeriodicallyWithLatch(latch) {
+ val powerLevelsHelper = aliceSession.getRoom(bobRoomId)!!
+ .getStateEvent(EventType.STATE_ROOM_POWER_LEVELS)
+ ?.content
+ ?.toModel()
+ ?.let { PowerLevelsHelper(it) }
+ powerLevelsHelper!!.isUserAllowedToSend(aliceSession.myUserId, true, EventType.STATE_SPACE_PARENT)
+ }
+ }
+
+ commonTestHelper.waitWithLatch {
+ GlobalScope.launch {
+ aliceSession.spaceService().setSpaceParent(bobRoomId, spaceAInfo.spaceId, false, listOf(bobSession.sessionParams.homeServerHost ?: ""))
+ it.countDown()
+ }
+ }
+
+ commonTestHelper.waitWithLatch { latch ->
+ commonTestHelper.retryPeriodicallyWithLatch(latch) {
+ bobSession.getRoomSummary(bobRoomId)?.flattenParentIds?.contains(spaceAInfo.spaceId) == true
+ }
+ }
+
+ commonTestHelper.signOutAndClose(aliceSession)
+ commonTestHelper.signOutAndClose(bobSession)
+ }
+}
diff --git a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/database/RealmDebugTools.kt b/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/database/RealmDebugTools.kt
deleted file mode 100644
index 324a3c1062..0000000000
--- a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/database/RealmDebugTools.kt
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2020 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.matrix.android.sdk.internal.database
-
-import org.matrix.android.sdk.internal.crypto.store.db.model.CrossSigningInfoEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.CryptoMetadataEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.CryptoRoomEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.DeviceInfoEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.GossipingEventEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.IncomingGossipingRequestEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.KeyInfoEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.KeysBackupDataEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.MyDeviceLastSeenInfoEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.OlmInboundGroupSessionEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.OlmSessionEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.OutgoingGossipingRequestEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.TrustLevelEntity
-import org.matrix.android.sdk.internal.crypto.store.db.model.UserEntity
-import io.realm.Realm
-import io.realm.RealmConfiguration
-import io.realm.kotlin.where
-import timber.log.Timber
-
-object RealmDebugTools {
- /**
- * Log info about the crypto DB
- */
- fun dumpCryptoDb(realmConfiguration: RealmConfiguration) {
- Realm.getInstance(realmConfiguration).use {
- Timber.d("Realm located at : ${realmConfiguration.realmDirectory}/${realmConfiguration.realmFileName}")
-
- val key = realmConfiguration.encryptionKey.joinToString("") { byte -> "%02x".format(byte) }
- Timber.d("Realm encryption key : $key")
-
- // Check if we have data
- Timber.e("Realm is empty: ${it.isEmpty}")
-
- Timber.d("Realm has CryptoMetadataEntity: ${it.where().count()}")
- Timber.d("Realm has CryptoRoomEntity: ${it.where().count()}")
- Timber.d("Realm has DeviceInfoEntity: ${it.where().count()}")
- Timber.d("Realm has KeysBackupDataEntity: ${it.where().count()}")
- Timber.d("Realm has OlmInboundGroupSessionEntity: ${it.where().count()}")
- Timber.d("Realm has OlmSessionEntity: ${it.where().count()}")
- Timber.d("Realm has UserEntity: ${it.where().count()}")
- Timber.d("Realm has KeyInfoEntity: ${it.where().count()}")
- Timber.d("Realm has CrossSigningInfoEntity: ${it.where().count()}")
- Timber.d("Realm has TrustLevelEntity: ${it.where().count()}")
- Timber.d("Realm has GossipingEventEntity: ${it.where().count()}")
- Timber.d("Realm has IncomingGossipingRequestEntity: ${it.where().count()}")
- Timber.d("Realm has OutgoingGossipingRequestEntity: ${it.where().count()}")
- Timber.d("Realm has MyDeviceLastSeenInfoEntity: ${it.where().count()}")
- }
- }
-}
diff --git a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt b/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt
index ee2c6076cc..2103dc954d 100644
--- a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt
+++ b/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2016 Jeff Gilfelt.
- * Copyright 2019 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt b/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt
index 349110aff8..34ed28d467 100644
--- a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt
+++ b/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,7 +17,6 @@
package org.matrix.android.sdk.internal.network.interceptors
import androidx.annotation.NonNull
-import org.matrix.android.sdk.BuildConfig
import okhttp3.logging.HttpLoggingInterceptor
import org.json.JSONArray
import org.json.JSONException
@@ -38,37 +37,34 @@ class FormattedJsonHttpLogger : HttpLoggingInterceptor.Logger {
*/
@Synchronized
override fun log(@NonNull message: String) {
- // In RELEASE there is no log, but for sure, test again BuildConfig.DEBUG
- if (BuildConfig.DEBUG) {
- Timber.v(message)
+ Timber.v(message)
- if (message.startsWith("{")) {
- // JSON Detected
- try {
- val o = JSONObject(message)
- logJson(o.toString(INDENT_SPACE))
- } catch (e: JSONException) {
- // Finally this is not a JSON string...
- Timber.e(e)
- }
- } else if (message.startsWith("[")) {
- // JSON Array detected
- try {
- val o = JSONArray(message)
- logJson(o.toString(INDENT_SPACE))
- } catch (e: JSONException) {
- // Finally not JSON...
- Timber.e(e)
- }
+ if (message.startsWith("{")) {
+ // JSON Detected
+ try {
+ val o = JSONObject(message)
+ logJson(o.toString(INDENT_SPACE))
+ } catch (e: JSONException) {
+ // Finally this is not a JSON string...
+ Timber.e(e)
+ }
+ } else if (message.startsWith("[")) {
+ // JSON Array detected
+ try {
+ val o = JSONArray(message)
+ logJson(o.toString(INDENT_SPACE))
+ } catch (e: JSONException) {
+ // Finally not JSON...
+ Timber.e(e)
}
- // Else not a json string to log
}
+ // Else not a json string to log
}
private fun logJson(formattedJson: String) {
- val arr = formattedJson.split("\n".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
- for (s in arr) {
- Timber.v(s)
- }
+ formattedJson
+ .lines()
+ .dropLastWhile { it.isEmpty() }
+ .forEach { Timber.v(it) }
}
}
diff --git a/matrix-sdk-android/src/main/AndroidManifest.xml b/matrix-sdk-android/src/main/AndroidManifest.xml
index eeb944d955..de0731422c 100644
--- a/matrix-sdk-android/src/main/AndroidManifest.xml
+++ b/matrix-sdk-android/src/main/AndroidManifest.xml
@@ -2,21 +2,14 @@
xmlns:tools="http://schemas.android.com/tools"
package="org.matrix.android.sdk">
+
+
-
-
-
+ كَلب
+ هِرَّة
+ أَسَد
+ حِصَان
+ حِصَانٌ بِقَرن
+ خِنزِير
+ فِيل
+ أَرنَب
+ باندَا
+ دِيك
+ بِطريق
+ سُلحفاة
+ سَمَكَة
+ أُخطُبُوط
+ فَرَاشَة
+ زَهرَة
+ شَجَرَة
+ صبار
+ فُطر
+ كُرَةٌ أرضِيَّة
+ قَمَر
+ سَحابَة
+ نار
+ مَوزَة
+ تُفَّاحَة
+ فَراوِلَة
+ ذُرَة
+ بِيتزا
+ كَعكَة
+ قَلب
+ اِبتِسَامَة
+ رُوبُوت
+ قُبَّعَة
+ نَظَّارَة
+ مِفتَاحُ رَبط
+ سانتا
+ رَفعُ إِبهَام
+ مِظَلَّة
+ سَاعَةٌ رَملِيَّة
+ سَاعَة
+ هَدِيَّة
+ مِصبَاح
+ كِتَاب
+ قَلَمُ رَصاص
+ مِشبَكُ وَرَق
+ مِقَصّ
+ قُفل
+ مِفتَاح
+ مِطرَقَة
+ تِلِفُون
+ عَلَم
+ قِطَار
+ دَرّاجَة
+ طَائِرة
+ صَارُوخ
+ كَأسُ النَّصر
+ كُرَة
+ غيتار
+ بُوق
+ جَرَس
+ مِرسَاة
+ سَمّاعَة رَأس
+ مُجَلَّد
+ دَبُّوس
+
diff --git a/matrix-sdk-android/src/main/res/values-az/strings.xml b/matrix-sdk-android/src/main/res/values-az/strings.xml
deleted file mode 100644
index 1f366c647f..0000000000
--- a/matrix-sdk-android/src/main/res/values-az/strings.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
- %1$s: %2$s
- %1$s şəkil göndərdi.
- %1$s stiker göndərdi.
-
- %s-nin dəvəti
- %1$s dəvət etdi %2$s
- %1$s sizi dəvət etdi
- %1$s qoşuldu
- %1$s qalıb
- %1$s dəvəti rədd etdi
- %1$s %2$s-i xaric etdi
- %1$s %2$s-i blokdan açdı
- %1$s %2$s-i blokladı
- %1$s %2$s-in dəvətini geri götürdü
- %1$s avatarı dəyişdi
- %1$s ekran adını %2$s olaraq təyin etdi
- %1$s ekran adını %2$s-dan %3$s-ya dəyişdi
- %1$s onların göstərilən adlarını sildi (%2$s)
- %1$s mövzunu dəyişdi: %2$s
- %1$s otaq adını dəyişdirdi: %2$s
- %s video zəng etdi.
- %s səsli zəng etdi.
- %s zəngə cavab verdi.
- %s zəng başa çatdı.
- "%1$s gələcək otaq tarixçəsini %2$s-ə görünən etdi"
- bütün otaq üzvləri, dəvət olunduğu andan.
- bütün otaq üzvləri, qoşulduğu andan.
- bütün otaq üzvləri.
- hər kəs.
- naməlum (%s).
- %1$s sondan-sona şifrələmə açdı (%2$s)
- %s bu otağı təkmilləşdirdi.
-
- %1$s VoIP konfrans istədi
- VoIP konfransı başladı
- VoIP konfransı başa çatdı
-
- (avatar da dəyişdirilib)
- %1$s otaq adını sildi
- %1$s otaq mövzusunu sildi
- Mesaj silindi
- Mesaj %1$s tərəfindən silindi
- Mesaj silindi [səbəb: %1$s]
- Mesaj %1$s tərəfindən qaldırıldı [səbəb: %2$s]
- %1$s profilini %2$s yenilədi
- %1$s otağa qoşulmaq üçün %2$s dəvətnamə göndərdi
- %1$s otağa qoşulmaq üçün %2$s dəvətini ləğv etdi
- %1$s %2$s üçün dəvəti qəbul etdi
-
- ** Şifrəni aça bilmir: %s **
- Göndərənin cihazı bu mesaj üçün açarları bizə göndərməyib.
-
- Redaktə etmək olmur
- Mesaj göndərmək olmur
-
- Şəkil yükləmək olmur
-
- Şəbəkə xətası
- Matris xətası
-
- Boş bir otağa yenidən qoşulmaq hazırda mümkün deyil.
-
- Şifrəli mesaj
-
- Elektron poçt ünvanı
- Telefon nömrəsi
-
- %s-dən dəvət
- Otağa dəvət
-
- %1$s və %2$s
-
-
- %1$s və 1 digər
- %1$s və %2$d digərləri
-
-
- Boş otaq
-
- İlkin sinxronizasiya:
-\nHesab idxal olunur…
- İlkin sinxronizasiya:
-\nKriptografiyanın idxalı
- İlkin sinxronizasiya:
-\nOtaqlar idxalı
- İlkin sinxronizasiya:
-\nOtaqlara daxil olmaq
- İlkin sinxronizasiya:
-\nDəvət olunmuş otaqların idxalı
- İlkin sinxronizasiya:
-\nTərk olunmuş otaqların idxalı
- İlkin sinxronizasiya:
-\nİcmaların idxalı
- İlkin sinxronizasiya:
-\nHesab məlumatlarının idxalı
-
- Mesaj göndərilir…
- Göndərmə növbəsini təmizləyin
-
- %1$s-nin dəvəti. Səbəb: %2$s
- %1$s dəvət olunmuş %2$s. Səbəb: %3$s
- %1$s sizi dəvət etdi. Səbəb: %2$s
- %1$s qoşuldu. Səbəb: %2$s
- %1$s qalıb. Səbəb: %2$s
- %1$s dəvəti rədd etdi. Səbəb: %2$s
- %1$s %2$s-i xaric etdi. Səbəb: %3$s
- %1$s blokdan açdı %2$s. Səbəb: %3$s
- %1$s blokladı %2$s. Səbəb: %3$s
- %1$s otağa qoşulmaq üçün %2$s dəvətnamə göndərdi. Səbəb: %3$s
- %1$s otağa qoşulmaq üçün %2$s dəvətini ləğv etdi. Səbəb: %3$s
- %1$s %2$s üçün dəvəti qəbul etdi. Səbəb: %3$s
- %1$s %2$s dəvətini geri götürdü. Səbəb: %3$s
-
-
diff --git a/matrix-sdk-android/src/main/res/values-bg/strings.xml b/matrix-sdk-android/src/main/res/values-bg/strings.xml
deleted file mode 100644
index 9654fd00b5..0000000000
--- a/matrix-sdk-android/src/main/res/values-bg/strings.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-
-
-
- %1$s: %2$s
- %1$s изпрати снимка.
-
- Поканата на %s
- %1$s покани %2$s
- %1$s Ви покани
- %1$s се присъедини в стаята
- %1$s напусна стаята
- %1$s отхвърли поканата
- %1$s изгони %2$s
- %1$s отблокира %2$s
- %1$s блокира %2$s
- %1$s оттегли поканата си за %2$s
- %1$s смени своята профилна снимка
- %1$s си сложи име %2$s
- %1$s смени своето име от %2$s на %3$s
- %1$s премахна своето име (%2$s)
- %1$s смени темата на: %2$s
- %1$s смени името на стаята на: %2$s
- %s започна видео разговор.
- %s започна гласов разговор.
- %s отговори на повикването.
- %s прекрати разговора.
- %1$s направи бъдещата история на стаята видима за %2$s
- всички членове, от момента на поканването им в нея.
- всички членове, от момента на присъединяването им в нея.
- всички членове в нея.
- всеки.
- непозната (%s).
- %1$s включи шифроване от край до край (%2$s)
-
- %1$s заяви VoIP групов разговор
- Започна VoIP групов разговор
- Груповият разговор приключи
-
- (профилната снимка също беше сменена)
- %1$s премахна името на стаята
- %1$s премахна темата на стаята
- %1$s обнови своя профил %2$s
- %1$s изпрати покана на %2$s да се присъедини към стаята
- %1$s прие поканата за %2$s
-
- ** Неуспешно разшифроване: %s **
- Неуспешно премахване
- Неуспешно изпращане на съобщението
-
- Неуспешно качване на снимката
-
- Грешка в мрежата
- Matrix грешка
-
- В момента не е възможно да се присъедините отново към празна стая.
-
- Шифровано съобщение
-
- Имейл адрес
- Телефонен номер
-
- Устройството на подателя не изпрати ключовете за това съобщение.
-
- %1$s изпрати стикер.
-
- Покана от %s
- Покана за стая
- %1$s и %2$s
-
-
- %1$s и 1 друг
- %1$s и %2$d други
-
-
- Празна стая
-
- Премахнато съобщение
- Съобщение премахнато от %1$s
- Премахнато съобщение [причина: %1$s]
- Съобщение премахнато от %1$s [причина: %2$s]
-
- Начална синхронизация:
-\nИмпортиране на профил…
- Начална синхронизация:
-\nИмпортиране на данни за шифроване
- Начална синхронизация:
-\nИмпортиране на стаи
- Начална синхронизация:
-\nИмпортиране на стаи, от които съм част
- Начална синхронизация:
-\nИмпортиране на стаи, към които съм поканен
- Начална синхронизация:
-\nИмпортиране на стаи, които съм напуснал
- Начална синхронизация:
-\nИмпортиране на общности
- Начална синхронизация:
-\nИмпортиране на данни за профила
-
- %s обнови тази стая.
-
- Изпращане на съобщение…
- Изчисти опашката за изпращане
-
- %1$s оттегли поканата за присъединяване на %2$s към стаята
- поканата на %1$s. Причина: %2$s
- %1$s покани %2$s. Причина: %3$s
- %1$s ви покани. Причина: %2$s
- %1$s се присъедини в стаята. Причина: %2$s
- %1$s напусна стаята. Причина: %2$s
- %1$s отхвърли поканата. Причина: %2$s
- %1$s изгони %2$s. Причина: %3$s
- %1$s блокира %2$s. Причина: %3$s
- %1$s блокира %2$s. Причина: %3$s
- %1$s изпрати покана до %2$s да се присъедини в стаята. Причина: %3$s
- %1$s премахна поканата за присъединяване на %2$s в стаята. Причина: %3$s
- %1$s прие поканата за %2$s. Причина: %3$s
- %1$s оттегли поканата на %2$s. Причина: %3$s
-
-
- %1$s добави %2$s като адрес за тази стая.
- %1$s добави %2$s като адреси за тази стая.
-
-
-
- %1$s премахна %2$s като адрес за тази стая.
- %1$s премахна %2$s като адреси за тази стая.
-
-
- %1$s добави %2$s и премахна %3$s като адреси за тази стая.
-
- %1$s настрой %2$s като основен адрес за тази стая.
- %1$s премахна основния адрес за тази стая.
-
- %1$s разреши на гости да се присъединяват в стаята.
- %1$s предотврати присъединяването на гости в стаята.
-
- %1$s включи шифроване от-край-до-край.
- %1$s включи шифроване от-край-до-край (неразпознат алгоритъм %2$s).
-
- %s изпрати запитване за потвърждение на ключа ви, но клиентът ви не поддържа верифициране посредством чат. Ще трябва да използвате стария метод за верифициране на ключове.
-
- %1$s създаде стаята
- Изпратихте снимка.
- Изпратихте стикер.
-
- Ваша покана
- Създадохте стаята
- Поканихте %1$s
- Присъединихте се в стаята
- Напуснахте стаята
- Отхвърлихте поканата
- Изгонихте %1$s
- Отблокирахте %1$s
- Блокирахте %1$s
-
diff --git a/matrix-sdk-android/src/main/res/values-bg/strings_sas.xml b/matrix-sdk-android/src/main/res/values-bg/strings_sas.xml
new file mode 100644
index 0000000000..e2ee9faefc
--- /dev/null
+++ b/matrix-sdk-android/src/main/res/values-bg/strings_sas.xml
@@ -0,0 +1,68 @@
+
+
+
+ Куче
+ Котка
+ Лъв
+ Кон
+ Еднорог
+ Прасе
+ Слон
+ Заек
+ Панда
+ Петел
+ Пингвин
+ Костенурка
+ Риба
+ Октопод
+ Пеперуда
+ Цвете
+ Дърво
+ Кактус
+ Гъба
+ Глобус
+ Луна
+ Облак
+ Огън
+ Банан
+ Ябълка
+ Ягода
+ Царевица
+ Пица
+ Торта
+ Сърце
+ Усмивка
+ Робот
+ Шапка
+ Очила
+ Гаечен ключ
+ Дядо Коледа
+ Палец нагоре
+ Чадър
+ Пясъчен часовник
+ Часовник
+ Подарък
+ Лампа
+ Книга
+ Молив
+ Кламер
+ Ножици
+ Катинар
+ Ключ
+ Чук
+ Телефон
+ Флаг
+ Влак
+ Колело
+ Самолет
+ Ракета
+ Трофей
+ Топка
+ Китара
+ Тромпет
+ Звънец
+ Котва
+ Слушалки
+ Папка
+ Кабърче
+
diff --git a/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml b/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml
deleted file mode 100644
index 5d38f0b3ee..0000000000
--- a/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml
+++ /dev/null
@@ -1,225 +0,0 @@
-
-
- %1$s একটি ফটো পাঠিয়েছে।
- %1$s একটি স্তিকার পাঠিয়েছে।
-
- %s এর আমন্ত্রণ
- %1$s %2$s কে আমন্ত্রণ করেছে
- %1$s আপনাকে আমন্ত্রণ করেছে
- %1$s রুম এ যোগ দিয়েছে
- %1$s রুম ছেড়ে দিয়েছে
- %1$s আমন্ত্রণ টি বাতিল করেছে
- %1$s %2$s কে কিক করেছে
- %1$s %2$s কে নিষিদ্ধ তালিকা থেকে মুক্ত করেছে
- %1$s %2$s কে নিষিদ্ধ করেছে
- %1$s %2$s এর আমন্ত্রণ ফেরত নিয়েছে
- %1$s নিজের অবতার পরিবর্তন করেছে
- %1$s নিজের প্রদর্শন নাম %2$s রেখেছে
- %1$s নিজের প্রদর্শন নাম %2$s থেকে %3$s তে পরিবর্তন করেছে
- %1$s নিজের প্রদর্শন নাম মুছে দিয়েছে (%2$s)
- %1$s বিষয় টি এতে পরিবর্তন করেছে: %2$s
- %1$s রুম এর নাম এতে পরিবর্তন করেছে: %2$s
- %s একটি ভিডিও কল স্থাপন করেছিল।
- %s একটি ভয়েস কল দিয়েছে।
- %1$s: %2$s
- আপনি একটি ছবি প্রেরণ করেছেন।
- আপনি একটি স্তিকার পাঠিয়েছেন।
-
- আপনার আমন্ত্রণ
- %1$s কক্ষটি তৈরি করেছেন
- আপনি কক্ষটি তৈরি করেছেন
- আপনি %1$s কে আমন্ত্রিত করেছেন
- আপনি কক্ষে যোগ দিয়েছেন
- আপনি কক্ষ ছেড়ে দিয়েছেন
- আপনি আমন্ত্রণটি বাতিল করেছেন
- আপনি %1$s কে কীক করেছেন
- আপনি %1$s কে নিষিদ্ধ মুক্ত করেছেন
- আপনি %1$s কে নিষিদ্ধ করেছেন
- আপনি %1$s এর আমন্ত্রণ প্রত্যাহার করেছেন
- আপনি আপনার অবতারটি পরিবর্তন করেছেন
- আপনি আপনার প্রদর্শনের নামটি %1$s তে সেট করেছেন
- আপনি আপনার প্রদর্শনের নামটি %1$s থেকে %2$s এ পরিবর্তন করেছেন
- আপনি আপনার প্রদর্শনের নামটি সরিয়ে দিয়েছেন (যেটা ছিল %1$s)
- আপনি বিষয়টিকে এতে পরিবর্তন করেছেন: %1$s
- %1$s কক্ষের অবতারটি পরিবর্তন করেছে
- আপনি কক্ষের অবতারটি পরিবর্তন করেছেন
- আপনি কক্ষের নাম এতে পরিবর্তন করেছেন:%1$s
- আপনি একটি ভিডিও কল করেছেন।
- আপনি একটি ভয়েস কল দিয়েছেন।
- কল সেটআপ করার জন্য %s ডেটা প্রেরণ করেছে।
- আপনি কল সেটআপ করার জন্য ডেটা প্রেরণ করেছেন।
- %s কলটির উত্তর দিয়েছে।
- আপনি কলটি উত্তর দিয়েছেন।
- %s কলটি শেষ করেছেন।
- আপনি কলটি শেষ করেছেন।
- %1$s ভবিষ্যতের ঘরের ইতিহাস %2$s এর কাছে দৃশ্যমান করে তুলেছে
- আপনি ভবিষ্যতের কক্ষ ইতিহাস %1$s এর কাছে দৃশ্যমান করেছেন
- কক্ষের সমস্ত সদস্য, যখন থেকে তারা আমন্ত্রিত।
- কক্ষের সমস্ত সদস্য, যখন থেকে তারা যোগদান করেছিল।
- সমস্ত কক্ষের সদস্য।
- যে কেউ।
- অজানা (%s)।
- %1$s এন্ড-টু-এন্ড এনক্রিপশন চালু করেছে (%2$s)
- আপনি শেষ-থেকে-শেষ এনক্রিপশন চালু করেছেন (%1$s)
- %s এই কক্ষটিকে আপগ্রেড করেছে।
- আপনি এই কক্ষটি আপগ্রেড করেছেন।
-
- %1$s একটি ভিওআইপি সম্মেলনের জন্য অনুরোধ করেছে
- আপনি একটি ভিওআইপি সম্মেলনের অনুরোধ করেছেন
- ভিওআইপি সম্মেলন শুরু হয়েছে
- ভিওআইপি সম্মেলন শেষ হয়েছে
-
- (আবতারটিও পরিবর্তন করা হয়েছিল)
- %1$s কক্ষের নাম সরিয়েছে
- আপনি কক্ষের নাম সরিয়েছেন
- %1$s কক্ষের বিষয় মুছে ফেলেছে
- আপনি কক্ষের বিষয়টিকে সরিয়ে দিয়েছেন
- %1$s কক্ষের অবতার সরিয়ে নিয়েছে
- আপনি কক্ষের অবতার সরিয়েছেন
- বার্তা সরানো হয়েছে
- %1$s দ্বারা বার্তা সরানো হয়েছে
- বার্তা সরানো হয়েছে [কারণ:%1$s]
- %1$s দ্বারা বার্তা সরানো হয়েছে [কারণ: %2$s]
- %1$s তাদের প্রোফাইল %2$s আপডেট করেছে
- আপনি আপনার প্রোফাইল %1$s আপডেট করেছেন
- %1$s %2$s কে ঘরে যোগদানের জন্য একটি আমন্ত্রণ পাঠিয়েছে
- আপনি %1$s কে ঘরে যোগদানের জন্য একটি আমন্ত্রণ প্রেরণ করেছেন
- %1$s %2$s এর কক্ষে যোগদানের আমন্ত্রণ বাতিল করে দিয়েছিল
- আপনি %1$s এর কক্ষে যোগদানের জন্য আমন্ত্রণটি বাতিল করেছেন
- %1$s %2$s এর জন্য আমন্ত্রণটি গ্রহণ করেছে
- আপনি %1$s এর জন্য আমন্ত্রণটি গ্রহণ করেছেন
-
- %1$s %2$s উইজেট যুক্ত করেছে
- আপনি %1$s উইজেট যুক্ত করেছেন
- %1$s %2$s উইজেট সরিয়ে দিয়েছেন
- আপনি %1$s উইজেট সরিয়েছেন
- %1$s %2$s উইজেট পরিবর্তন করেছেন
- আপনি %1$s উইজেট পরিবর্তন করেছেন
-
- অ্যাডমিন
- নিয়ামক
- ডিফল্ট
- কাস্টম (%1$d)
- কাস্টম
-
- আপনি %1$s এর পাওয়ার স্তর পরিবর্তন করেছেন।
- %1$s %2$s এর পাওয়ার স্তর পরিবর্তন করেছে।
- %1$s %2$s থেকে %3$s পর্যন্ত
-
- ** ডিক্রিপ্ট করতে অক্ষম: %s **
- প্রেরকের ডিভাইস আমাদের এই বার্তার জন্য কীগুলি প্রেরণ করেনি।
-
- পুনরায় প্রতিক্রিয়া করতে পারেনি
- বার্তা পাঠাতে অক্ষম
-
- চিত্র আপলোড করতে ব্যর্থ
-
- নেটওয়ার্ক ত্রুটি
- ম্যাট্রিক্স ত্রুটি
-
- খালি কক্ষে পুনরায় যোগদান করা বর্তমানে সম্ভব নয়।
-
- এনক্রিপ্ট করা বার্তা
-
- ইমেল ঠিকানা
- ফোন নম্বর
-
- %s থেকে আমন্ত্রণ করুন
- কক্ষ আমন্ত্রণ
-
- %1$s এবং %2$s
-
-
- %1$s এবং অন্য ১ জন
- %1$s এবং অন্যান্য %2$d জন
-
-
- খালি কক্ষ
-
- প্রাথমিক সিঙ্ক:
-\nঅ্যাকাউন্ট আমদানি করা হচ্ছে…
- প্রাথমিক সিঙ্ক:
-\nক্রিপ্টো আমদানি হচ্ছে
- প্রাথমিক সিঙ্ক:
-\nকক্ষগুলি আমদানি করা হচ্ছে
- প্রাথমিক সিঙ্ক:
-\nযোগ করা কক্ষগুলিতে আমদানি করা হিচ্ছে
- প্রাথমিক সিঙ্ক:
-\nআমন্ত্রিত করা কক্ষগুলিতে আমদানি করা হিচ্ছে
- প্রাথমিক সিঙ্ক:
-\nছেড়ে দেওয়া কক্ষগুলিতে আমদানি করা হিচ্ছে
- প্রাথমিক সিঙ্ক:
-\nসম্প্রদায়গুলি আমদানি করা হচ্ছে
- প্রাথমিক সিঙ্ক:
-\nঅ্যাকাউন্ট ডেটা আমদানি করা হচ্ছে
-
- বার্তা প্রেরণ করা হচ্ছে …
- প্রেরণ সারি পরিষ্কার করুন
-
- %1$s এর আমন্ত্রণ। কারণ: %2$s
- আপনার আমন্ত্রণ। কারণ: %1$s
- %1$s আমন্ত্রিত করেছেন %2$s কে। কারণ: %3$s
- আপনি %1$s কে আমন্ত্রিত করেছেন। কারণ: %2$s
- %1$s আপনাকে আমন্ত্রণ করেছে। কারণ: %2$s
- %1$s রুম এ যোগ দিয়েছে। কারণ: %2$s
- আপনি কক্ষে যোগ দিয়েছেন। কারণ: %1$s
- %1$s রুম ছেড়ে দিয়েছে। কারণ: %2$s
- আপনি কক্ষ ছেড়ে দিয়েছেন। কারণ: %1$s
- %1$s আমন্ত্রণ বাতিল করেছেন। কারণ: %2$s
- আপনি আমন্ত্রণটি বাতিল করেছেন। কারণ: %1$s
- %1$s %2$s কে কিক করেছে। কারণ: %2$s
- আপনি %1$s কে কীক করেছেন। কারণ: %2$s
- %1$s %2$s কে নিষিদ্ধ তালিকা থেকে মুক্ত করেছে। কারণ: %3$s
- আপনি %1$s কে নিষিদ্ধ মুক্ত করেছেন। কারণ: %2$s
- %1$s %2$s কে নিষিদ্ধ করেছে। কারণ: %3$s
- আপনি %1$s কে নিষিদ্ধ করেছেন। কারণ: %2$s
- %1$s রুমের সাথে যোগ দিতে %2$s কে একটি আমন্ত্রণ পাঠিয়েছেন। কারণ: %3$s
- আপনি %1$s কে ঘরে যোগদানের জন্য একটি আমন্ত্রণ প্রেরণ করেছেন। কারণ: %2$s
- %1$s %2$s এর কক্ষে যোগদানের আমন্ত্রণ বাতিল করে দিয়েছিল। কারণ: %3$s
- আপনি %1$s এর কক্ষে যোগদানের জন্য আমন্ত্রণটি বাতিল করেছেন। কারণ: %2$s
- %1$s %2$s এর জন্য আমন্ত্রণ গ্রহণ করেছেন। কারণ: %3$s
- আপনি %1$s এর জন্য আমন্ত্রণটি গ্রহণ করেছেন। কারণ: %2$s
- %1$s %2$s এর আমন্ত্রণ ফেরত নিয়েছে। কারণ: %3$s
- আপনি %1$s এর আমন্ত্রণ প্রত্যাহার করেছেন। কারণ: %2$s
-
-
- %1$s এই ঘরের ঠিকানা হিসাবে %2$s যুক্ত করেছে।
- %1$s এই ঘরের ঠিকানাগুলি হিসাবে %2$s যুক্ত করেছে।
-
-
-
- আপনি এই কক্ষের জন্য ঠিকানা হিসাবে %1$s যুক্ত করেছেন।
- আপনি এই কক্ষের ঠিকানা হিসাবে %1$s যুক্ত করেছেন।
-
-
-
- %1$s এই ঘরের ঠিকানা হিসাবে %2$s সরানো হয়েছে।
- %1$s %3$s কে এই ঘরের ঠিকানা হিসাবে সরানো হয়েছে।
-
-
-
- আপনি এই ঘরের ঠিকানা হিসাবে %1$s সরিয়েছেন।
- আপনি এই ঘরের ঠিকানা হিসাবে %2$s গুলি সরিয়েছেন।
-
-
- %1$s %2$s যোগ করেছে এবং %3$s গুলি এই ঘরের ঠিকানা হিসাবে সরানো হয়েছে।
- আপনি %1$s যোগ করেছেন এবং %2$s কে এই ঘরের ঠিকানা হিসাবে সরিয়ে দিয়েছেন।
-
- %1$s এই ঘরের মূল ঠিকানাটি %2$s তে সেট করে।
- আপনি এই ঘরের মূল ঠিকানাটি %1$s তে সেট করেছেন।
- %1$s এই ঘরের মূল ঠিকানা সরিয়ে নিয়েছে।
- আপনি এই ঘরের মূল ঠিকানা সরিয়েছেন।
-
- %1$s অতিথিদের ঘরে যোগদানের অনুমতি দিয়েছে।
- আপনি অতিথিদের ঘরে যোগদানের অনুমতি দিয়েছেন।
- %1$s অতিথিদের ঘরে যোগদান করতে বাধা দিয়েছে।
- আপনি অতিথিদের ঘরে যোগদান করতে বাধা দিয়েছেন।
-
- %1$s এন্ড-টু-এন্ড এনক্রিপশন চালু করেছে।
- আপনি শেষ থেকে শেষ এনক্রিপশন চালু করেছেন।
- %1$s এন্ড-টু-এন্ড এনক্রিপশন চালু করেছে (অজানা অ্যালগরিদম %2$s)।
- আপনি শেষ-থেকে-শেষ এনক্রিপশন চালু করেছেন (অজানা অ্যালগরিদম %1$s )।
-
- %s আপনার কীটি যাচাই করার জন্য অনুরোধ করছে, তবে আপনার ক্লায়েন্ট ইন-চ্যাট কী যাচাইকরণ সমর্থন করে না। কীগুলি যাচাই করতে আপনাকে লিগ্যাসি কী যাচাইকরণ ব্যবহার করতে হবে।
-
-
diff --git a/matrix-sdk-android/src/main/res/values-bs/strings.xml b/matrix-sdk-android/src/main/res/values-bs/strings.xml
deleted file mode 100644
index 6a6ee46d32..0000000000
--- a/matrix-sdk-android/src/main/res/values-bs/strings.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- Pozovite iz %s
- Poziv u Sobu
- %1$s i %2$s
- Prazna soba
-
\ No newline at end of file
diff --git a/matrix-sdk-android/src/main/res/values-ca/strings.xml b/matrix-sdk-android/src/main/res/values-ca/strings.xml
deleted file mode 100644
index 2dc2206c8c..0000000000
--- a/matrix-sdk-android/src/main/res/values-ca/strings.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
- %1$s: %2$s
- %1$s ha enviat una imatge.
-
- %1s ha sortit
- %1s ha entrat
- Número de telèfon
-
- Correu electrònic
- Missatge encriptat
-
- la invitació de %s
- %1$s ha convidat a %2$s
- %1$s us ha convidat
- %1$s ha rebutjat la invitació
- %1$s ha fet fora a %2$s
-
-
- %1$s ha canviat el seu nom visible de %2$s a %3$s
- %1$s ha eliminat el seu nom visible (%2$s)
- %1$s ha canviat el tema a: %2$s
- %1$s ha canviat el nom de la sala a: %2$s
- %s ha contestat la trucada.
- %s ha finalitzat la trucada.
- tots el membres de la sala, des del punt en què són convidats.
- tots els membres de la sala.
- desconegut (%s).
- %1$s ha activat l\'encriptació d\'extrem a extrem (%2$s)
-
- %1$s ha sol·licitat una conferència VoIP
- %1$s ha readmès a %2$s
- %1$s ha vetat a %2$s
- %1$s ha retirat la invitació de %2$s
- %1$s ha canviat el seu avatar
- %1$s ha permès a %2$s veure l\'historial que es generi a partir d\'ara
- tots els membres de la sala, des del punt en què hi entrin.
- qualsevol.
- S\'ha iniciat la conferència VoIP
- S\'ha finalitzat la conferència de veu IP
-
- (s\'ha canviat també l\'avatar)
- %1$s ha eliminat el nom de la sala
- %1$s ha eliminat el tema de la sala
- %1$s ha actualitzat el seu perfil %2$s
- %1$s ha enviat una invitació a %2$s per a entrar a la sala
- %1$s ha acceptat la invitació per a %2$s
-
- ** No s\'ha pogut desencriptar: %s **
- El dispositiu del remitent no ens ha enviat les claus per aquest missatge.
-
- No s\'ha pogut redactar
- No s\'ha pogut enviar el missatge
-
- No s\'ha pogut pujar la imatge
-
- S\'ha produït un error de xarxa
- S\'ha produït un error de Matrix
-
- Actualment no es pot tornar a entrar a una sala buida.
-
- %1$s a canviat el seu nom visible a %2$s
- %s ha iniciat una trucada de vídeo.
- %s ha iniciat una trucada de veu.
-
-
- Convidat per %s
- Convideu a la sala
- %1$s i %2$s
- Sala buida
-
- %1$s i 1 altre
- %1$s i %2$d altres
-
-
-
- %1$s ha enviat un adhesiu.
-
-
diff --git a/matrix-sdk-android/src/main/res/values-ca/strings_sas.xml b/matrix-sdk-android/src/main/res/values-ca/strings_sas.xml
new file mode 100644
index 0000000000..acc0dcbc72
--- /dev/null
+++ b/matrix-sdk-android/src/main/res/values-ca/strings_sas.xml
@@ -0,0 +1,68 @@
+
+
+
+ Gos
+ Gat
+ Lleó
+ Cavall
+ Unicorn
+ Porc
+ Elefant
+ Conill
+ Panda
+ Gall
+ Pingüí
+ Tortuga
+ Peix
+ Pop
+ Papallona
+ Flor
+ Arbre
+ Cactus
+ Bolet
+ Globus terraqüi
+ Lluna
+ Núvol
+ Foc
+ Plàtan
+ Poma
+ Maduixa
+ Blat de moro
+ Pizza
+ Pastís
+ Cor
+ Somrient
+ Robot
+ Barret
+ Ulleres
+ Clau anglesa
+ Pare Noél
+ Polzes amunt
+ Paraigües
+ Rellotge de sorra
+ Rellotge
+ Regal
+ Bombeta
+ Llibre
+ Llapis
+ Clip
+ Tisores
+ Cadenat
+ Clau
+ Martell
+ Telèfon
+ Bandera
+ Tren
+ Bicicleta
+ Avió
+ Coet
+ Trofeu
+ Pilota
+ Guitarra
+ Trompeta
+ Campana
+ Àncora
+ Auriculars
+ Carpeta
+ Xinxeta
+
diff --git a/matrix-sdk-android/src/main/res/values-cs/strings.xml b/matrix-sdk-android/src/main/res/values-cs/strings.xml
deleted file mode 100644
index 9e208f812a..0000000000
--- a/matrix-sdk-android/src/main/res/values-cs/strings.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
- %1$s: %2$s
- Uživatel %1$s poslal obrázek.
- Uživatel %1$s poslal nálepku.
-
- Pozvánka od uživatele %s
- Uživatel %1$s pozval uživatele %2$s
- Uživatel %1$s vás pozval
- Uživatel %1$s se připojil
- Uživatel %1$s odešel
- Uživatel %1$s odmítl pozvání
- Uživatel %1$s vykopl uživatele %2$s
- Uživatel %1$s znovu povolil vstup uživateli %2$s
- Uživatel %1$s vykázal uživatele %2$s
- Uživatel %1$s zrušil pozvání pro uživatele %2$s
- Uživatel %1$s změnil svůj profilový obrázek
- Uživatel %1$s nastavil své zobrazované jméno na %2$s
- Uživatel %1$s změnil své zobrazované jméno z %2$s na %3$s
- Uživatel %1$s odstranil své zobrazované jméno (%2$s)
- Uživatel %1$s změnil téma na: %2$s
- Uživatel %1$s změnil název místnosti na: %2$s
- Uživatel %s uskutečnil videohovor.
- Uživatel %s uskutečnil hlasový hovor.
- Uživatel %s přijal hovor.
- Uživatel %s ukončil hovor.
- Uživatel %1$s nastavit viditelnost budoucích zpráv v místnosti pro %2$s
- všechny členy místnosti od chvíle, kdy budou pozváni.
- všechny členy místnosti od chvíle, kdy se připojí.
- všechny členy místnosti.
- kohokoliv.
- neznámým (%s).
- Uživatel %1$s zapnul end-to-end šifrování (%2$s)
-
- Uživatel %1$s požádal o VoIP konferenci
- Začala VoIP konference
- VoIP konference skončila
-
- (profilový obrázek byl také změněn)
- Uživatel %1$s odstranil název místnosti
- Uživatel %1$s odstranil téma místnosti
- Uživatel %1$s aktualizoval svůj profil %2$s
- Uživatel %1$s do této místnosti pozval uživatele %2$s
- Uživatel %1$s přijal pozvání pro %2$s
-
- ** Nelze dešifrovat: %s **
- Odesílatelovo zařízení neposlalo klíče pro tuto zprávu.
-
- Nelze vymazat
- Zprávu nelze odeslat
-
- Obrázek nelze nahrát
-
- Chyba sítě
- Chyba v Matrixu
-
- V současnosti není možné se znovu připojit do prázdné místnosti.
-
- Šifrovaná zpráva
-
- E-mailová adresa
- Telefonní číslo
-
- Pozvání od %s
- Pozvání do místnosti
-
- %1$s a %2$s
-
-
- %1$s a jeden další
- %1$s a %2$d další
- %1$s a %2$d dalších
-
-
- Prázdná místnost
-
- Uživatel %s upgradoval tuto místnost.
-
- Zpráva byla smazána [důvod: %1$s]
- Zpráva smazána uživatelem %1$s [důvod: %2$s]
- Uživatel %1$s obnovil pozvánku do místnosti pro uživatele %2$s
- Úvodní synchronizace:
-\nImport účtu…
- Úvodní synchronizace:
-\nImport klíčů
- Úvodní synchronizace:
-\nImport místností
- Úvodní synchronizace:
-\nImport místností, kterými jste členy
- Úvodní synchronizace:
-\nImport opuštěných místností
- Úvodní synchronizace:
-\nImport skupin
- Úvodní synchronizace:
-\nImport dat účtu
-
- Odesílání zprávy…
-
- Úvodní synchronizace:
-\nImport pozvánek
- Vymazat frontu neodeslaných zpráv
-
- Uživatel %1$s pozval uživatele %2$s. Důvod: %3$s
- Uživatel %1$s váš pozval. Důvod: %2$s
- Uživatel %1$s odešel. Důvod: %2$s
- Zpráva odstraněna
- Zprávu odstranil/a %1$s
-
diff --git a/matrix-sdk-android/src/main/res/values-cs/strings_sas.xml b/matrix-sdk-android/src/main/res/values-cs/strings_sas.xml
new file mode 100644
index 0000000000..1ef9d56f60
--- /dev/null
+++ b/matrix-sdk-android/src/main/res/values-cs/strings_sas.xml
@@ -0,0 +1,68 @@
+
+
+
+ Pes
+ Kočka
+ Lev
+ Kůň
+ Jednorožec
+ Prase
+ Slon
+ Králík
+ Panda
+ Kohout
+ Tučňák
+ Želva
+ Ryba
+ Chobotnice
+ Motýl
+ Květina
+ Strom
+ Kaktus
+ Houba
+ Zeměkoule
+ Měsíc
+ Mrak
+ Oheň
+ Banán
+ Jablko
+ Jahoda
+ Kukuřice
+ Pizza
+ Dort
+ Srdce
+ Smajlík
+ Robot
+ Klobouk
+ Brýle
+ Klíč
+ Mikuláš
+ Palec nahoru
+ Deštník
+ Přesýpací hodiny
+ Hodiny
+ Dárek
+ Žárovka
+ Kniha
+ Tužka
+ Sponka
+ Nůžky
+ Zámek
+ Klíč
+ Kladivo
+ Telefon
+ Vlajka
+ Vlak
+ Kolo
+ Letadlo
+ Raketa
+ Pohár
+ Míč
+ Kytara
+ Trumpeta
+ Zvonek
+ Kotva
+ Sluchátka
+ Složka
+ Špendlík
+
diff --git a/matrix-sdk-android/src/main/res/values-da/strings.xml b/matrix-sdk-android/src/main/res/values-da/strings.xml
deleted file mode 100644
index 510fa231af..0000000000
--- a/matrix-sdk-android/src/main/res/values-da/strings.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
- %1$s: %2$s
- %1$s sendte et billede.
-
- %ss invitation
- %1$s inviterede %2$s
- %1$s inviterede dig
- %1$s forbandt
- %1$s forlod rummet
- %1$s afviste invitationen
- %1$s kickede %2$s
- %1$s unbannede %2$s
- %1$s bannede %2$s
- %1$s trak %2$ss invitation tilbage
- %1$s skiftede sin avatar
- %1$s satte sit viste navn til %2$s
- %1$s ændrede sit viste navn fra %2$s til %3$s
- %1$s fjernede sit viste navn (%2$s)
- %1$s ændrede emnet til: %2$s
- %1$s ændrede rumnavnet til: %2$s
- %s startede et videoopkald.
- %s startede et stemmeopkald.
- %s svarede opkaldet.
- %s stoppede opkaldet.
- %1$s gjorde den fremtidige rum historik synlig for %2$s
- alle medlemmer af rummet, fra det tidspunkt de er inviteret.
- alle medlemmer af rummet, fra det tidspunkt de er forbundede.
- Alle medlemmer af rummet.
- alle.
- ukendt (%s).
- %1$s slog ende-til-ende kryptering til (%2$s)
-
- %1$s forespurgte en VoIP konference
- VoIP konference startet
- VoIP konference afsluttet
-
- (avatar blev også ændret)
- %1$s fjernede navnet på rummet
- %1$s fjernede emnet for rummet
- %1$s opdaterede sin profil %2$s
- %1$s inviterede %2$s til rummet
- %1$s accepterede invitationen til %2$s
-
- ** Kunne ikke dekryptere: %s **
- Afsenderens enhed har ikke sendt os nøglerne til denne besked.
-
- Kunne ikke hemmeligholde
- Kunne ikke sende besked
-
- Kunne ikke uploade billede
-
- Netværks fejl
- Matrix fejl
-
- Det er i øjeblikket ikke muligt at genforbinde til et tomt rum.
-
- Krypteret besked
-
- mailadresse
- Telefonnummer
-
- Invitation fra %s
- Invitation til rum
- %1$s og %2$s
-
-
- %1$s og 1 anden
- %1$s og %2$d andre
-
-
- Tomt rum
-
-
diff --git a/matrix-sdk-android/src/main/res/values-de/strings.xml b/matrix-sdk-android/src/main/res/values-de/strings.xml
deleted file mode 100644
index ae80edb47f..0000000000
--- a/matrix-sdk-android/src/main/res/values-de/strings.xml
+++ /dev/null
@@ -1,237 +0,0 @@
-
-
-
- %1$s: %2$s
- %1$s hat ein Bild gesendet.
-
- Einladung von %s
- %1$s hat %2$s eingeladen
- %1$s hat dich eingeladen
- %1$s hat den Raum betreten
- %1$s hat den Raum verlassen
- %1$s hat die Einladung abgelehnt
- %1$s hat %2$s gekickt
- %1$s hat die Sperre von %2$s aufgehoben
- %1$s hat %2$s verbannt
- %1$s hat die Einladung für %2$s zurückgezogen
- %1$s hat das Profilbild geändert
- %1$s hat den Anzeigenamen geändert in %2$s
- %1$s hat den Anzeigenamen von %2$s auf %3$s geändert
- %1$s hat den Anzeigenamen gelöscht (%2$s)
- %1$s hat das Raumthema geändert auf: %2$s
- %1$s hat den Raumnamen geändert in: %2$s
- %s hat einen Videoanruf durchgeführt.
- %s hat einen Sprachanruf getätigt.
- %s hat den Anruf angenommen.
- %s hat den Anruf beendet.
- %1$s hat den zukünftigen Chatverlauf sichtbar gemacht für %2$s
- Alle Mitglieder (ab dem Zeitpunkt, an dem sie eingeladen wurden).
- Alle Mitglieder (ab dem Zeitpunkt, an dem sie den Raum betreten haben).
- alle Raum-Mitglieder.
- Jeder.
- Unbekannt (%s).
- %1$s hat die Ende-zu-Ende-Verschlüsselung aktiviert (%2$s)
-
- %1$s möchte eine VoIP-Konferenz beginnen
- VoIP-Konferenz gestartet
- VoIP-Konferenz beendet
-
- (Profilbild wurde ebenfalls geändert)
- %1$s hat den Raumnamen entfernt
- %1$s hat das Raum-Thema entfernt
- %1$s hat das Benutzerprofil aktualisiert %2$s
- %1$s hat eine Einladung an %2$s gesendet
- %1$s hat die Einladung in %2$s akzeptiert
-
- ** Nicht entschlüsselbar: %s **
- Das absendende Gerät hat uns keine Schlüssel für diese Nachricht übermittelt.
-
-
- Entfernen nicht möglich
- Nachricht kann nicht gesendet werden
-
- Bild konnte nicht hochgeladen werden
-
-
- Netzwerk-Fehler
- Matrix-Fehler
-
-
-
-
-
-
-
-
- Es ist aktuell nicht möglich, einen leeren Raum erneut zu betreten.
-
- Verschlüsselte Nachricht
-
-
- E-Mail-Adresse
- Telefonnummer
-
- %1$s sandte einen Sticker.
-
-
- Einladung von %s
- Raumeinladung
- %1$s und %2$s
- Leerer Raum
-
-
- %1$s und 1 andere(r)
- %1$s und %2$d andere
-
-
-
- Nachricht entfernt
- Nachricht entfernt von %1$s
- Nachricht entfernt [Grund: %1$s]
- Nachricht entfernt von %1$s [Grund: %2$s]
- %s hat diesen Raum aufgewertet.
-
- Sende eine Nachricht…
- Sendewarteschlange leeren
-
- Erste Synchronisation: Importiere Benutzerkonto…
- Erste Synchronisation: Importiere Cryptoschlüssel
- Erste Synchronisation: Importiere Räume
- Erste Synchronisation: Importiere betretene Räume
- Erste Synchronisation: Importiere eingeladene Räume
- Erste Synchronisation: Importiere verlassene Räume
- Erste Synchronisation: Importiere Gemeinschaften
- Erste Synchronisation: Importiere Benutzerdaten
-
- %1$s hat die Einladung an %2$s, den Raum zu betreten, zurückgezogen
- %1$s\'s Einladung. Grund: %2$s
- %1$s hat %2$s eingeladen. Grund: %3$s
- %1$s hat dich eingeladen. Grund: %2$s
- %1$s ist dem Raum beigetreten. Grund: %2$s
- %1$s hat den Raum verlassen. Grund: %2$s
- %1$s hat die Einladung abgelehnt. Grund: %2$s
- %1$s hat %2$s gekickt. Grund: %3$s
- %1$s hat Sperre von %2$s aufgehoben. Grund: %3$s
- %1$s hat %2$s verbannt. Grund: %3$s
- %1$s hat eine Einladung an %2$s gesandt um diesem Raum beizutreten. Grund: %3$s
- %1$s hat Einladung an %2$s zu Betreten dieses Raumes zurückgezogen. Grund: %3$s
- %1$s hat die Einladung für %2$s angenommen. Grund: %3$s
- %1$s hat Einladung für %2$s verworfen. Grund: %3$s
-
-
- %1$s fügt %2$s als eine Adresse für diesen Raum hinzu.
- %1$s fügt %2$s als Adressen für diesen Raum hinzu.
-
-
-
- %1$s entfernt %2$s als eine Adresse für diesen Raum.
- %1$s entfernt %2$s als Adressen für diesen Raum.
-
-
- %1$s fügt %2$s als Adresse für diesen Raum hinzu und entfernt %3$s.
-
- %1$s legt die Hauptadresse fest für diesen Raum als %2$s fest.
- %1$s entfernt die Hauptadresse für diesen Raum.
-
- %1$s hat Gästen erlaubt den Raum zu betreten.
- %1$s hat Gäste unterbunden den Raum zu betreten.
-
- %1$s aktivierte Ende-zu-Ende-Verschlüsselung.
- %1$s aktivierte Ende-zu-Ende-Verschlüsselung (unbekannter Algorithmus %2$s).
-
- %s fordert zur Überprüfung deines Schlüssels auf, jedoch unterstützt dein Client nicht die Schlüsselüberprüfung im Chat. Du musst die herkömmliche Schlüsselüberprüfung verwenden, um die Schlüssel zu überprüfen.
-
- Du hast ein Bild gesendet.
- Du hast einen Sticker gesendet.
-
- Deine Einladung
- %1$s hat den Raum erstellt
- Du hast den Raum erstellt
- Du hast %1$s eingeladen
- Du bist dem Raum beigetreten
- Du hast den Raum verlassen
- Du hast die Einladung abgelehnt
- Du hast %1$s aus dem Raum entfernt
- Du hast den Bann von %1$s aufgehoben
- Du hast %1$s gebannt
- Du hast die Einladung von %1$s zurückgenommen
- Du hast dein Profilbild geändert
- Du hast deinen Anzeigenamen zu %1$s geändert
- Du hast deinen Anzeigenamen von %1$s zu %2$s geändert
- Du hast deinen Anzeigenamen entfernt (er war %1$s)
- Du hast das Thema geändert auf: %1$s
- %1$s hat das Bild des Raumes geändert
- Du hast das Bild des Raumes geändert
- Du hast den Raumnamen zu %1$s geändert
- Du hast einen Videoanruf gestartet.
- Du hast einen Audioanruf gestartet.
- Du hast den Anruf angenommen.
- Du hast den Anruf beendet.
- Du hast den zukünftigen Nachrichtenverlauf für %1$s sichtbar gemacht
- Du hast Ende-zu-Ende-Verschlüsselung aktiviert (%1$s)
- Du hast den Raum aufgwertet.
-
- Du hast eine VoIP-Konferenz angefordert
- Du hast den Raumnamen entfernt
- Du hast das Raumthema entfernt
- %1$s hat das Bild des Raumes entfernt
- Du hast das Bild des Raumes entfernt
- Du hast dein Profil %1$s aktualisiert
- Du hast %1$s in den Raum eingeladen
- Du hast die Einladung für %1$s zurückgenommen
- Du hast die Einladung für %1$s akzeptiert
-
- %1$s hat das %2$s Widget hinzugefügt
- Du hast das %1$s Widget hinzugefügt
- %1$s hat das %2$s Widget entfernt
- Du hast das %1$s Widget entfernt
- %1$s hat das %2$s Widget modifiziert
- Du hast das %1$s Widget modifiziert
-
- Administrator
- Moderator
- Standard
- Benutzerdefiniert (%1$d)
- Benutzerdefiniert
-
- Du hast die Berechtigungsstufe von %1$s geändert.
- %1$s hat die Berechtigungsstufe von %2$s geändert.
- %1$s von %2$s zu %3$s
-
- Deine Einladung. Grund: %1$s
- Du hast %1$s eingeladen. Grund: %2$s
- Du bist dem Raum beigetreten. Grund: %1$s
- Du hast den Raum verlassen. Grund: %1$s
- Du hast die Einladung abgelehnt. Grund: %1$s
- Du hast %1$s aus dem Raum entfernt. Grund %2$s
- Du hast den Bann von %1$s aufgehoben. Grund: %2$s
- Du hast %1$s gebannt. Grund: %2$s
- Du hast %1$s in den Raum eingeladen. Grund: %2$s
- Du hast die Einladung für %1$s zurückgenommen. Grund: %2$s
- Du hast die Einladung von %1$s angenommen. Grund: %2$s
- Du hast die Einladung von %1$s abgelehnt. Grund: %2$s
-
-
- Du hast die Raumaddresse %1$s hinzugefügt.
- Du hast die Raumaddressen %1$s hinzugefügt.
-
-
-
- Du hast die Raumaddresse %1$s vom Raum entfernt.
- Du hast die Raumaddressen %1$s vom Raum entfernt.
-
-
- Du hast den Raumaddressen %1$s hinzugefügt und %2$s entfernt.
-
- Du hast die Hauptaddresse für diesen Raum auf %1$s gesetzt.
- Du hast die Hauptaddresse des Raums entfernt.
-
- Du hast Gästen erlaubt dem Raum beizutreten.
- Du hast Gästen untersagt dem Raum beizutreten.
-
- Du hast Ende-zu-Ende-Verschlüsselung aktiviert.
- Du hast Ende-zu-Ende-Verschlüsselung aktiviert (unbekannter Algorithmus %1$s).
-
- %s hat Daten gesendet, um einen Anruf zu starten.
- Du hast Daten geschickt, um eine Anruf zu starten.
-
diff --git a/matrix-sdk-android/src/main/res/values-de/strings_sas.xml b/matrix-sdk-android/src/main/res/values-de/strings_sas.xml
index 108dedd1a5..be75f797f9 100644
--- a/matrix-sdk-android/src/main/res/values-de/strings_sas.xml
+++ b/matrix-sdk-android/src/main/res/values-de/strings_sas.xml
@@ -27,20 +27,20 @@
BananeApfelErdbeere
- Korn
+ MaisPizzaKuchenHerz
- Smiley
+ LächelnRoboterHutBrilleSchraubenschlüssel
- Nikolaus
+ WeihnachtsmannDaumen HochRegenschirmSanduhr
- Wecker
+ UhrGeschenkGlühbirneBuch
@@ -56,7 +56,7 @@
FahrradFlugzeugRakete
- Trophäe
+ PokalBallGitarreTrompete
diff --git a/matrix-sdk-android/src/main/res/values-el/strings.xml b/matrix-sdk-android/src/main/res/values-el/strings.xml
deleted file mode 100644
index 9db4e91849..0000000000
--- a/matrix-sdk-android/src/main/res/values-el/strings.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
- Ηλεκτρονική διεύθυνση
- %1$s: %2$s
- Ο/Η %1$s έστειλε μια εικόνα.
- Ο/Η %1$s έστειλε ένα αυτοκόλλητο.
-
- Ο/Η %1$s σας προσκάλεσε
- Ο/Η %1$s αποχώρησε
- Ο/Η %1$s απέρριψε την πρόσκληση
- Ο/Η %1$s έδιωξε τον/την %2$s
- Ο/Η %1$s προσκάλεσε τον/την %2$s
- Η πρόσκληση του/της %s
- Αριθμός τηλεφώνου
-
- Ο/Η %1$s απέκλεισε τον/την %2$s
- Ο/Η %1$s απέσυρε την πρόσκληση του/της %2$s
- Ο/Η %1$s άλλαξε εικονίδιο χρήστη
- Ο/Η %1$s άλλαξε το εμφανιζόμενό του/της όνομα σε %2$s
- Ο/Η %1$s άλλαξε το εμφανιζόμενό του/της όνομα από %2$s σε %3$s
- Ο/Η %1$s αφαίρεσε το εμφανιζόμενό του/της όνομα (%2$s)
- Ο/Η %1$s άλλαξε το θέμα σε: %2$s
- Ο/Η %1$s άλλαξε το όνομα του δωματίου σε: %2$s
- Ο/Η %s απάντησε στην κλήση.
- Ο/Η %s τερμάτισε την κλήση.
-
- Ο/Η %s πραγματοποίησε μια κλήση βίντεο.
- Ο/Η %s πραγματοποίησε μια κλήση ήχου.
- Ο/Η %1$s κατέστησε το μελλοντικό ιστορικό του δωματίου ορατό στον/στην %2$s
- όλα τα μέλη του δωματίου, από την στιγμή που προσκλήθηκαν.
- όλα τα μέλη του δωματίου.
- οποιοσδήποτε.
- άγνωστος/η (%s).
- (έγινε αλλαγή και του εικονιδίου χρήστη)
- Ο/Η %1$s αφαίρεσε το όνομα του δωματίου
- Ο/Η %1$s αφαίρεσε το θέμα του δωματίου
- Ο/Η %1$s ανανέωσε το προφίλ του/της %2$s
- Ο/Η %1$s δέχτηκε την πρόσκληση για το %2$s
-
- ** Αδυναμία αποκρυπτογράφησης: %s **
- Η συσκευή του/της αποστολέα δεν μας έχει στείλει τα κλειδιά για αυτό το μήνυμα.
-
- Αποτυχία αποστολής μηνύματος
-
- Αποτυχία αναφόρτωσης εικόνας
-
- Σφάλμα δικτύου
- Σφάλμα του Matrix
-
- Κρυπτογραφημένο μήνυμα
-
- Ο/Η %1$s ζήτησε μια VoIP διάσκεψη
- Η VoIP διάσκεψη ξεκίνησε
- Η VoIP διάσκεψη έληξε
-
- Ο/Η %1$s εισήλθε στο δωμάτιο
-
- Πρόσκληση από %s
- Πρόσκληση στο δωμάτιο
-
- %1$s και %2$s
-
-
- %1$s και 1 ακόμα
- %1$s και %2$d ακόμα
-
-
- Άδειο δωμάτιο
-
- όλα τα μέλη του δωματίου από την στιγμή που εισήλθαν.
- Ο/Η %1$s ενεργοποίησε την κρυπτογράφηση απ\'άκρη σ\'άκρη (%2$s)
-
- Ο/Η %1$s έστειλε μία πρόσκληση στον/στην %2$s για να εισέλθει στο δωμάτιο
- Δεν είναι δυνατή ακόμα η επανείσοδος σε ένα άδειο δωμάτιο.
-
-
diff --git a/matrix-sdk-android/src/main/res/values-eo/strings.xml b/matrix-sdk-android/src/main/res/values-eo/strings.xml
deleted file mode 100644
index 69b009ca7e..0000000000
--- a/matrix-sdk-android/src/main/res/values-eo/strings.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
- %1$s sendis bildon.
- %1$s sendis glumarkon.
-
- Invito de %s
- %1$s invitis uzanton %2$s
- %1$s invitis vin
- %1$s alvenis
- %1$s foriris
- %1$s malakceptis la inviton
- %1$s forpelis uzanton %2$s
- %1$s malforbaris uzanton %2$s
- %1$s forbaris uzanton %2$s
- %1$s nuligis inviton por %2$s
- %1$s ŝanĝis sian profilbildon
- ** Ne eblas malĉifri: %s **
- La aparato de la sendanto ne sendis al ni la ŝlosilojn por tiu mesaĝo.
-
- %1$s: %2$s
- %1$s ŝanĝis sian vidigan nomon al %2$s
- %1$s ŝanĝis sian vidigan nomon de %2$s al %3$s
- %1$s forigis sian vidigan nomon (%2$s)
- %1$s ŝanĝis la temon al: %2$s
- %1$s ŝanĝis nomon de la ĉambro al: %2$s
- %s vidvokis.
- %s voĉvokis.
- %s respondis la vokon.
- %s finis la vokon.
- %1$s videbligis estontan historion de ĉambro al %2$s
- ĉiuj ĉambranoj, ekde iliaj invitoj.
- ĉiuj ĉambranoj, ekde iliaj aliĝoj.
- ĉiuj ĉambranoj.
- ĉiu ajn.
- nekonata (%s).
- %1$s ŝaltis tutvojan ĉifradon (%2$s)
- %s gradaltigis la ĉambron.
-
- Mesaĝo foriĝis
- Mesaĝo foriĝis de %1$s
- Mesaĝo foriĝis [kialo: %1$s]
- Mesaĝo foriĝis de %1$s [kialo: %2$s]
- %1$s ĝisdatigis sian profilon %2$s
- %1$s sendis aliĝan inviton al %2$s
- %1$s nuligis la aliĝan inviton por %2$s
- %1$s akceptis la inviton por %2$s
-
- Ne povis redakti
- Ne povas sendi mesaĝon
-
- Malsukcesis alŝuti bildon
-
- Reta eraro
- Matrix-eraro
-
- Nun ne eblas re-aliĝi al malplena ĉambro
-
- Ĉifrita mesaĝo
-
- Retpoŝtadreso
- Telefonnumero
-
- Invito de %s
- Ĉambra invito
-
- %1$s kaj %2$s
-
-
- %1$s kaj 1 alia
- %1$s kaj %2$d aliaj
-
-
- Malplena ĉambro
-
- Komenca spegulado:
-\nEnportante konton…
- Komenca spegulado:
-\nEnportante ĉifrilojn
- Komenca spegulado:
-\nEnportante ĉambrojn
- Komenca spegulado:
-\nEnportante aliĝitajn ĉambrojn
- Komenca spegulado:
-\nEnportante ĉambrojn de invitoj
- Komenca spegulado:
-\nEnportante forlasitajn ĉambrojn
- Komenca spegulado:
-\nEnportante komunumojn
- Komenca spegulado:
-\nEnportante datumojn de konto
-
- Sendante mesaĝon…
- Vakigi sendan atendovicon
-
- %1$s petis grupan vokon
- Grupa voko komenciĝis
- Grupa voko finiĝis
-
- (ankaŭ profilbildo ŝanĝiĝis)
- %1$s forigis nomon de la ĉambro
- %1$s forigis temon de la ĉambro
- Invito de %1$s. Kialo: %2$s
- %1$s invitis uzanton %2$s. Kialo: %3$s
- %1$s invitis vin. Kialo: %2$s
- %1$s aliĝis al la ĉambro. Kialo: %2$s
- %1$s foriris de la ĉambro. Kialo: %2$s
- %1$s rifuzis la inviton. Kialo: %2$s
- %1$s forpelis uzanton %2$s. Kialo: %3$s
- %1$s malforbaris uzanton %2$s. Kialo: %3$s
- %1$s forbaris uzanton %2$s. Kialo: %3$s
- %1$s sendis inviton al la ĉambro al %2$s. Kialo: %3$s
- %1$s nuligis la inviton al la ĉambro al %2$s. Kialo: %3$s
- %1$s akceptis la inviton por %2$s. Kialo: %3$s
- %1$s nuligis la inviton al %2$s. Kialo: %3$s
-
-
- %1$s aldonis %2$s kiel adreson por ĉi tiu ĉambro.
- %1$s aldonis %2$s kiel adresojn por ĉi tiu ĉambro.
-
-
-
- %1$s forigis %2$s kiel adreson por ĉi tiu ĉambro.
- %1$s forigis %2$s kiel adresojn por ĉi tiu ĉambro.
-
-
- %1$s aldonis %2$s kaj forigis %3$s kiel adresojn por ĉi tiu ĉambro.
-
- %1$s agordis la ĉefadreson por ĉi tiu ĉambro al %2$s.
- %1$s forigis la ĉefadreson de ĉi tiu ĉambro.
-
- %1$s permesis al gastoj aliĝi al la ĉambro.
- %1$s malpermesis al gastoj aliĝi al la ĉambro.
-
- %1$s ŝaltis tutvojan ĉifradon.
- %1$s ŝaltis tutvojan ĉifradon (kun nerekonita algoritmo %2$s).
-
- %s petas kontrolon de via ŝlosilo, sed via kliento ne subtenas kontrolon de ŝlosiloj en la babilujo. Vi devos uzi malnovecan kontrolon de ŝlosiloj.
-
-
diff --git a/matrix-sdk-android/src/main/res/values-es-rMX/strings.xml b/matrix-sdk-android/src/main/res/values-es-rMX/strings.xml
deleted file mode 100644
index a8e8477005..0000000000
--- a/matrix-sdk-android/src/main/res/values-es-rMX/strings.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
- %1$s: %2$s
- %1$s envió una imagen.
-
- la invitación de %s
- %1$s invitó a %2$s
- %1$s te invitó
- %1$s se unió
- %1$s salió
- %1$s rechazó la invitación
- %1$s quitó a %2$s
- %1$s desprohibió a %2$s
- %1$s prohibió %2$s
- %1$s retiró la invitación de %2$s
- %1$s cambió su foto de perfil
- %1$s estableció %2$s como su nombre visible
- %1$s cambió su nombre visible de %2$s a %3$s
- %1$s eliminó su nombre visible (%2$s)
- %1$s cambió el tema a: %2$s
- %1$s cambió el nombre de la sala a: %2$s
- %s comenzó una llamada de video.
- %s comenzó una llamada de voz.
- %s recibió la llamada.
- %s terminó la llamada.
- %1$s dejó que %2$s vea el historial del futuro
- todos los miembros de la sala, desde su invitación.
- todos los miembros de la sala, desde cuando entraron.
- todos los miembros de la sala.
- todos.
- desconocido (%s).
- %1$s encendió el cifrado de extremo a extremo (%2$s)
-
- %1$s solicitó una conferencia VoIP
- conferencia VoIP comenzó
- conferencia VoIP finalizó
-
- (foto de perfil también se cambió)
- %1$s eliminó el nombre de la sala
- %1$s retiró el tema de la sala
- %1$s actualizó su perfil %2$s
- %1$s envió una invitación a %2$s para entrar a la sala
- %1$s aceptó la invitación de %2$s
-
- ** No se puede descifrar: %s **
- El dispositivo del remitente no nos ha enviado las claves de este mensaje.
-
-
- No se pudo redactar
- No se puede enviar el mensaje
-
- La subida de la imagen falló
-
-
- Error de la red
- Error de Matrix
-
-
-
-
-
-
-
-
- No es posible volver a unirse a una sala vacía.
-
- Mensaje cifrado
-
-
- Correo electrónico
- Número telefónico
-
- %1$s envió una calcomanía.
-
-
- Invitación de %s
- Invitación de Sala
- %1$s y %2$s
- Sala vacía
-
-
-
- %1$s y otro
- %1$s y %2$d otros
-
-
- Mensaje eliminado
- Mensaje eliminado por %1$s
- Mensaje eliminado [motivo: %1$s]
- Mensaje eliminado por %1$s [motivo: %2$s]
-
diff --git a/matrix-sdk-android/src/main/res/values-es/strings.xml b/matrix-sdk-android/src/main/res/values-es/strings.xml
deleted file mode 100644
index 1b1935602c..0000000000
--- a/matrix-sdk-android/src/main/res/values-es/strings.xml
+++ /dev/null
@@ -1,244 +0,0 @@
-
-
-
- %1$s: %2$s
- %1$s envió una imagen.
-
- la invitación de %s
- %1$s invitó a %2$s
- %1$s te ha invitado
- %1$s se ha unido
- %1$s salió
- %1$s rechazó la invitación
- %1$s expulsó a %2$s
- %1$s le quitó el veto a %2$s
- %1$s vetó a %2$s
- %1$s retiró la invitación de %2$s
- %1$s cambió su avatar
- %1$s estableció %2$s como su nombre público
- %1$s cambió su nombre público de %2$s a %3$s
- %1$s eliminó su nombre público (%2$s)
- %1$s cambió el tema a: %2$s
- %1$s cambió el nombre de la sala a: %2$s
- %s realizó una llamada de vídeo.
- %s realizó una llamada de voz.
- %s contestó la llamada.
- %s finalizó la llamada.
- %1$s hizo visible el historial futuro de la sala para %2$s
- todos los miembros de la sala, desde su invitación.
- todos los miembros de la sala, desde el momento en que se unieron.
- todos los miembros de la sala.
- todos.
- desconocido (%s).
- %1$s activó el cifrado de extremo a extremo (%2$s)
-
- %1$s solicitó una conferencia de vozIP
- conferencia de vozIP iniciada
- conferencia de vozIP finalizada
-
- (el avatar también se cambió)
- %1$s eliminó el nombre de la sala
- %1$s eliminó el tema de la sala
- %1$s actualizó su perfil %2$s
- %1$s invitó a %2$s a unirse a la sala
- %1$s aceptó la invitación para %2$s
-
- ** No es posible descifrar: %s **
- El dispositivo emisor no nos ha enviado las claves para este mensaje.
-
-
- No se pudo redactar
- No es posible enviar el mensaje
-
- No se pudo cargar la imagen
-
-
- Error de red
- Error de Matrix
-
-
-
-
-
-
-
-
- Actualmente no es posible volver a unirse a una sala vacía.
-
- Mensaje cifrado
-
-
- Dirección de correo electrónico
- Número telefónico
-
- %1$s envió una pegatina.
-
-
- Invitación de %s
- Invitación a Sala
- %1$s y %2$s
- Sala vacía
-
-
- %1$s y 1 otro
- %1$s y %2$d otros
-
-
-
- Mensaje eliminado
- Mensaje eliminado por %1$s
- Mensaje eliminado [motivo: %1$s]
- Mensaje eliminado por %1$s [motivo: %2$s]
- %1$s ha revocado la invitación a unirse a la sala para %2$s
- Sincronización Inicial
-\nImportando cuenta…
- Sincronización Inicial:
-\nImportando Salas
- Sincronización Inicial:
-\nImportando Comunidades
- Sincronización Inicial:
-\nImportando Datos de la Cuenta
-
- Enviando mensaje…
- Borrar cola de envío
-
- %1$s ha invitado a %2$s. Razón: %3$s
- %1$s te ha invitado. Razón: %2$s
- %1$s se ha unido. Razón: %2$s
- %1$s se ha ido. Razón: %2$s
- %1$s ha rechadazo la invitación. Razón: %2$s
- %1$s expulsó a %2$s. Razón: %3$s
- %1$s ha baneado a %2$s. Razón: %3$s
- %1$s ha aceptado la invitación para %2$s. Razón: %3$s
- %1$s ha eliminado la dirección principal para esta sala.
-
- %s ha actualizado la sala.
-
- Sincronización Inicial:
-\nImportando criptografía
- Sincronización Inicial:
-\nImportando Salas a las que te has unido
- Sincronización Inicial:
-\nImportando Salas a las que has sido invitada
- Sincronización Inicial:
-\nImportando Salas Abandonadas
- Invitación de %1$s. Razón: %2$s
- %1$s ha desbaneado a %2$s. Razón: %3$s
- %1$s envió una invitación a %2$s para que se una a la sala. Razón: %3$s
- %1$s revocó la invitación de %2$s para unirse a la sala. Razón: %3$s
- %1$s ha retirado la invitación de %2$s. Razón: %3$s
-
-
- %1$s ha añadido %2$s como alias de esta sala.
- %1$s ha añadido %2$s como alias de esta sala.
-
-
-
- %1$s ha quitado %2$s como alias de esta habitación.
- %1$s ha quitado %2$s como alias de esta habitación.
-
-
- %1$s ha establecido la dirección principal de esta sala a %2$s.
- %1$s ha permitido que los invitados se unan a la sala.
- %1$s ha impedido que los invitados se unan a la sala.
-
- %1$s ha activado la encriptación extremo a extremo.
- %1$s ha activado la encriptación de extremo a extremo (algoritmo no reconocido %2$s).
-
- %s solicita verificar su clave, pero su cliente no soporta la verificación de la clave en chat. Necesitará usar la verificación de claves clásica para poder verificar las claves.
-
- Enviaste una imagen.
- Enviaste un sticker.
-
- Tu invitación
- %1$s creó la habitación
- Tu creaste la habitación
- Invitaste a %1$s
- Te uniste a la Sala
- Dejaste la Sala
- Rechazaste la invitación
- Tu pateaste a %1$s
- Tu desbanaste a %1$s
- Usted prohibió a %1$s
- Retiró la invitación de %1$s\'s
- Cambiaste tu avatar
- Establece su nombre de visualización en %1$s
- Cambiaste tu nombre para mostrar de %1$s a %2$s
- Quitaste tu nombre para mostrar (era %1$s)
- Cambiaste el tema a: %1$s
- %1$s cambió el avatar de la sala
- Cambiaste el avatar de la habitación
- Cambiaste el nombre de la habitación a: %1$s
- Hiciste una videollamada.
- Hiciste una llamada de voz.
- %s envió datos para configurar la llamada.
- Enviaste datos para configurar la llamada.
- Respondiste la llamada.
- Terminaste la llamada.
- Hiciste visible el futuro historial de la %1$s
- Activó el cifrado de un extremo a otro (%1$s)
- Has mejorado esta habitación.
-
- Solicitaste una conferencia de VoIP
- Quitaste el nombre de la sala
- Quitaste el tema de la sala
- %1$s eliminó el avatar de la habitación
- Quitaste el avatar de la habitación
- Actualizaste tu perfil %1$s
- Enviaste una invitación a %1$s para unirse a la sala
- Revocaste la invitación para que %1$s se una a la sala
- Aceptaste la invitación para %1$s
-
- %1$s agrego el widget %2$s
- Agregaste el widget %1$s
- %1$s eliminó el widget %2$s
- Quitaste el widget %1$s
- %1$s modifico el widget %2$s
- Modificaste el widget %1$s
-
- Administrador
- Moderador
- Por defecto
- Personalizado (%1$d)
- Personalizado
-
- Cambiaste el nivel de potencia de %1$s.
- %1$s cambió el nivel de potencia de %2$s.
- %1$s de %2$s a %3$s
-
- Tu invitación. Razón: %1$s
- "nvitaste a %1$s. Razón: %2$s"
- Te uniste a la habitación. Razón: %1$s
- Dejaste la habitación. Razón: %1$s
- Rechazaste la invitación. Razón: %1$s
- Pateaste a %1$s. Motivo: %2$s
- Has desactivado a %1$s. Motivo: %2$s
- Prohibiste a %1$s. Motivo: %2$s
- Enviaste una invitación a %1$s para unirse a la sala. Motivo: %2$s
- Revocaste la invitación para que %1$s se una a la sala. Motivo: %2$s
- Aceptaste la invitación para %1$s. Motivo: %2$s
- Retiró la invitación de %1$s\'s. Motivo: %2$s
-
-
- Agregaste %1$s como dirección para esta sala.
- Agregaste %1$s como direcciones para esta sala.
-
-
-
- Quitaste %1$s como dirección para esta sala.
- Quitaste %2$s como direcciones para esta sala.
-
-
- "%1$s agregó %2$s y eliminó %3$s como direcciones para esta sala."
- Agregaste %1$s y quitaste %2$s como direcciones para esta sala.
-
- Estableciste la dirección principal de esta sala en %1$s.
- Quitaste la dirección principal de esta sala.
-
- Ha permitido que los invitados se unan a la sala.
- Ha impedido que los invitados se unan a la sala.
-
- Activó el cifrado de extremo a extremo.
- Activó el cifrado de un extremo a otro (algoritmo %1$s no reconocido).
-
-
diff --git a/matrix-sdk-android/src/main/res/values-es/strings_sas.xml b/matrix-sdk-android/src/main/res/values-es/strings_sas.xml
index fd396c1778..b5f062cb62 100644
--- a/matrix-sdk-android/src/main/res/values-es/strings_sas.xml
+++ b/matrix-sdk-android/src/main/res/values-es/strings_sas.xml
@@ -36,18 +36,33 @@
SombreroGafasLlave inglesa
+ Papá Noel
+ Pulgar arriba
+ Paraguas
+ Reloj de arenaRelojRegalo
+ BombillaLibroLápiz
+ Clip
+ Tijeras
+ CandadoLlaveMartilloTelefono
+ BanderaTrenBicicleta
+ Avión
+ Cohete
+ TrofeoBolaGuitarraTrompetaCampana
+ Ancla
+ Cascos
+ CarpetaAlfiler
diff --git a/matrix-sdk-android/src/main/res/values-et/strings.xml b/matrix-sdk-android/src/main/res/values-et/strings.xml
deleted file mode 100644
index 2fbe263464..0000000000
--- a/matrix-sdk-android/src/main/res/values-et/strings.xml
+++ /dev/null
@@ -1,232 +0,0 @@
-
-
- %1$s: %2$s
- %1$s saatis pildi.
- %1$s saatis kleepsu.
-
- Kasutaja %s kutse
- %1$s kutsus kasutajat %2$s
- %1$s kutsus sind
- %1$s liitus jututoaga
- %1$s lahkus jututoast
- %1$s lükkas tagasi kutse
- %1$s müksas kasutajat %2$s
- %1$s võttis tagasi kutse kasutajale %2$s
- %1$s muutis oma avatari
- %1$s määras oma kuvatavaks nimeks %2$s
- %1$s muutis senise kuvatava nime %2$s uueks nimeks %3$s
- %1$s eemaldas oma kuvatava nime (%2$s)
- %1$s muutis uueks teemaks %2$s
- %1$s muutis jututoa uueks nimeks %2$s
- %s alustas videokõnet.
- %s alustas häälkõnet.
- %s vastas kõnele.
- %s lõpetas kõne.
- %1$s seadistas, et tulevane jututoa ajalugu on nähtav kasutajale %2$s
- kõikidele jututoa liikmetele alates kutsumise hetkest.
- kõikidele jututoa liikmetele alates liitumise hetkest.
- kõikidele jututoa liikmetele.
- kõikidele.
- teadmata (%s).
- %1$s lülitas sisse läbiva krüptimise (%2$s)
- %s uuendas seda jututuba.
-
- %1$s saatis VoIP konverentsi kutse
- VoIP-konverents algas
- VoIP-konverents lõppes
-
- (samuti sai avatar muudetud)
- %1$s eemaldas jututoa nime
- %1$s eemaldas jututoa teema
- Sõnum on eemaldatud
- Sõnum on eemaldatud %1$s poolt
- Sõnum on eemaldatud [põhjus: %1$s]
- Sõnum on eemaldatud %1$s poolt [põhjus: %2$s]
- %1$s uuendas oma profiili %2$s
- %1$s saatis jututoaga liitumiseks kutse kasutajale %2$s
- %1$s võttis tagasi jututoaga liitumise kutse kasutajalt %2$s
- %1$s võttis vastu kutse %2$s nimel
-
- ** Ei õnnestu dekrüptida: %s **
- Sõnumi saatja seade ei ole selle sõnumi jaoks saatnud dekrüptimisvõtmeid.
-
- Ei saanud muuta sõnumit
- Sõnumi saatmine ei õnnestunud
-
- Faili üles laadimine ei õnnestunud
-
- Võrguühenduse viga
- Matrix\'i viga
-
- Hetkel ei ole võimalik uuesti liituda tühja jututoaga.
-
- Krüptitud sõnum
-
- E-posti aadress
- Telefoninumber
-
- Kutse kasutajalt %s
- Kutse jututuppa
-
- %1$s ja %2$s
-
-
- %1$s ja üks muu
- %1$s ja %2$d muud
-
-
- Tühi jututuba
-
- Alglaadimine:
-\nImpordin kontot…
- Alglaadimine:
-\nImpordin krüptoseadistusi
- Alglaadimine:
-\nImpordin jututubasid
- Alglaadimine:
-\nImpordin liitutud jututubasid
- Alglaadimine:
-\nImpordin kutsutud jututubasid
- Alglaadimine:
-\nImpordin lahkutud jututubasid
- Alglaadimine:
-\nImpordin kogukondi
- Alglaadimine:
-\nImpordin kontoandmeid
-
- Saadan sõnumit…
- Tühjenda saatmisjärjekord
-
- Kasutaja %1$s kutse. Põhjus: %2$s
- %1$s kutsus kasutajat %2$s. Põhjus: %3$s
- %1$s kutsus sind. Põhjus: %2$s
- %1$s liitus jututoaga. Põhjus: %2$s
- %1$s lahkus jututoast. Põhjus: %2$s
- %1$s lükkas kutse tagasi. Põhjus: %2$s
- %1$s müksas välja kasutaja %2$s. Põhjus: %3$s
- %1$s saatis kasutajale %2$s kutse jututoaga liitumiseks. Põhjus: %3$s
- %1$s tühistas kasutajale %2$s saadetud kutse jututoaga liitumiseks. Põhjus: %3$s
- %1$s võttis vastu kutse %2$s jututoaga liitumiseks. Põhjus: %3$s
- %1$s võttis tagasi kasutajale %2$s saadetud kutse. Põhjus: %3$s
-
- %1$s lülitas sisse läbiva krüptimise.
- %1$s lülitas sisse läbiva krüptimise (tundmatu algoritm %2$s).
-
-
- %1$s lisas %2$s selle jututoa aadressiks.
- %1$s lisas %2$s selle jututoa aadressideks.
-
-
-
- %1$s eemaldas %2$s kui selle jututoa aadressi.
- %1$s eemaldas %2$s selle jututoa aadresside hulgast.
-
-
- %1$s lisas %2$s ja eemaldas %3$s selle jututoa aadresside loendist.
-
- %1$s seadistas selle jututoa põhiaadressiks %2$s.
- %1$s eemaldas selle jututoa põhiaadressi.
-
- %1$s lubas külalistel selle jututoaga liituda.
- %1$s seadistas, et külalised ei või selle jututoaga liituda.
-
- %s soovib verifitseerida sinu võtmeid, kuid sinu kasutatav klient ei oska vestluse-sisest verifitseerimist teha. Sa pead kasutama traditsioonilist verifitseerimislahendust.
-
- Kasutaja %1$s lõi jututoa
- Sina saatsid pildi.
- Sina saatsid kleepsu.
-
- Sinu kutse
- Sa lõid jututoa
- Sina kutsusid kasutajat %1$s
- Sina liitusid jututoaga
- Sina lahkusid jututoast
- Sina lükkasid kutse tagasi
- Sina müksasid %1$s välja
- %1$s taastas %2$s ligipääsu
- Sina taastasid %1$s ligipääsu
- %1$s keelas %1$s ligipääsu
- Sina keelasid %1$s ligipääsu
- Sina võtsid tagasi %1$s kutse
- Sina muutsid oma tunnuspilti
- Sina määrasid oma kuvatavaks nimeks %1$s
- Sina muutsid senise kuvatava nime %1$s uueks nimeks %2$s
- Sina eemaldasid oma kuvatava nime (oli %1$s)
- Sina muutsid uueks teemaks %1$s
- %1$s muutis jututoa tunnuspilti
- Sina muutsid jututoa tunnuspilti
- Sina muutsid jututoa uueks nimeks %1$s
- Sa alustasid videokõnet.
- Sa alustasid häälkõnet.
- %s saatis info kõne algatamiseks.
- Sa saatsid info kõne algatamiseks.
- Sa vastasid kõnele.
- Sa lõpetasid kõne.
- Sa seadistasid, et tulevane jututoa ajalugu on nähtav kasutajale %1$s
- Sa lülitasid sisse läbiva krüptimise (%1$s)
- Sa uuendasid seda jututuba.
-
- Sa algatasid VoIP rühmakõne
- Sa eemaldasid jututoa nime
- Sa eemaldasid jututoa teema
- %1$s eemaldas jututoa tunnuspildi
- Sa eemaldasid jututoa tunnuspildi
- Sa uuendasid oma profiili %1$s
- Sina saatsid kasutajale %1$s kutse jututoaga liitumiseks
- Sina võtsid tagasi jututoaga liitumise kutse kasutajalt %1$s
- Sina võtsid vastu kutse %1$s nimel
-
- %1$s lisas %2$s vidina
- Sina lisasid %1$s vidina
- %1$s eemaldas %2$s vidina
- Sina eemdaldasid %1$s vidina
- %1$s muutis %2$s vidinat
- Sa muutsid %1$s vidinat
-
- Peakasutaja
- Moderaator
- Tavakasutaja
- Kohandatud kasutajaõigused (%1$s)
- Kohandatud õigused
-
- Sina muutsid kasutaja %1$s õigusi.
- %1$s muutis kasutaja %2$s õigusi.
- %1$s õiguste muutus %2$s -> %3$s
-
- Sinu kutse. Põhjus %1$s
- Sina kutsusid kasutajat %1$s. Põhjus: %1$s
- Sina liitusid jututoaga. Põhjus: %1$s
- Sina lahkusid jututoast. Põhjus: %1$s
- Sina lükkasid kutse tagasi. Põhjus: %1$s
- Sina müksasid kasutaja %1$s välja. Põhjus: %2$s
- %1$s taastas ligipääsu kasutajale %2$s. Põhjus: %3$s
- Sina taastasid kasutaja %1$s ligipääsu. Põhjus: %2$s
- %1$s keelas kasutaja %2$s ligipääsu. Põhjus: %3$s
- Sina keelasid kasutaja %1$s ligipääsu. Põhjus: %2$s
- Sina saatsid kasutajale %1$s kutse jututoaga liitumiseks. Põhjus: %2$s
- Sina võtsid tagasi jututoaga liitumise kutse kasutajalt %1$s. Põhjus: %2$s
- Sina võtsid vastu kutse %1$s nimel. Põhjus: %2$s
- Sina võtsid tagasi kasutaja %1$s kutse. Põhjus: %2$s
-
-
- Sina lisasid %1$s selle jututoa aadressiks.
- Sina lisasid %1$s selle jututoa aadressideks.
-
-
-
- Sina eemaldasid %1$s, kui selle jututoa aadressi.
- Sina eemaldasid %1$s selle jututoa aadresside hulgast.
-
-
- Sina lisasid %1$s selle jututoa aadressiks ning eemaldasid %2$s aadresside hulgast.
-
- Sina seadistasid selle jututoa põhiaadressiks %1$s.
- Sina eemaldasid selle jututoa põhiaadressi.
-
- Sina lubasid külalistel selle jututoaga liituda.
- Sina seadistasid, et külalised ei või selle jututoaga liituda.
-
- Sa lülitasid sisse läbiva krüptimise.
- Sa lülitasid sisse läbiva krüptimise (kasutusel on tundmatu algoritm %1$s).
-
-
diff --git a/matrix-sdk-android/src/main/res/values-eu/strings.xml b/matrix-sdk-android/src/main/res/values-eu/strings.xml
deleted file mode 100644
index bc61035c24..0000000000
--- a/matrix-sdk-android/src/main/res/values-eu/strings.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
- %1$s: %2$s
- %1$s erabiltzaileak irudi bat bidali du.
-
- %s erabiltzailearen gonbidapena
- %1$s erabiltzaileak %2$s gonbidatu du
- %1$s erabiltzaileak gonbidatu zaitu
- %1$s gelara elkartu da
- %1$s gelatik atera da
- %1$s erabiltzaileak gonbidapena baztertu du
- %1$s erabiltzaileak %2$s kanporatu du
- %1$s erabiltzaileak debekua kendu dio %2$s erabiltzaileari
- %1$s erabiltzaileak %2$s debekatu du
- %1$s erabiltzaileak %2$s erabiltzailearen gonbidapena atzera bota du
- %1$s erabiltzaileak abatarra aldatu du
- %1$s erabiltzaileak bere pantaila-izena aldatu du beste honetara: %2$s
- %1$s erabiltzaileak bere pantaila-izena aldatu du, honetatik: %2$s honetara: %3$s
- %1$s erabiltzaileak bere pantaila-izena kendu du (%2$s)
- %1$s erabiltzaileak mintzagaia honetara aldatu du: %2$s
- %1$s erabiltzaileak gelaren izena honetara aldatu du: %2$s
- %s erabiltzaileak bideo deia hasi du.
- %s erabiltzaileak ahots deia hasi du.
- %s erabiltzaileak deia erantzun du.
- %s erabiltzaileak deia amaitu du.
- %1$s erabiltzaileak gelaren historiala ikusgai jarri du hauentzat: %2$s
- gelako kide guztiak, gonbidatu zitzaienetik.
- gelako kide guztiak, elkartu zirenetik.
- gelako kide guztiak.
- edonor.
- ezezaguna (%s).
- %1$s erabiltzaileak muturretik muturrera zifratzea aktibatu du (%2$s)
-
- %1$s erabiltzaileak VoIP konferentzia bat eskatu du
- VoIP konferentzia hasita
- VoIP konferentzia amaituta
-
- (abatarra ere aldatu da)
- %1$s erabiltzaileak gelaren izena kendu du
- %1$s erabiltzaileak gelaren mintzagaia kendu du
- %1$s erabiltzaileak bere profila eguneratu du %2$s
- %1$s erabiltzaileak gelara elkartzeko gonbidapen bat bidali dio %2$s erabiltzaileari
- %1$s erabiltzaileak %2$s gelarako gonbidapena onartu du
-
- ** Ezin izan da deszifratu: %s **
- Igorlearen gailuak ez dizkigu mezu honetarako gakoak bidali.
-
- Ezin izan da kendu
- Ezin izan da mezua bidali
-
- Huts egin du irudia igotzean
-
- Sare errorea
- Matrix errorea
-
- Ezin da oraingoz hutsik dagoen gela batetara berriro sartu.
-
- Zifratutako mezua
-
- E-mail helbidea
- Telefono zenbakia
-
- %1$s erabiltzaileak eranskailu bat bidali du.
-
- %s gelarako gonbidapena
- Gela gonbidapena
- %1$s eta %2$s
- Gela hutsa
-
-
- %1$s eta beste bat
- %1$s eta beste %2$d
-
-
-
- Mezua kendu da
- %1$s erabiltzaileak mezua kendu du
- Mezua kendu da [arrazoia: %1$s]
- %1$s erabiltzaileak mezua kendu du [arrazoia: %2$s]
-
- Hasierako sinkronizazioa:
-\nKontua inportatzen…
- Hasierako sinkronizazioa:
-\nZifratzea inportatzen
- Hasierako sinkronizazioa:
-\nGelak inportatzen
- Hasierako sinkronizazioa:
-\nElkartutako gelak inportatzen
- Hasierako sinkronizazioa:
-\nGonbidatutako gelak inportatzen
- Hasierako sinkronizazioa:
-\nUtzitako gelak inportatzen
- Hasierako sinkronizazioa:
-\nKomunitateak inportatzen
- Hasierako sinkronizazioa:
-\nKontuaren datuak inportatzen
-
- %s erabiltzaileak gela hau eguneratu du.
-
- Mezua bidaltzen…
- Garbitu bidalketa-ilara
-
- %1$s erabiltzaileak %2$s gelara elkartzeko gonbidapena indargabetu du
- %1$s erabiltzailearen gonbidapena. Arrazoia: %2$s
- %1$s erabiltzaileak %2$s gonbidatu du. Arrazoia: %3$s
- %1$s erabiltzaileak gonbidatu zaitu. Arrazoia: %2$s
- %1$s gelara elkartu da. Arrazoia: %2$s
- %1$s gelatik atera da. Arrazoia: %2$s
- %1$s erabiltzaileak gonbidapena baztertu du. Arrazoia: %2$s
- %1$s erabiltzaileak %2$s kanporatu du. Arrazoia: %3$s
- %1$s erabiltzaileak debekua kendu dio %2$s erabiltzaileari. Arrazoia: %3$s
- %1$s erabiltzaileak %2$s debekatu du. Arrazoia: %3$s
- "%1$s erabiltzaileak gelara elkartzeko gonbidapen bat bidali dio %2$s erabiltzaileari. Arrazoia: %3$s"
- "%1$s erabiltzaileak %2$s gelara elkartzeko gonbidapena indargabetu du. Arrazoia: %3$s"
- "%1$s erabiltzaileak %2$s gelarako gonbidapena onartu du. Arrazoia: %3$s"
- "%1$s erabiltzaileak %2$s erabiltzailearen gonbidapena indargabetu du. Arrazoia: %3$s"
-
-
- %1$s erabiltzaileak %2$s gehitu du gela honen helbide gisa.
- %1$s erabiltzaileak %2$s gehitu ditu gela honen helbide gisa.
-
-
-
- %1$s erabiltzaileak %2$s kendu du gela honen helbide gisa.
- %1$s erabiltzaileak %3$s kendu ditu gela honen helbide gisa.
-
-
- %1$s erabiltzaileak %2$s gehitu %3$s eta kendu ditu gela honen helbide gisa.
-
- %1$s erabiltzaileak %2$s ezarri du gela honen helbide nagusi gisa.
- %1$s erabiltzaileak gela honen helbide nagusia kendu du.
-
- %1$k gonbidatuak gelara sartzea onartu du.
- %1%k gonbidatuak gelara sartzea galerazi du.
-
- %1$s erabiltzaileak muturretik muturrerako zifratzea gaitu du.
- %1$s erabiltzaileak muturretik muturrerako zifratzea gaitu du. (%2$s algoritmo ezezaguna).
-
- %s(e)k zure gakoa egiaztatzea eskatu du, baina zure bezeroak ez du txatean gakoa egiaztatzea onartzen. Gako egiaztaketa zaharra erabili beharko duzu.
-
- %1$s erabiltzaileak gela sortu du
-
diff --git a/matrix-sdk-android/src/main/res/values-fa/strings.xml b/matrix-sdk-android/src/main/res/values-fa/strings.xml
deleted file mode 100644
index b88a98459d..0000000000
--- a/matrix-sdk-android/src/main/res/values-fa/strings.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
- %1$s: %2$s
- %1$s تصویری فرستاد.
- %1$s برچسبی فرستاد.
-
- دعوت %s
- %1$s، %2$s را دعوت کرد
- %1$s دعوتتان کرد
- %1$s به اتاق پیوست
- %1$s اتاق را ترک کرد
- %1$s دعوت را رد کرد
- %1$s، %2$s را اخراج کرد
- %1$s، انسداد %2$s را رفع کرد
- %1$s، %2$s را مسدود کرد
- %1$s دعوت %2$s را نپذیرفت
- %1$s تصویرش را عوض کرد
- %1$s نام نمایشی خود را به %2$s تنظیم کرد
- %1$s نام نمایشیش را از %2$s به %3$s تغییر داد
- %1$s نام نمایشیش (%2$s) را پاک کرد
- %1$s موضوع را به %2$s تغییر داد
- %1$s نام اتاق را به %2$s تغییر داد
- %s یک تماس تصویری برقرار کرد.
- %s یک تماس صوتی برقرار کرد.
- %s تماس را پاسخ داد.
- %s به تماس پایان داد.
- %1$s تاریخچهٔ آیندهٔ اتاق را برای %2$s نمایان کرد
- همهٔ اعضای اتاق، از زمان دعوت شدنشان.
- همهٔ اعضای اتاق، از زمان پیوستنشان.
- همهٔ اعضای اتاق.
- هرکسی.
- ناشناخته (%s).
- %1$s رمزنگاری سرتاسری را روشن کرد (%2$s)
- %s این اتاق را ارتقا داد.
-
- %1$s درخواست یک گردهمایی صوتی داد
- گردهمایی صوتی آغاز شد
- گردهمایی صوتی پایان یافت
-
- (تصویر هم عوض شد)
- %1$s نام اتاق را پاک کرد
- %1$s موضوع اتاق را پاک کرد
- پیام پاک شد
- پیام به دست %1$s پاک شد
- پیام پاک شد [دلیل: %1$s]
- پیام به دست %1$s پاک شد [دلیل: %2$s]
- %1$s دعوتی برای پیوستن %2$s به اتاق فرستاد
- %1$s دعوت پیوستن به اتاق %2$s را باطل کرد
- %1$s دعوت برای %2$s را پذیرفت
-
- ** ناتوان در رمزگشایی: %s **
- دستگاه فرستنده، کلیدهای این پیام را برایمان نفرستاده است.
-
- ناتوان در فرستادن پیام
-
- شکست در بارگذاری تصویر
-
- خطای شبکه
- خطای ماتریس
-
- در حال حاضر امکان بازپیوست به اتاقی خالی وجود ندارد.
-
- پیام رمزنگاری شده
-
- نشانی رایانامه
- شماره تلفن
-
- دعوت از %s
- دعوت اتاق
-
- %1$s و %2$s
-
-
- %1$s و ۱ نفر دیگر
- %1$s و %2$d نفر دیگر
-
-
- اتاق خالی
-
- همگامسازی نخستین:
-\nدر حال درونریزی حساب…
- همگامسازی نخستین:
-\nدر حال درونریزی رمزنگاری
- همگامسازی نخستین:
-\nدر حال درونریزی اتاقها
- همگامسازی نخستین:
-\nدر حال درونریزی اتاقهای پیوسته
- همگامسازی نخستین:
-\nدر حال درونریزی اتاقهای دعوتشده
- همگامسازی نخستین:
-\nدر حال درونریزی اتاقهای ترکشده
- همگامسازی نخستین:
-\nدر حال درونریزی انجمنها
- همگامسازی نخستین:
-\nدر حال درونریزی دادههای حساب
-
- در حال فرستادن پیام…
- پاکسازی صفِ در حال ارسال
-
- دعوت %1$s. دلیل: %2$s
- %1$s، %2$s را دعوت کرد. دلیل: %3$s
- %1$s دعوتتان کرد. دلیل: %2$s
- %1$s به اتاق پیوست. دلیل: %2$s
- %1$s اتاق را ترک کرد. دلیل: %2$s
- %1$s دعوت را رد کرد. دلیل: %2$s
- %1$s، %2$s را اخراج کرد. دلیل: %3$s
- %1$s انسداد %2$s را رفع کرد. دلیل: %3$s
- %1$s، %2$s را مسدود کرد. دلیل: %3$s
- %1$s دعوتی برای پیوستن %2$s به اتاق فرستاد. دلیل: %3$s
- %1$s دعوت %2$s برای پیوستن به اتاق را باطل کرد. دلیل: %3$s
- %1$s دعوت برای %2$s را پذیرفت. دلیل: %3$s
- %1$s دعوت %2$s را نپذیرفت. دلیل: %3$s
-
-
- %1$s، %2$s را به عنوان نشانیای برای این اتاق افزود.
- %1$s، %2$s را به عنوان نشانیهایی برای این اتاق افزود.
-
-
-
- %1$s، %2$s را به عنوان نشانیای برای این اتاق پاک کرد.
- %1$s، %3$s را به عنوان نشانیهایی برای این اتاق پاک کرد.
-
-
- %1$s برای نشانی این اتاق، %2$s را افزود و %3$s را پاک کرد.
-
- %1$s نشانی اصلی این اتاق را به %2$s تنظیم کرد.
- %1$s نشانی اصلی را برای این اتاق پاک کرد.
-
- %1$s اجازه داد میمهانان به گروه بپیوندند.
- %1$s جلوی پیوستن میمهانان به گروه را گرفت.
-
- %1$s رمزنگاری سرتاسری را روشن کرد.
- %1$s رمزنگاری سرتاسری را روشن کرد (الگوریتم تشخیصدادهنشده %2$s ).
-
- %s درخواست تأیید کلیدتان را دارد، ولی کارخواهتان تأیید کلید درون گپ را پشتیبانی نمیکند. برای تأیید کلیدها لازم است از تأییدیهٔ کلید قدیمی استفاده کنید.
-
- %1$s اتاق را ایجاد کرد
- %1$s نمایه خود را بهروز کرد %2$s
- نمیتوان ویرایش کرد
-
diff --git a/matrix-sdk-android/src/main/res/values-fi/strings.xml b/matrix-sdk-android/src/main/res/values-fi/strings.xml
deleted file mode 100644
index fccd22d3b6..0000000000
--- a/matrix-sdk-android/src/main/res/values-fi/strings.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
- %1$s lähetti kuvan.
-
- Käyttäjän %s kutsu
- %1$s kutsui käyttäjän %2$s
- %1$s kutsui sinut
- %1$s liittyi huoneeseen
- %1$s poistui huoneesta
- %1$s hylkäsi kutsun
- %1$s poisti käyttäjän %2$s
- %1$s poisti porttikiellon käyttäjältä %2$s
- %1$s antoi porttikiellon käyttäjälle %2$s
- %1$s veti takaisin kutsun käyttäjälle %2$s
- %1$s vaihtoi profiilikuvaansa
- %1$s asetti näyttönimekseen %2$s
- %1$s muutti näyttönimensä nimestä %2$s nimeen %3$s
- %1$s poisti näyttönimensä (%2$s)
- %1$s vaihtoi aiheeksi: %2$s
- %1$s vaihtoi huoneen nimeksi %2$s
- %s soitti videopuhelun.
- %s soitti äänipuhelun.
- %s vastasi puheluun.
- %s lopetti puhelun.
- %1$s muutti tulevan huonehistorian näkyväksi seuraaville: %2$s
- kaikki huoneen jäsenet, kutsumisestaan asti.
- kaikki huoneen jäsenet, liittymisestään asti.
- kaikki huoneen jäsenet.
- kaikki.
- tuntematon (%s).
- %1$s otti käyttöön osapuolten välisen salauksen (%2$s)
-
- %1$s lähetti VoIP-konferenssipyynnön
- VoIP-konferenssi alkoi
- VoIP-konferenssi päättyi
-
- (myös kuva vaihdettiin)
- %1$s poisti huoneen nimen
- %1$s poisti huoneen aiheen
- %1$s päivitti profiilinsa %2$s
- %1$s lähetti liittymiskutsun huoneeseen käyttäjälle %2$s
- %1$s hyväksyi kutsun käyttäjän %2$s puolesta
- ** Salauksen purku epäonnistui: %s **
- Lähettäjän laite ei ole lähettänyt avaimia tähän viestiin.
-
- Viestin lähetys epäonnistui
-
- Kuvan lataaminen epäonnistui
-
- Verkkovirhe
- Matrix-virhe
-
- Tällä hetkellä ei ole mahdollista liittyä uudelleen tyhjään huoneeseen.
-
- Salattu viesti
-
- Sähköpostiosoite
- Puhelinnumero
-
-
- Takaisinveto epäonnistui
- %1$s: %2$s
-
-
- Kutsu käyttäjältä %s
- Huonekutsu
- %1$s ja %2$s
- Tyhjä huone
-
-
- %1$s lähetti tarran.
-
-
- %1$s ja yksi muu
- %1$s ja %2$d muuta
-
-
- Viesti poistettu
- %1$s poisti viestin
- Viesti poistettu [syy: %1$s]
- %1$s poisti viestin [syy: %2$s]
-
- Alkusynkronointi:
-\nTuodaan tiliä…
- Alkusynkronointi:
-\nTuodaan kryptoa
- Alkusynkronointi:
-\nTuodaan huoneita
- Alkusynkronointi:
-\nTuodaan liityttyjä huoneita
- Alkusynkronointi:
-\nTuodaan kutsuttuja huoneita
- Alkusynkronointi:
-\nTuodaan poistuttuja huoneita
- Alkusynkronointi:
-\nTuodaan yhteisöjä
- Alkusynkronointi:
-\nTuodaan tilin tietoja
-
- %s päivitti tämän huoneen.
-
- Lähetetään viestiä…
- Tyhjennä lähetysjono
-
- %1$s veti takaisin käyttäjän %2$s liittymiskutsun huoneeseen
- Henkilön %1$s kutsu. Syy: %2$s
- %1$s kutsui henkilön %2$s. Syy: %3$s
- %1$s kutsui sinut. Syy: %2$s
- %1$s liittyi huoneeseen. Syy: %2$s
- %1$s poistui huoneesta. Syy: %2$s
- %1$s hylkäsi kutsun. Syy: %2$s
- %1$s poisti käyttäjän %2$s huoneesta. Syy: %3$s
- %1$s poisti porttikiellon käyttäjältä %2$s. Syy: %3$s
- %1$s antoi porttikiellon käyttäjälle %2$s. Syy: %3$s
- %1$s lähetti kutsun liittyä huoneeseen käyttäjälle %2$s. Syy: %3$s
- %1$s kumosi kutsun liittyä huoneeseen käyttäjälle %2$s. Syy: %3$s
- %1$s hyväksyi kutsun liityäkseen huoneeseen %2$s. Syy: %3$s
- %1$s veti takaisin käyttäjän %2$s kutsun. Syy: %3$s
-
-
- %1$s lisäsi tälle huoneelle osoitteen %2$s.
- %1$s lisäsi tälle huoneelle osoitteet %2$s.
-
-
-
- %1$s poisti tältä huoneelta osoitteen %2$s.
- %1$s poisti tältä huoneelta osoitteet %3$s.
-
-
- %1$s lisäsi tälle huoneelle osoitteen %2$s ja poisti osoitteen %3$s.
-
- %1$s asetti tämän huoneen pääosoitteeksi %2$s.
- %1$s poisti tämän huoneen pääosoitteen.
-
- %1$s salli vieraiden liittyä huoneeseen.
- %1$s esti vieraita liittymästä huoneeseen.
-
- %1$s laittoi päälle osapuolten välisen salauksen.
- %1$s laittoi päälle osapuolisten välisen salauksen (tuntematon algoritmi %2$s).
-
- %s haluaa varmentaa salausavaimesi, mutta asiakasohjelmasi ei tue keskustelun aikana tapahtuvaa avainten varmennusta. Joudut käyttämään perinteistä varmennustapaa.
-
-
diff --git a/matrix-sdk-android/src/main/res/values-fi/strings_sas.xml b/matrix-sdk-android/src/main/res/values-fi/strings_sas.xml
index b690fee4ed..12edb39070 100644
--- a/matrix-sdk-android/src/main/res/values-fi/strings_sas.xml
+++ b/matrix-sdk-android/src/main/res/values-fi/strings_sas.xml
@@ -35,7 +35,7 @@
RobottiHattuSilmälasit
- Mutteriavain
+ KiintoavainJoulupukkiPeukalo ylösSateenvarjo
diff --git a/matrix-sdk-android/src/main/res/values-fr/strings.xml b/matrix-sdk-android/src/main/res/values-fr/strings.xml
deleted file mode 100644
index 71b956a7e7..0000000000
--- a/matrix-sdk-android/src/main/res/values-fr/strings.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
- %1$s : %2$s
- %1$s a envoyé une image.
-
- invitation de %s
- %1$s a invité %2$s
- %1$s vous a invité
- %1$s a rejoint le salon
- %1$s est parti du salon
- %1$s a rejeté l’invitation
- %1$s a expulsé %2$s
- %1$s a révoqué le bannissement de %2$s
- %1$s a banni %2$s
- %1$s a annulé l’invitation de %2$s
- %1$s a changé d’avatar
- %1$s a modifié son nom affiché en %2$s
- %1$s a modifié son nom affiché %2$s en %3$s
- %1$s a supprimé son nom affiché (%2$s)
- %1$s a changé le sujet en : %2$s
- %1$s a changé le nom du salon en : %2$s
- %s a passé un appel vidéo.
- %s a passé un appel vocal.
- %s a répondu à l’appel.
- %s a raccroché.
- %1$s a rendu l’historique futur du salon visible pour %2$s
- tous les membres du salon, depuis qu’ils ont été invités.
- tous les membres du salon, depuis qu’ils l’ont rejoint.
- tous les membres du salon.
- n’importe qui.
- inconnu (%s).
- %1$s a activé le chiffrement de bout en bout (%2$s)
-
- %1$s a demandé une téléconférence VoIP
- Téléconférence VoIP démarrée
- Téléconférence VoIP terminée
-
- (l’avatar a aussi changé)
- %1$s a supprimé le nom du salon
- %1$s a supprimé le sujet du salon
- %1$s a mis à jour son profil %2$s
- %1$s a envoyé une invitation à %2$s pour rejoindre le salon
- %1$s a accepté l’invitation pour %2$s
-
- ** Déchiffrement impossible : %s **
- L’appareil de l’expéditeur ne nous a pas envoyé les clés pour ce message.
-
- Effacement impossible
- Envoi du message impossible
-
- L’envoi de l’image a échoué
-
- Erreur de réseau
- Erreur de Matrix
-
- Il est impossible pour le moment de revenir dans un salon vide.
-
- Message chiffré
-
- Adresse e-mail
- Numéro de téléphone
-
- %1$s a envoyé un sticker.
-
- Invitation de %s
- Invitation au salon
- Salon vide
- %1$s et %2$s
-
-
- %1$s et 1 autre
- %1$s et %2$d autres
-
-
-
- Message supprimé
- Message supprimé par %1$s
- Message supprimé [motif : %1$s]
- Message supprimé par %1$s [motif : %2$s]
-
- Synchronisation initiale :
-\nImportation du compte…
- Synchronisation initiale :
-\nImportation de la cryptographie
- Synchronisation initiale :
-\nImportation des salons
- Synchronisation initiale :
-\nImportation des salons que vous avez rejoints
- Synchronisation initiale :
-\nImportation des salons où vous avez été invités
- Synchronisation initiale :
-\nImportation des salons que vous avez quittés
- Synchronisation initiale :
-\nImportation des communautés
- Synchronisation initiale :
-\nImportation des données du compte
-
- %s a mis à niveau ce salon.
-
- Envoi du message…
- Vider la file d’envoi
-
- %1$s a révoqué l’invitation pour %2$s à rejoindre le salon
- Invitation de %1$s. Raison : %2$s
- %1$s a invité %2$s. Raison : %3$s
- %1$s vous a invité. Raison : %2$s
- %1$s a rejoint le salon. Raison : %2$s
- %1$s est parti du salon. Raison : %2$s
- %1$s a refusé l’invitation. Raison : %2$s
- %1$s a expulsé %2$s. Raison : %3$s
- %1$s a révoqué le bannissement de %2$s. Raison : %3$s
- %1$s a banni %2$s. Raison : %3$s
- %1$s a envoyé une invitation à %2$s pour rejoindre le salon. Raison : %3$s
- %1$s a révoqué l’invitation de %2$s à rejoindre le salon. Raison : %3$s
- %1$s a accepté l’invitation pour %2$s. Raison : %3$s
- %1$s a annulé l’invitation de %2$s. Raison : %3$s
-
-
- %1$s a ajouté %2$s comme adresse pour ce salon.
- %1$s a ajouté %2$s comme adresses pour ce salon.
-
-
-
- %1$s a supprimé %2$s comme adresse pour ce salon.
- %1$s a supprimé %3$s comme adresses pour ce salon.
-
-
- %1$s a ajouté %2$s et supprimé %3$s comme adresses pour ce salon.
-
- %1$s a défini %2$s comme adresse principale pour ce salon.
- %1$s a supprimé l’adresse principale de ce salon.
-
- %1$s a autorisé les visiteurs à rejoindre le salon.
- %1$s a empêché les visiteurs de rejoindre le salon.
-
- %1$s a activé le chiffrement de bout en bout.
- %1$s a activé le chiffrement de bout en bout (algorithme %2$s inconnu).
-
- %s demande à vérifier votre clé, mais votre client ne supporte pas la vérification de clés dans les discussions. Vous devrez utiliser l’ancienne vérification de clés pour vérifier les clés.
-
- %1$s a créé le salon
-
diff --git a/matrix-sdk-android/src/main/res/values-fr/strings_sas.xml b/matrix-sdk-android/src/main/res/values-fr/strings_sas.xml
index af9d797542..e7d6ef8058 100644
--- a/matrix-sdk-android/src/main/res/values-fr/strings_sas.xml
+++ b/matrix-sdk-android/src/main/res/values-fr/strings_sas.xml
@@ -33,11 +33,11 @@
CœurSourireRobot
- Châpeau
+ ChapeauLunettesClé à molettePère Noël
- Pouce en l\'air
+ Pouce en l’airParapluieSablierRéveil
diff --git a/matrix-sdk-android/src/main/res/values-gl/strings.xml b/matrix-sdk-android/src/main/res/values-gl/strings.xml
deleted file mode 100644
index 77868e7df3..0000000000
--- a/matrix-sdk-android/src/main/res/values-gl/strings.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
- Enderezo de correo
- Fallo ao subir a páxina
-
-
- %1$s: %2$s
- %1$s enviou unha imaxe.
- %1$s enviou unha icona.
-
- Convite de %s
- %1$s convidou a %2$s
- %1$s convidouno
- %1$s entrou
- %1$s saíu
- %1$s rexeitou o convite
- %1$s expulsou a %2$s
- %1$s desbloqueou a %2$s
- %1$s bloqueou a %2$s
- %1$s cancelou o convite de %2$s
- %1$s cambiou o seu avatar
- %1$s cambiou o seu nome a %2$s
- %1$s cambiou o seu nome de %2$s a %3$s
- %1$s borrou o seu nome público (%2$s)
- %1$s cambiou o tema desta sala para: %2$s
- %1$s cambiou o nome desta sala para: %2$s
- %s iniciou unha chamada de vídeo.
- %s iniciou unha chamada de voz.
- %s respondeu á chamada.
- %s terminou a chamada.
- %1$s fixo visible os próximos históricos para %2$s
- toda a xente que integran esta sala, desde o momento en que foron convidados.
- todas a xente da sala, desde o momento en que entraron.
- todas os membros da sala.
- todos.
- descoñecido (%s).
- %1$s activou a criptografía par-a-par (%2$s)
-
- %1$s solicitou unha conferencia VoIP
- A conferencia VoIP comenzou
- A conferencia VoIP terminou
-
- (o avatar tamén foi cambiado)
- %1$s borrou o nome da sala
- %1$s removeu o tema da sala
- %1$s actualizou o seu perfil %2$s
- %1$s envioulle un convite a %2$s para que entre na sala
- %1$s aceptou o convite para %2$s
-
- ** Imposíbel descifrar: %s **
- O dispositivo do que envía non enviou as chaves desta mensaxe.
-
- Non se puido redactar
- Non foi posíbel enviar a mensaxe
-
- Erro da conexión
- Erro de Matrix
-
- Aínda non é posíbel volver a entrar nunha sala baleira.
-
- Mensaxe cifrada
-
- Número de teléfono
-
- %1$s e %2$s
-
-
-
diff --git a/matrix-sdk-android/src/main/res/values-hr/strings_sas.xml b/matrix-sdk-android/src/main/res/values-hr/strings_sas.xml
new file mode 100644
index 0000000000..423ab20186
--- /dev/null
+++ b/matrix-sdk-android/src/main/res/values-hr/strings_sas.xml
@@ -0,0 +1,68 @@
+
+
+
+ pas
+ mačka
+ lav
+ konj
+ jednorog
+ svinja
+ slon
+ zec
+ panda
+ kokot
+ pingvin
+ kornjača
+ riba
+ hobotnica
+ leptir
+ svijet
+ drvo
+ kaktus
+ gljiva
+ Globus
+ mjesec
+ oblak
+ vatra
+ banana
+ jabuka
+ jagoda
+ kukuruza
+ pizza
+ torta
+ srca
+ smajlića
+ robot
+ kapa
+ naočale
+ ključ
+ deda Mraz
+ palac gore
+ kišobran
+ pješčani sat
+ sat
+ poklon
+ žarulja
+ knjiga
+ olovka
+ spajalica
+ škare
+ zaključati
+ ključ
+ čekić
+ telefon
+ zastava
+ vlak
+ bicikl
+ avion
+ raketa
+ trofej
+ lopta
+ gitara
+ truba
+ zvono
+ sidro
+ slušalice
+ mapu
+ pribadača
+
diff --git a/matrix-sdk-android/src/main/res/values-hu/strings.xml b/matrix-sdk-android/src/main/res/values-hu/strings.xml
deleted file mode 100644
index 896a97b023..0000000000
--- a/matrix-sdk-android/src/main/res/values-hu/strings.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
- %1$s: %2$s
- %1$s küldött egy képet.
-
- %s meghívója
- %1$s meghívta: %2$s
- %1$s meghívott
- %1$s belépett a szobába
- %1$s kilépett a szobából
- %1$s elutasította a meghívást
- %1$s kidobta: %2$s
- %1$s feloldotta %2$s tiltását
- %1$s kitiltotta: %2$s
- %1$s visszavonta %2$s meghívását
- %1$s megváltoztatta a profilképét
- %1$s megváltoztatta a megjelenő nevét erre: %2$s
- %1$s megváltoztatta a megjelenítendő nevét erről: %2$s, erre: %3$s
- %1$s eltávolította a megjelenítendő nevét (%2$s)
- %1$s megváltoztatta a témát erre: %2$s
- %1$s megváltoztatta a szoba nevét erre: %2$s
- %s videóhívást kezdeményezett.
- %s hanghívást kezdeményezett.
- %s fogadta a hívást.
- %s befejezte a hívást.
- %1$s láthatóvá tette a jövőbeli előzményeket %2$s számára
- az összes szobatag, onnantól, hogy meg lettek hívva.
- az összes szobatag, onnantól, hogy csatlakoztak.
- az összes szobatag.
- bárki.
- ismeretlen (%s).
- %1$s bekapcsolta a végpontok közötti titkosítást (%2$s)
-
- %1$s hanghívás konferenciát kérelmezett
- Hanghívás konferencia elindult
- Hanghívás konferencia befejeződött
-
- (a profilkép is megváltozott)
- %1$s eltávolította a szoba nevét
- %1$s eltávolította a szoba témáját
- %1$s megváltoztatta a(z) %2$s profilját
- %1$s meghívót küldött %2$s számára, hogy csatlakozzon a szobához
- %1$s elfogadta a meghívót ebbe: %2$s
-
- ** Visszafejtés sikertelen: %s **
- A küldő eszköze nem küldte el a kulcsokat ehhez az üzenethez.
-
- Kitakarás sikertelen
- Üzenet küldése sikertelen
-
- Kép feltöltése sikertelen
-
- Hálózati hiba
- Matrix hiba
-
- Jelenleg nem lehetséges újracsatlakozni egy üres szobához.
-
- Titkosított üzenet
-
- E-mail cím
- Telefonszám
-
- %1$s küldött egy matricát.
-
- Meghívó tőle: %s
- Meghívó egy szobába
- %1$s és %2$s
- Üres szoba
-
-
- %1$s és 1 másik
- %1$s és %2$d másik
-
-
-
- Üzenet eltávolítva
- Üzenetet eltávolította: %1$s
- Üzenet eltávolítva [ok: %1$s]
- Üzenetet eltávolította: %1$s [ok: %2$s]
-
- Induló szinkronizáció:
-\nFiók betöltése…
- Induló szinkronizáció:
-\nTitkosítás betöltése
- Induló szinkronizáció:
-\nSzobák betöltése
- Induló szinkronizáció:
-\nCsatlakozott szobák betöltése
- Induló szinkronizáció:
-\nMeghívott szobák betöltése
- Induló szinkronizáció:
-\nElhagyott szobák betöltése
- Induló szinkronizáció:
-\nKözösségek betöltése
- Induló szinkronizáció:
-\nFiók adatok betöltése
-
- %s frissítette ezt a szobát.
-
- Üzenet küldése…
- Küldő sor ürítése
-
- %1$s visszavonta %2$s meghívását, hogy csatlakozzon a szobához
- %1$s meghívója. Ok: %2$s
- %1$s meghívta őt: %2$s. Ok: %3$s
- %1$s meghívott. Ok: %2$s
- %1$s belépett a szobába. Mert: %2$s
- %1$s kilépett a szobából. Ok: %2$s
- %1$s visszautasította a meghívót. Ok: %2$s
- %1$s kirúgta őt: %2$s. Ok: %3$s
- %1$s visszaengedte őt: %2$s. Ok: %3$s
- %1$s kitiltotta őt: %2$s. Ok: %3$s
- %1$s meghívót küldött neki: %2$s, hogy lépjen be a szobába. Ok: %3$s
- %1$s visszavonta %2$s meghívóját a szobába való belépéshez. Ok: %3$s
- %1$s elfogadta a meghívót ide: %2$s. Ok: %3$s
- %1$s visszavonta %2$s meghívóját. Ok: %3$s
-
-
- %1$s ezt a címet adta a szobához: %2$s.
- %1$s ezeket a címeket adta a szobához: %2$s.
-
-
-
- %1$s ezt a címet törölte a szobából: %3$s.
- %1$s ezeket a címeket törölte a szobából: %3$s.
-
-
- %1$s a szobához adta ezeket:%2$s és törölte ezeket: %3$s.
-
- %1$s a szoba elsődleges címét erre állította be: %2$s.
- %1$s eltávolította a szoba elsődleges címét.
-
- %1$s megengedte a vendégeknek, hogy belépjenek ebbe a szobába.
- %1$s megtiltotta a vendégeknek, hogy belépjenek ebbe a szobába.
-
- %1$s bekapcsolta a végpontok közötti titkosítást.
- %1$s bekapcsolta a végpontok közötti titkosítást (ismeretlen algoritmus %2$s).
-
- %s kéri a kulcsok ellenőrzését de a kliens nem támogatja a szobán belüli kulcs ellenőrzést. A hagyományos módon kell ellenőrizned a kulcsokat.
-
- %1$s szobát készített
-
diff --git a/matrix-sdk-android/src/main/res/values-hu/strings_sas.xml b/matrix-sdk-android/src/main/res/values-hu/strings_sas.xml
new file mode 100644
index 0000000000..5b5e0e0205
--- /dev/null
+++ b/matrix-sdk-android/src/main/res/values-hu/strings_sas.xml
@@ -0,0 +1,68 @@
+
+
+
+ Kutya
+ Macska
+ Oroszlán
+ Ló
+ Egyszarvú
+ Malac
+ Elefánt
+ Nyúl
+ Panda
+ Kakas
+ Pingvin
+ Teknős
+ Hal
+ Polip
+ Pillangó
+ Virág
+ Fa
+ Kaktusz
+ Gomba
+ Földgömb
+ Hold
+ Felhő
+ Tűz
+ Banán
+ Alma
+ Eper
+ Kukorica
+ Pizza
+ Süti
+ Szív
+ Mosoly
+ Robot
+ Kalap
+ Szemüveg
+ Csavarkulcs
+ Télapó
+ Hüvelykujj fel
+ Esernyő
+ Homokóra
+ Óra
+ Ajándék
+ Égő
+ Könyv
+ Ceruza
+ Gémkapocs
+ Olló
+ Lakat
+ Kulcs
+ Kalapács
+ Telefon
+ Zászló
+ Vonat
+ Kerékpár
+ Repülő
+ Rakáta
+ Trófea
+ Labda
+ Gitár
+ Trombita
+ Harang
+ Horgony
+ Fejhallgató
+ Mappa
+ Rajszeg
+
diff --git a/matrix-sdk-android/src/main/res/values-id/strings.xml b/matrix-sdk-android/src/main/res/values-id/strings.xml
deleted file mode 100644
index 157b23d401..0000000000
--- a/matrix-sdk-android/src/main/res/values-id/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- Undang dari %s
- Undangan Ruang
- %1$s dan %2$s
-
- Ruang kosong
-
-
- %1$s dan %2$d yang lain
-
-
\ No newline at end of file
diff --git a/matrix-sdk-android/src/main/res/values-in/strings.xml b/matrix-sdk-android/src/main/res/values-in/strings.xml
deleted file mode 100644
index 157b23d401..0000000000
--- a/matrix-sdk-android/src/main/res/values-in/strings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- Undang dari %s
- Undangan Ruang
- %1$s dan %2$s
-
- Ruang kosong
-
-
- %1$s dan %2$d yang lain
-
-
\ No newline at end of file
diff --git a/matrix-sdk-android/src/main/res/values-is/strings.xml b/matrix-sdk-android/src/main/res/values-is/strings.xml
deleted file mode 100644
index ecf19edb8a..0000000000
--- a/matrix-sdk-android/src/main/res/values-is/strings.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
- %1$s: %2$s
- %1$s sendi mynd.
- %1$s sendi límmerki.
-
- %s sendi boð um þátttöku
- %1$s bauð %2$s
- %1$s bauð þér
- %1$s gekk í hópinn
- %1$s hætti
- %1$s hafnaði boðinu
- %1$s sparkaði %2$s
- %1$s afbannaði %2$s
- %1$s bannaði %2$s
- %1$s breyttu auðkennismynd sinni
- allir meðlimir spjallrásar, síðan þeim var boðið.
- allir meðlimir spjallrásar, síðan þeir skráðu sig.
- allir meðlimir spjallrásar.
- hver sem er.
- óþekktur (%s).
- VoIP-símafundur hafinn
- VoIP-símafundi lokið
-
- (einnig var skipt um auðkennismynd)
- ** Mistókst að afkóða: %s **
-
- Gat ekki sent skilaboð
-
- Gat ekki sent inn mynd
-
- Villa í netkerfi
- Villa í Matrix
-
- Dulrituð skilaboð
-
- Tölvupóstfang
- Símanúmer
-
- %1$s tók til baka boð frá %2$s
- %1$s setti birtingarnafn sitt sem %2$s
- %1$s breytti birtingarnafni sínu úr %2$s í %3$s
- %1$s fjarlægði birtingarnafn sitt (%2$s)
- %1$s breytti umræðuefninu í: %2$s
- %1$s breytti heiti spjallrásarinnar í: %2$s
- %s hringdi myndsamtal.
- %s hringdi raddsamtal.
- %s svaraði símtalinu.
- %s lauk símtalinu.
- %1$s kveikti á enda-í-enda dulritun (%2$s)
-
- %1$s bað um VoIP-símafund
- %1$s fjarlægði heiti spjallrásar
- %1$s fjarlægði umfjöllunarefni spjallrásar
- %1$s gerði ferilskrá spjallrásar héðan í frá sýnilega fyrir %2$s
- %1$s uppfærði notandasniðið sitt %2$s
- %1$s sendi boð til %2$s um þátttöku í spjallrásinni
- %1$s samþykkti boð um að taka þátt í %2$s
-
- Tæki sendandans hefur ekki sent okkur dulritunarlyklana fyrir þessi skilaboð.
-
- Gat ekki ritstýrt
- Ekki er í augnablikinu hægt að taka aftur þátt í spjallrás sem er tóm.
-
- Boð á spjallrás
- %1$s og %2$s
-
-
- %1$s og 1 annar
- %1$s og %2$d aðrir
-
-
- Tóm spjallrás
- Boð frá %s
-
-
diff --git a/matrix-sdk-android/src/main/res/values-it/strings.xml b/matrix-sdk-android/src/main/res/values-it/strings.xml
deleted file mode 100644
index cf081752a2..0000000000
--- a/matrix-sdk-android/src/main/res/values-it/strings.xml
+++ /dev/null
@@ -1,235 +0,0 @@
-
-
- %1$s: %2$s
- %1$s ha inviato un\'immagine.
-
- Invito di %s
- %1$s ha invitato %2$s
- %1$s ti ha invitato
- %1$s è entrato nella stanza
- %1$s è uscito dalla stanza
- %1$s ha rifiutato l\'invito
- %1$s ha buttato fuori %2$s
- %1$s ha tolto il bando a %2$s
- %1$s ha bandito %2$s
- %1$s ha revocato l\'invito per %2$s
- %1$s ha modificato il suo avatar
- %1$s hanno cambiato il nome visualizzato con %2$s
- %1$s ha cambiato il nome visualizzato da %2$s a %3$s
- %1$s ha rimosso il nome visibile (%2$s)
- %1$s ha cambiato l\'argomento con: %2$s
- %1$s ha cambiato il nome della stanza con: %2$s
- %s ha iniziato una chiamata video.
- %s ha iniziato una chiamata vocale.
- %s ha risposto alla chiamata.
- %s ha terminato la chiamata.
- %1$s ha reso la futura cronologia della stanza visibile a %2$s
- tutti i membri della stanza, dal momento del loro invito.
- tutti i membri della stanza, dal momento in cui sono entrati.
- tutti i membri della stanza.
- chiunque.
- sconosciuto (%s).
- %1$s ha attivato la crittografia end-to-end (%2$s)
-
- %1$s ha richiesto una conferenza VoIP
- Conferenza VoIP iniziata
- Conferenza VoIP terminata
-
- (anche l\'avatar è cambiato)
- %1$s ha rimosso il nome della stanza
- %1$s ha rimosso l\'argomento della stanza
- %1$s ha aggiornato il profilo %2$s
- %1$s ha mandato un invito a %2$s per unirsi alla stanza
- %1$s ha accettato l\'invito per %2$s
-
- ** Impossibile decriptare: %s **
- Il dispositivo del mittente non ci ha inviato le chiavi per questo messaggio.
-
- Impossibile revisionare
- Impossibile inviare il messaggio
-
- Invio dell\'immagine fallito
-
- Errore di rete
- Errore di Matrix
-
- Al momento non è possibile rientrare in una stanza vuota.
-
- Messaggio criptato
-
- Indirizzo email
- Numero di telefono
-
- %1$s ha inviato un adesivo.
-
-
- Invito da %s
- Invito nella stanza
- %1$s e %2$s
- Stanza vuota
-
-
- %1$s e 1 altro
- %1$s e %2$d altri
-
-
-
- Messaggio rimosso
- Messaggio rimosso da %1$s
- Messaggio rimosso [motivo: %1$s]
- Messaggio rimosso da %1$s [motivo: %2$s]
-
- Sync iniziale:
-\nImportazione account…
- Sync iniziale:
-\nImportazione cifratura
- Sync iniziale:
-\nImportazione stanze
- Sync iniziale:
-\nImportazione stanze partecipate
- Sync iniziale:
-\nImportazione stanze invitate
- Sync iniziale:
-\nImportazione stanze lasciate
- Sync iniziale:
-\nImportazione comunità
- Sync iniziale:
-\nImportazione dati account
-
- %s ha aggiornato questa stanza.
-
- Invio messaggio in corso …
- Cancella la coda di invio
-
- %1$s ha revocato l\'invito a %2$s di unirsi alla stanza
- Invito di %1$s. Motivo: %2$s
- %1$s ha invitato %2$s. Motivo: %3$s
- %1$s ti ha invitato. Motivo: %2$s
- %1$s è entrato nella stanza. Motivo: %2$s
- %1$s è uscito dalla stanza. Motivo: %2$s
- %1$s ha rifiutato l\'invito. Motivo: %2$s
- %1$s ha buttato fuori %2$s. Motivo: %3$s
- %1$s ha riammesso %2$s. Motivo: %3$s
- %1$s ha bandito %2$s. Motivo: %3$s
- %1$s ha inviato un invito a %2$s di unirsi alla stanza. Motivo: %3$s
- %1$s ha revocato l\'invito a %2$s di unirsi alla stanza. Motivo: %3$s
- %1$s ha accettato l\'invito per %2$s. Motivo: %3$s
- %1$s ha rifiutato l\'invito di %2$s. Motivo: %3$s
-
-
- %1$s ha aggiunto %2$s come indirizzo per questa stanza.
- %1$s ha aggiunto %2$s come indirizzi per questa stanza.
-
-
-
- %1$s ha rimosso %2$s come indirizzo per questa stanza.
- %1$s ha rimosso %3$s come indirizzi per questa stanza.
-
-
- %1$s ha aggiunto %2$s e rimosso %3$s come indirizzi per questa stanza.
-
- %1$s ha impostato l\'indirizzo principale per questa stanza a %2$s.
- %1$s ha rimosso l\'indirizzo principale per questa stanza.
-
- %1$s ha permesso l\'accesso alla stanza per gli ospiti.
- %1$s ha impedito l\'accesso alla stanza per gli ospiti.
-
- %1$s ha attivato la cifratura end-to-end.
- %1$s ha attivato la cifratura end-to-end (algoritmo %2$s non riconosciuto).
-
- %s sta chiedendo di verificare la tua chiave, ma il tuo client non supporta la verifica in-chat. Dovrai usare il metodo di verifica obsoleto per verificare le chiavi.
-
- %1$s ha creato la stanza
- Hai inviato un\'immagine.
- Hai inviato un adesivo.
-
- Il tuo invito
- Hai creato la stanza
- Hai invitato %1$s
- Sei entrato nella stanza
- Sei uscito dalla stanza
- Hai rifiutato l\'invito
- Hai buttato fuori %1$s
- Hai riammesso %1$s
- Hai bandito %1$s
- Hai ritirato l\'invito di %1$s
- Hai cambiato il tuo avatar
- Hai impostato il tuo nome visualizzato a %1$s
- Hai cambiato il tuo nome visualizzato da %1$s a %2$s
- Hai rimosso il tuo nome visibile (era %1$s)
- Hai cambiato l\'argomento a: %1$s
- %1$s ha modificato l\'avatar della stanza
- Hai modificato l\'avatar della stanza
- Hai cambiato il nome della stanza a: %1$s
- Hai iniziato una videochiamata.
- Hai iniziato una telefonata.
- %s ha inviato dati per impostare la chiamata.
- Hai inviato dati per impostare la chiamata.
- Hai risposto alla chiamata.
- Hai terminato la chiamata.
- Hai reso visibile la futura cronologia della stanza a %1$s
- Hai attivato la crittografia end-to-end (%1$s)
- Hai aggiornato questa stanza.
-
- Hai richiesto una conferenza VoIP
- Hai rimosso il nome della stanza
- Hai rimosso l\'argomento della stanza
- %1$s ha rimosso l\'avatar della stanza
- Hai rimosso l\'avatar della stanza
- Hai aggiornato il tuo profilo %1$s
- Hai mandato un invito a %1$s a unirsi alla stanza
- Hai revocato l\'invito per %1$s a unirsi alla stanza
- Hai accettato l\'invito per %1$s
-
- %1$s ha aggiunto il widget %2$s
- Hai aggiunto il widget %1$s
- %1$s ha rimosso il widget %2$s
- Hai rimosso il widget %1$s
- %1$s ha modificato il widget %2$s
- Hai modificato il widget %1$s
-
- Amministratore
- Moderatore
- Predefinito
- Personalizzato (%1$d)
- Personalizzato
-
- Hai cambiato il livello di potere di %1$s.
- %1$s ha cambiato il livello di potere di %2$s.
- %1$s da %2$s a %3$s
-
- Il tuo invito. Motivo: %1$s
- Hai invitato %1$s. Motivo: %2$s
- Sei entrato nella stanza. Motivo: %1$s
- Sei uscito dalla stanza. Motivo: %1$s
- Hai rifiutato l\'invito. Motivo: %1$s
- Hai buttato fuori %1$s. Motivo: %2$s
- Hai riammesso %1$s. Motivo: %2$s
- Hai bandito %1$s. Motivo: %2$s
- Hai mandato un invito a %1$s a unirsi alla stanza. Motivo: %2$s
- Hai revocato l\'invito a %1$s a unirsi alla stanza. Motivo: %2$s
- Hai accettato l\'invito per %1$s. Motivo: %2$s
- Hai ritirato l\'invito di %2$s. Motivo: %2$s
-
-
- Hai aggiunto %1$s come indirizzo per questa stanza.
- Hai aggiunto %1$s come indirizzi per questa stanza.
-
-
-
- Hai rimosso %1$s come indirizzo per questa stanza.
- Hai rimosso %2$s come indirizzi per questa stanza.
-
-
- Hai aggiunto %1$s e rimosso %2$s come indirizzi per questa stanza.
-
- Hai impostato l\'indirizzo principale per questa stanza a %1$s.
- Hai rimosso l\'indirizzo principale per questa stanza.
-
- Hai permesso l\'accesso alla stanza per gli ospiti.
- Hai impedito l\'accesso alla stanza per gli ospiti.
-
- Hai attivato la crittografia end-to-end.
- Hai attivato la crittografia end-to-end (algoritmo %1$s sconosciuto).
-
-
diff --git a/matrix-sdk-android/src/main/res/values-it/strings_sas.xml b/matrix-sdk-android/src/main/res/values-it/strings_sas.xml
new file mode 100644
index 0000000000..b66c22bc6b
--- /dev/null
+++ b/matrix-sdk-android/src/main/res/values-it/strings_sas.xml
@@ -0,0 +1,68 @@
+
+
+
+ Cane
+ Gatto
+ Leone
+ Cavallo
+ Unicorno
+ Maiale
+ Elefante
+ Coniglio
+ Panda
+ Gallo
+ Pinguino
+ Tartaruga
+ Pesce
+ Polpo
+ Farfalla
+ Fiore
+ Albero
+ Cactus
+ Fungo
+ Globo
+ Luna
+ Nuvola
+ Fuoco
+ Banana
+ Mela
+ Fragola
+ Mais
+ Pizza
+ Torta
+ Cuore
+ Faccina sorridente
+ Robot
+ Cappello
+ Occhiali
+ Chiave inglese
+ Babbo Natale
+ Pollice alzato
+ Ombrello
+ Clessidra
+ Orologio
+ Regalo
+ Lampadina
+ Libro
+ Matita
+ Graffetta
+ Forbici
+ Lucchetto
+ Chiave
+ Martello
+ Telefono
+ Bandiera
+ Treno
+ Bicicletta
+ Aeroplano
+ Razzo
+ Trofeo
+ Palla
+ Chitarra
+ Trombetta
+ Campana
+ Ancora
+ Cuffie
+ Cartella
+ Puntina
+
diff --git a/matrix-sdk-android/src/main/res/values-ja/strings.xml b/matrix-sdk-android/src/main/res/values-ja/strings.xml
deleted file mode 100644
index 366c743494..0000000000
--- a/matrix-sdk-android/src/main/res/values-ja/strings.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
- %1$s: %2$s
- %1$sが画像を送信しました。
- %1$sがスタンプを送信しました。
-
- %sの招待
- %1$sが%2$sを招待しました
- %1$sがあなたを招待しました
- %1$sが参加しました
- %1$sが退出しました
- %1$sが招待を断りました
- %1$sが%2$sを追放しました
- %1$sが%2$sをブロック解除しました
- %1$sが%2$sをブロックしました
- %1$sが%2$sの招待を撤回しました
- %1$sがアバターを変更しました
- %1$sが表示名を%2$sに設定しました
- %1$sが表示名を%2$sから%3$sに変更しました
- %1$sが表示名 (%2$s) を削除しました
- %1$sがテーマを%2$sに変更しました
- %1$sが部屋名を%2$sに変更しました
- %sがビデオ通話を開始しました。
- %sが音声通話を開始しました。
- %sが電話に出ました。
- %sが通話を終了しました。
- %sさんからの招待
- 部屋への招待
- %1$sと%2$s
- 空の部屋
-
-
- %1$sと他%2$d名
-
-
- %1$sは、今後の部屋履歴を%2$sに表示させました
- 部屋のメンバー全員、招待された時点から。
- 部屋のメンバー全員、参加した時点から。
- 部屋のメンバー全員。
- 誰でも。
- 不明 (%s)。
- %1$s がエンドツーエンド暗号化を有効にしました (%2$s)
-
- %1$s がVoIP会議をリクエストしました
- VoIP会議が開始されました
- VoIP会議が終了しました
-
- (アバターも変更された)
- %1$s が部屋名を削除しました
- %1$s がルームトピックを削除しました
- %1$s がプロフィール %2$s を更新しました
- %1$s は %2$s に部屋に参加するよう招待状を送りました
- %1$sは%2$sの招待を受け入れました
-
- ** 解読できません: %s **
- 送信者の端末からこのメッセージのキーが送信されていません。
-
- 修正できませんでした
- メッセージを送信できません
-
- 画像のアップロードに失敗しました
-
- ネットワークエラー
- Matrixエラー
-
- 現在空の部屋に再参加することはできません。
-
- 暗号化されたメッセージ
-
- メールアドレス
- 電話番号
-
-
diff --git a/matrix-sdk-android/src/main/res/values-ja/strings_sas.xml b/matrix-sdk-android/src/main/res/values-ja/strings_sas.xml
index 618302eb4f..12f90e316d 100644
--- a/matrix-sdk-android/src/main/res/values-ja/strings_sas.xml
+++ b/matrix-sdk-android/src/main/res/values-ja/strings_sas.xml
@@ -3,18 +3,66 @@
犬猫
+ ライオン馬
+ ユニコーン
+ ブタ
+ ゾウ
+ うさぎ
+ パンダ
+ ニワトリ
+ ペンギン
+ 亀
+ 魚たこ
+ ちょうちょ花木
+ サボテンきのこ
+ 地球月
+ 雲
+ 炎
+ バナナリンゴ
+ いちご
+ とうもろこし
+ ピザケーキ
+ ハート
+ スマイルロボと
+ 帽子めがね
+ スパナ
+ サンタ
+ いいね
+ 傘
+ 砂時計
+ 時計
+ ギフト
+ 電球本
+ 鉛筆
+ クリップ
+ はさみ
+ 錠前
+ 鍵
+ 金槌電話機
+ 旗電車自転車
+ 飛行機
+ ロケット
+ トロフィー
+ ボール
+ ギター
+ トランペット
+ ベル
+ いかり
+ ヘッドホン
+ フォルダ
+ ピン
diff --git a/matrix-sdk-android/src/main/res/values-kab/strings.xml b/matrix-sdk-android/src/main/res/values-kab/strings.xml
deleted file mode 100644
index 0d1cad6550..0000000000
--- a/matrix-sdk-android/src/main/res/values-kab/strings.xml
+++ /dev/null
@@ -1,225 +0,0 @@
-
-
- %1$s: %2$s
- %1$s t.yuzen tugna.
- Tuzneḍ tugna.
- Tinubga n %s
- Tinubga-k•m
- %1$s yesnulfa-d taxxamt
- Tesnulfaḍ-d taxxamt-a
- %1$s inced-d %2$s
- Tnecdeḍ-d %1$s
- %1$s inced-ik-id
- %1$s yedda ɣer texxamt
- Teddiḍ ɣer texxamt
- %1$s yeǧǧa taxxamt
- Teǧǧiḍ taxxamt
- %1$s yugi/tugi tinubga
- Tufiḍ tinubga
- %1$s yessufeɣ %2$s
- Tessufɣeḍ %1$s
- Tbeddleḍ avatar-inek·inem
- Anedbal
- Aseɣyad
- Amezwer
- Sagen
-
- %1$s seg %2$s ɣer %3$s
-
- Tegguma ad d-tali tugna
-
- Tansa n yimayl
-
- %1$s azen astiker.
- Tuzneḍ amenṭaḍ.
-
- %1$s yekkes agdal i %2$s
- Tekkseḍ agdal i %1$s
- %1$s igdel %2$s
- Tgedleḍ %1$s
- %1$s issefsex tinubga n %2$s
- Tesfesxeḍ tinubga n %1$s
- %1$s ibeddel avatar-is
- %1$s isbadu isem-is i d-ittuseknen ɣer %2$s
- Tesbaduḍ isem-ik•im i d-ittuseknen ɣer %1$s
- %1$s ibeddel isem-is i d-ittuseknen seg %2$s ɣer %3$s
- Tbeddleḍ isem-ik•im i d-ittuseknen seg %1$s ɣer %2$s
- %1$s yekkes isem-is i d-ittuseknen (yella %2$s)
- Tekkseḍ isem-ik·im yettwaskanen (d %1$s)
- %1$S isnifel asentel s: %2$S
- Tesnifleḍ asentel s: %2$S
- %1$s ibeddel avaṭar n texxamt
- Tbeddleḍ avaṭar n texxamt
- %1$s ibeddel isem n texxamt s: %2$s
- Tbeddleḍ isem n texxamt s: %2$s
- %s isɛedda siwel s tvidyut.
- Tesɛeddaḍ siwel s tvidyut.
- %s isɛedda asiwel s taɣect.
- Tesɛeddaḍ siwel s taɣect.
- %s yuzen isefka i usbadu n usiwel.
- Tuzneḍ isefka i usbadu n usiwel.
- %s yerra ɣef usiwel.
- Terriḍ ɣef usiwel.
- %s iḥbes asiwel.
- Tḥebseḍ asiwel.
- meṛṛa iɛeggalen n texxamt, segmi ara d-ttwanecden.
- meṛṛa iɛeggalen n texamt, segmi ara d-rnun.
- meṛṛa iɛeggalen n texxamt.
- yal yiwen.
- arussin (%s).
- %1$s isermed awgelhen seg yixef ɣer yixef (%2$s)
- Tesremdeḍ awgelhen seg yixef ɣer yixef (%2$s)
- %s ileqqem taxxamt-a.
- Tleqqmeḍ taxxamt-a.
-
- %1$s isuter-d asarag VoIP
- Tsutreḍ-d asarag VoIP
- Asarag VoIP yebda
- Asarag VoIP yekfa
-
- (avatar daɣen ibeddel)
- %1$s yekkes isem n texxamt
- Tekkseḍ isem n texxamt
- %1$s yekkes asentel n texxamt
- Tekkseḍ asentel n texxamt
- %1$s yekkes avatar n texxamt
- Tekkseḍ avatar n texxamt
- Izen ittwakkes
- Izen ittwakkes sɣur %1$s
- Izen ittwakkes [tamentilt: %1$s]
- Izen ittwakkes sɣur %1$s [tamentilt: %2$s]
- %1$s ileqqem amaɣnu-ines %2$s
- Tleqqmeḍ amaɣnu-inek•inem %1$s
- %1$s yuzen tinubga i %2$s akken ad yeddu ɣer texxamt
- Tuzneḍ tinubga i %1$s akken ad yeddu ɣer texxamt
- %1$s iqbel tinubga i %2$s
- Tqebleḍ tinubga i %1$s
-
- %1$s yerna awiǧit %2$s
- Terniḍ awiǧit %1$s
- %1$s yekkes awiǧit %2$s
- Tekkseḍ awiǧit %1$s
- %1$s ibeddel awiǧit %2$s
- Tbeddleḍ awiǧit %1$s
-
- Sagen (%1$)
- Tbeddleḍ aswir n tezmert n %1$s.
- %1$s ibeddel aswir n tezmert n %2$s.
- ** Awgelhen d awezɣi: %s **
- Ibenk n umazan ur aɣ-d-yuzin ara tisura i yizen-a.
-
- Tuzna n yizen d tawezɣit
-
- Tuccḍa deg uẓeṭṭa
- Tuccḍa deg Matrix
-
- %1$s iga amazray n texxamyt i d-iteddun yettban i %2$s
- Tgiḍ amazray n texxamyt i d-iteddun yettban i %1$s
- %1$s issefsax tinubga i %2$s i wakken ad d-yekcem ɣer texxamt
- Tesfesxeḍ tinubga i %1$s i wakken ad d-yernu ɣer texxamt
- D awezɣi tura ad nales ad nuɣal ɣer texxamt tilemt.
-
- Izen yettwawgelhen
-
- Uṭṭun n tiliɣri
-
- Tinubga sɣur %s
- Tinubga ɣer texxamt
-
- %1$s d %2$s
-
-
- %1$s d 1 wayeḍ
- %1$s d %2$d wiyaḍ
-
-
- Tremdeḍ awgelhen seg yixef ɣer yixef (alguritm %1$s ur yettwassen ara).
-
- %s isuter-d ad isenqed tasarut-ik·im, maca amsaɣ-ik·im ur issefrak ara asenqed n tsura deg yidiwenniyen. Ilaq-ak·am useqdec asenqed iqdim n tsura i usenqed n tsura.
-
- Taxxamt tilemt
-
- Amtawi n tazwara:
-\nAktar n umiḍan…
- Amtawi n tazwara:
-\nAktar n uwgelhen
- Amtawi n tazwara:
-\nAktar n texxamin
- Amtawi n tazwara:
-\nAktar n texxamin iɣer terniḍ
- Amtawi n tazwara:
-\nAktar n texxamin iɣer tettwanecdeḍ
- Amtawi n tazwara:
-\nAktar n texxamin i teǧǧiḍ
- Amtawi n tazwara:
-\nAktar n tmezdagnutin
- Amtawi n tazwara:
-\nAktar n yisefka n umiḍan
-
- Tuzzna n yizen…
- Tinubga n %1$s. Tamentilt: %2$s
- Tinubga-k•m. Tamentilt: %1$s
- %1$s inced %2$s. Tamentilt: %3$s
- Tnecdeḍ %1$s. Tamentilt: %2$s
- %1$s inced-ik•ikem. Tamentilt: %2$s
- %1$s yedda ɣer texxamt. Tamentilt: %2$s
- Teddiḍ ɣer texxamt. Tamentilt: %1$s
- %1$s yeǧǧa taxxamt. Tamentilt: %2$s
- Teǧǧiḍ taxxamt. Tamentilt: %1$s
- %1$s yugi tinubga. Tamentilt: %2$s
- Tugiḍ tinubga. Tamentilt: %1$s
- %1$s yessufeɣ %2$s. Tamentilt: %3$s
- Tessufɣeḍ %1$s. Tamentilt: %2$s
- %1$s yekkes agdal i %2$s. Tamentilt: %3$s
- Tekkseḍ agdal i %1$s. Tamentilt: %2$s
- %1$s igdel %2$s. Tamentilt: %3$s
- Tgedleḍ %1$s. Tamentilt: %2$s
- %1$s yuzen tinubga i %2$s akken ad yeddu ɣer texxamt. Tamentilt: %3$s
- Tuzneḍ tinubga i %1$s iwakken ad yeddu ɣer texxamt. Tamentilt: %2$s
- %1$s iqbel tinubga i %2$s. Tamentilt: %3$s
- Tqebleḍ tinubga i %1$s. Tamentilt: %2$s
- %1$s issefsex tinubga n %2$s. Tamentilt: %3$s
- Tesfesxeḍ tinubga n %1$s. Tamentilt: %2$s
-
-
- %1$s yerna %2$s d tansa i texxamt-a.
- %1$s yerna %2$s d tansiwin i texxamt-a.
-
-
-
- Terniḍ %1$s d tansa i texxamt-a.
- Terniḍ %1$s d tansiwin i texxamt-a.
-
-
-
- %1$s yekkes %2$s am tansa i texxamt-a.
- %1$s yekkes %3$s am tansiwin i texxamt-a.
-
-
-
- Tekkseḍ %1$s am tansa i texxamt-a.
- Tekkseḍ %2$s am tansiwin i texxamt-a.
-
-
- %1$s yerna %2$s terniḍ tekkseḍ %3s am tansiwin i texxamt-a.
- Terniḍ %1$s terniḍ tekkseḍ %2$s am tansiwin i texxamt-a.
-
- %1$s isbadu %2$s am tansa tagejdant i texxamt-a.
- Tesbaduḍ %1$s am tansa tagejdant i texxamt-a.
- %1$s yekkes tansa tagejdant i texxamt-a.
- Tekkseḍ tansa tagejdant i texxamt-a.
-
- %1$s isireg inebgawen ad ddun ɣer texxamt.
- Tsirgeḍ inebgawen ad ddun ɣer texxamt.
- %1$s issewḥel inebgawen iwakken ur tteddun ara ɣer texxamt.
- Tesweḥleḍ inebgawen iwakken ur tteddun ara ɣer texxamt.
-
- %1$s yermed awgelhen seg yixef ɣer yixef.
- Tremdeḍ awgelhen seg yixef ɣer yixef.
- %1$s yermed awgelhen seg yixef ɣer yixef (alguritm %2$s ur yettwassen ara).
- Sfeḍ tabdart n uraǧu n tuzzna
-
- %1$s issefsex tinubga n %2$s i tmerniwt ɣer texxamt. Tamentilt: %2$s
- Tesfesxeḍ tinubga n %1$s i tmerna ɣer texxamt. Tamentilt: %2$s
- Yegguma ad yaru
-
diff --git a/matrix-sdk-android/src/main/res/values-ko/strings.xml b/matrix-sdk-android/src/main/res/values-ko/strings.xml
deleted file mode 100644
index eee67628eb..0000000000
--- a/matrix-sdk-android/src/main/res/values-ko/strings.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
- %1$s: %2$s
- %s님의 초대
- %1$s님이 사진을 보냈습니다.
- %1$s님이 스티커를 보냈습니다.
-
- %1$s님이 %2$s님을 초대했습니다
- %1$s님이 당신을 초대했습니다
- %1$s님이 참가했습니다
- %1$s님이 떠났습니다
- %1$s님이 초대를 거부했습니다
- %1$s님이 %2$s님을 추방했습니다
- %1$s님이 %2$s님의 출입 금지를 풀었습니다
- %1$s님이 %2$s님을 출입 금지했습니다
- %1$s님이 %2$s님의 초대를 취소했습니다
- %1$s님이 아바타를 변경했습니다
- %1$s님이 표시 이름을 %2$s(으)로 설정했습니다
- %1$s님이 표시 이름을 %2$s에서 %3$s(으)로 변경했습니다
- %1$s님이 표시 이름을 삭제했습니다 (%2$s)
- %1$s님이 주제를 다음으로 변경했습니다: %2$s
- %1$s님이 방 이름을 다음으로 변경했습니다: %2$s
- %s님이 영상 통화를 걸었습니다.
- %s님이 음성 통화를 걸었습니다.
- %s님이 전화를 받았습니다.
- %s님이 전화를 끊었습니다.
- %1$s님이 이후 %2$s에게 방 기록을 공개했습니다
- 초대된 시점부터 모든 방 구성원
- 들어온 시점부터 모든 방 구성원
- 모든 방 구성원
- 누구나.
- 알 수 없음 (%s).
- %1$s님이 종단간 암호화를 켰습니다 (%2$s)
- %s님이 방을 업그레이드했습니다.
-
- %1$s님이 VoIP 회의를 요청했습니다
- VoIP 회의가 시작했습니다
- VoIP 회의가 끝났습니다
-
- (아바타도 변경됨)
- %1$s님이 방 이름을 삭제했습니다
- %1$s님이 방 주제를 삭제했습니다
- 메시지가 삭제되었습니다
- 메시지가 %1$s님에 의해 삭제되었습니다
- 메시지가 삭제되었습니다 [이유: %1$s]
- 메시지가 %1$s님에 의해 삭제되었습니다 [이유: %2$s]
- %1$s님이 프로필 %2$s을(를) 업데이트했습니다
- %1$s님이 %2$s님에게 방 초대를 보냈습니다
- %1$s님이 %2$s의 초대를 수락했습니다
-
- ** 암호를 복호화할 수 없음: %s **
- 발신인의 기기에서 이 메시지의 키를 보내지 않았습니다.
-
- 검열할 수 없습니다
- 메시지를 보낼 수 없습니다
-
- 사진 업로드에 실패했습니다
-
- 네트워크 오류
- Matrix 오류
-
- 현재 빈 방에 다시 들어갈 수 없습니다.
-
- 암호화된 메시지
-
- 이메일 주소
- 전화번호
-
- %s에서 초대함
- 방 초대
-
- %1$s님과 %2$s님
-
-
- %1$s님 외 %2$d명
-
-
- 빈 방
-
- 초기 동기화:
-\n계정 가져오는 중…
- 초기 동기화:
-\n암호 가져오는 중
- 초기 동기화:
-\n방 가져오는 중
- 초기 동기화:
-\n들어간 방 가져오는 중
- 초기 동기화:
-\n초대받은 방 가져오는 중
- 초기 동기화:
-\n떠난 방 가져오는 중
- 초기 동기화:
-\n커뮤니티 가져오는 중
- 초기 동기화:
-\n계정 데이터 가져오는 중
-
- 메시지 보내는 중…
- 전송 대기 열 지우기
-
- %1$s님이 %2$s님에게 방에 참가하라고 보낸 초대를 취소했습니다
-
diff --git a/matrix-sdk-android/src/main/res/values-lt/strings.xml b/matrix-sdk-android/src/main/res/values-lt/strings.xml
deleted file mode 100644
index b867219408..0000000000
--- a/matrix-sdk-android/src/main/res/values-lt/strings.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- %1$s: %2$s
- %1$s išsiuntė atvaizdą.
- %1$s išsiuntė lipduką.
-
- %s pakvietimas
-
diff --git a/matrix-sdk-android/src/main/res/values-lv/strings.xml b/matrix-sdk-android/src/main/res/values-lv/strings.xml
deleted file mode 100644
index b14cbb4b00..0000000000
--- a/matrix-sdk-android/src/main/res/values-lv/strings.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
- %1$s: %2$s
- %1$s nosūtīja attēlu.
-
- %s\'s uzaicinājums
- %1$s uzaicināja %2$s
- %1$s uzaicināja tevi
- %1$s pievienojās
- %1$s atstāja
- %1$s noraidīja uzaicinājumu
- %1$s \"izspēra\" ārā %2$s
- %1$s atbanoja (atcēla pieejas liegumu) %2$s
- %1$s liedza pieeju (banoja) %2$s
- %1$s atsauca %2$s uzaicinājumu
- %1$s nomainīja profila attēlu
- %1$s uzstādīja redzamo vārdu uz %2$s
- %1$s nomainīja redzamo vārdu no %2$s uz %3$s
- %1$s dzēsa savu redzamo vārdu (%2$s)
- %1$s nomainīja tēmas nosaukumu uz: %2$s
- %1$s nomainīja istabas nosaukumu uz: %2$s
- %s veica video zvanu.
- %s veica audio zvanu.
- %s atbildēja zvanam.
- %s beidza zvanu.
- %1$s padarīja istabas nākamo ziņu vēsturi redzamu %2$s
- visi istabas biedri no brīža, kad tika uzaicināti.
- visi istabas biedri no brīža, kad tika pievienojušies.
- visi istabas biedri.
- ikviens.
- nezināms (%s).
- %1$s ieslēdza ierīce-ierīce šifrēšanu (%2$s)
-
- %1$s vēlas VoIP konferenci
- VoIP konference sākusies
- VoIP konference ir beigusies
-
- (arī profila attēls mainījās)
- %1$s dzēsa istabas nosaukumu
- %1$s dzēsa istabas tēmas nosaukumu
- %1$s atjaunoja profila informāciju %2$s
- %1$s nosūtīja uzaicinājumu %2$s pievienoties istabai
- %1$s apstiprināja uzaicinājumu priekš %2$s
-
- ** Nav iespējams atkodēt: %s **
- Sūtītāja ierīce mums nenosūtīja atslēgas priekš šīs ziņas.
-
- Nevarēja rediģēt
- Nav iespējams nosūtīt ziņu
-
- Neizdevās augšuplādēt attēlu
-
- Tīkla kļūda
- Matrix kļūda
-
- Šobrīd nav iespējams atkārtoti pievienoties tukšai istabai.
-
- Šifrēta ziņa
-
- Epasta adrese
- Telefona numurs
-
- Uzaicinājums no %s
- Uzaicinājums uz istabu
- %1$s un %2$s
- Tukša istaba
-
-
- %1$s un 1 cits
- %1$s un %2$d citi
- %1$s un %2$d citu
-
-
-
-
diff --git a/matrix-sdk-android/src/main/res/values-nl/strings.xml b/matrix-sdk-android/src/main/res/values-nl/strings.xml
deleted file mode 100644
index 1b05052ba6..0000000000
--- a/matrix-sdk-android/src/main/res/values-nl/strings.xml
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
-
- %1$s: %2$s
- %1$s heeft een afbeelding gestuurd.
-
- Uitnodiging van %s
- %1$s heeft %2$s uitgenodigd
- %1$s heeft u uitgenodigd
- %1$s neemt nu deel aan het gesprek
- %1$s heeft het gesprek verlaten
- %1$s heeft de uitnodiging geweigerd
- %1$s heeft %2$s uit het gesprek verwijderd
- %1$s heeft %2$s ontbannen
- %1$s heeft %2$s verbannen
- %1$s heeft de uitnodiging van %2$s ingetrokken
- %1$s heeft zijn/haar avatar aangepast
- %1$s heeft zijn/haar naam aangepast naar %2$s
- %1$s heeft zijn/haar naam aangepast van %2$s naar %3$s
- %1$s heeft zijn/haar naam verwijderd (%2$s)
- %1$s heeft het onderwerp veranderd naar: %2$s
- %1$s heeft de gespreksnaam veranderd naar: %2$s
- %s heeft een video-oproep gemaakt.
- %s heeft een spraakoproep gemaakt.
- %s heeft de oproep beantwoord.
- %s heeft opgehangen.
- %1$s heeft de toekomstige gespreksgeschiedenis zichtbaar gemaakt voor %2$s
- alle deelnemers aan het gesprek, vanaf het punt dat ze zijn uitgenodigd.
- alle deelnemers aan het gesprek, vanaf het punt dat ze zijn toegetreden.
- alle deelnemers aan het gesprek.
- iedereen.
- onbekend (%s).
- %1$s heeft eind-tot-eind-versleuteling aangezet (%2$s)
-
- %1$s heeft een VoIP-vergadering aangevraagd
- VoIP-vergadering gestart
- VoIP-vergadering gestopt
-
- (avatar is ook veranderd)
- %1$s heeft de gespreksnaam verwijderd
- %1$s heeft het gespreksonderwerp verwijderd
- %1$s heeft zijn/haar profiel %2$s bijgewerkt
- %1$s heeft een uitnodiging naar %2$s gestuurd om het gesprek toe te treden
- %1$s heeft de uitnodiging voor %2$s aanvaard
-
- ** Kan niet ontsleutelen: %s **
- Het apparaat van de afzender heeft geen sleutels voor dit bericht gestuurd.
-
-
- Kon niet verwijderd worden
- Kan bericht niet verzenden
-
- Uploaden van de afbeelding mislukt
-
-
- Netwerkfout
- Matrix-fout
-
-
-
-
-
-
- Het is momenteel niet mogelijk om een leeg gesprek opnieuw toe te treden.
-
- Versleuteld bericht
-
-
- E-mailadres
- Telefoonnummer
-
- %1$s heeft een sticker gestuurd.
-
-
- Uitnodiging van %s
- Gespreksuitnodiging
- %1$s en %2$s
- Leeg gesprek
-
-
- %1$s en 1 andere
- %1$s en %2$d anderen
-
-
-
- Bericht verwijderd
- Bericht verwijderd door %1$s
- Bericht verwijderd [reden: %1$s]
- Bericht verwijderd door %1$s [reden: %2$s]
-
- Initiële synchronisatie:
-\nAccount wordt geïmporteerd…
- Initiële synchronisatie:
-\nCrypto wordt geïmporteerd
- Initiële synchronisatie:
-\nGesprekken worden geïmporteerd
- Initiële synchronisatie:
-\nDeelgenomen gesprekken worden geïmporteerd
- Initiële synchronisatie:
-\nUitgenodigde gesprekken worden geïmporteerd
- Initiële synchronisatie:
-\nVerlaten gesprekken worden geïmporteerd
- Initiële synchronisatie:
-\nGemeenschappen worden geïmporteerd
- Initiële synchronisatie:
-\nAccountgegevens worden geïmporteerd
-
- %s heeft dit gesprek opgewaardeerd.
-
- Bericht wordt verstuurd…
- Uitgaande wachtrij legen
-
- %1$s heeft de uitnodiging voor %2$s om het gesprek toe te treden ingetrokken
- Uitnodiging van %1$s. Reden: %2$s
- %1$s heeft %2$s uitgenodigd. Reden: %3$s
- %1$s heeft u uitgenodigd. Reden: %2$s
- %1$s neemt nu deel. Reden: %2$s
- %1$s is weggegaan. Reden: %2$s
- %1$s heeft de uitnodiging geweigerd. Reden: %2$s
- %1$s heeft %2$s verwijderd. Reden: %3$s
- %1$s heeft %2$s ontbannen. Reden: %3$s
- %1$s heeft %2$s verbannen. Reden: %3$s
- %1$s heeft %2$s een uitnodiging voor het gesprek gestuurd. Reden: %3$s
- %1$s heeft de uitnodiging voor %2$s ingetrokken. Reden: %3$s
- %1$s heeft de uitnodiging voor %2$s aanvaard. Reden: %3$s
- %1$s heeft de uitnodiging van %2$s ingetrokken. Reden: %3$s
-
-
- %1$s heeft %2$s als gespreksadres toegevoegd.
- %1$s heeft %2$s als gespreksadressen toegevoegd.
-
-
-
- %1$s heeft %2$s als gespreksadres verwijderd.
- %1$s heeft %3$s als gespreksadressen verwijderd.
-
-
- %1$s heeft %2$s als gespreksadres toegevoegd en %3$s verwijderd.
-
- %1$s heeft het hoofdadres voor dit gesprek ingesteld op %2$s.
- %1$s heeft het hoofdadres voor dit gesprek verwijderd.
-
- %1$s heeft gasten de toegang tot het gesprek verleend.
- %1$s heeft gasten de toegang tot het gesprek verhinderd.
-
- %1$s heeft eind-tot-eind-versleuteling ingeschakeld.
- %1$s heeft eind-tot-eind-versleuteling ingeschakeld (onbekend algoritme %2$s).
-
- %s vraagt om uw sleutel te verifiëren, maar uw cliënt biedt geen ondersteuning voor verificatie in het gesprek. U zult de verouderde sleutelverificatie moeten gebruiken om de sleutels te verifiëren.
-
-
diff --git a/matrix-sdk-android/src/main/res/values-nn/strings.xml b/matrix-sdk-android/src/main/res/values-nn/strings.xml
deleted file mode 100644
index d986e697ad..0000000000
--- a/matrix-sdk-android/src/main/res/values-nn/strings.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
- Kryptert melding
-
-
- %1$s: %2$s
- %1$s sende eit bilæte.
- %1$s sende eit klistremerke.
-
- %s si innbjoding
- %1$s inviterte %2$s
- %1$s inviterte deg
- %1$s kom inn
- %1$s forlot rommet
- %1$s sa nei til innbjodingi
- %1$s sparka %2$s
- %1$s slapp %2$s inn att
- %1$s stengde %2$s ute
- %1$s tok attende %2$s si innbjoding
- %1$s byta avataren sin
- %1$s sette visingsnamnet sitt som %2$s
- %1$s byta visingsnamnet sitt frå %2$s til %3$s
- %1$s tok burt visingsnamnet sitt (%2$s)
- %1$s gjorde emnet til: %2$s
- %1$s gjorde romnamnet til: %2$s
- %s starta ei videosamtala.
- %s starta ein talesamtale.
- %s tok røyret.
- %s la på røyret.
- %1$s gjorde den framtidige romsoga synleg for %2$s
- alle rommedlemmar, frå då dei vart invitert inn.
- alle rommedlemmar, frå då dei kom inn.
- alle rommedlemmar.
- kven som heldst.
- uvisst (%s).
- %1$s skrudde ende-til-ende-kryptering på (%2$s)
-
- %1$s bad um ei VoIP-gruppasamtala
- VoIP-gruppasamtala er starta
- VoIP-gruppasamtala er ferdug
-
- (avataren vart au byta)
- %1$s tok burt romnamnet
- %1$s tok burt romemnet
- %1$s gjorde um på skildringi si %2$s
- %1$s inviterte %2$s til rommet
- %1$s sa ja til innbjodingi til %2$s
-
- ** Fekk ikkje til å dekryptera: %s **
- Avsendareiningi hev ikkje sendt oss nyklane fyr denna meldingi.
-
- Kunde ikkje gjera um
- Fekk ikkje å senda meldingi
-
- Fekk ikkje til å lasta biletet upp
-
- Noko gjekk gale med netverket
- Noko gjekk gale med Matrix
-
- Det lèt seg fyrebils ikkje gjera å fara inn att i eit tomt rom.
-
- Epostadresse
- Telefonnummer
-
- Innbjoding frå %s
- Rominnbjoding
- %1$s og %2$s
-
-
- %1$s og 1 til
- %1$s og %2$d til
-
-
- Tomt rom
-
- Ei melding vart stroki
- %1$s strauk meldingi
- Meldingi vart stroki [av di: %1$s]
- %1$s strauk meldingi [av di: %2$s]
-
- %s oppgraderte rommet.
-
- Nullstill sendingskø
-
- %1$s forlot rommet. Grunn: %2$s
-
diff --git a/matrix-sdk-android/src/main/res/values-pl/strings.xml b/matrix-sdk-android/src/main/res/values-pl/strings.xml
deleted file mode 100644
index 0d79edc658..0000000000
--- a/matrix-sdk-android/src/main/res/values-pl/strings.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
- %1$s: %2$s
- %1$s wysłał(a) zdjęcie.
-
- Zaproszenie od %s
- %1$s zaprosił(a) %2$s
- %1$s zaprosił(a) Cię
- %1$s dołączył(a)
- %1$s opuścił(a)
- %1$s odrzucił(a) zaproszenie
- %1$s wyrzucił(a) %2$s
- %1$s odblokował(a) %2$s
- %1$s zablokował(a) %2$s
- %1$s zmienił(a) awatar
- %1$s zmienił(a) wyświetlaną nazwę na %2$s
- %1$s zmienił(a) wyświetlaną nazwę z %2$s na %3$s
- %1$s usunął(-ęła) swoją wyświetlaną nazwę (%2$s)
- %1$s zmienił(a) temat na: %2$s
- Nie można wysłać wiadomości
-
- Przesyłanie zdjęcia nie powiodło się
-
- Błąd sieci
- Błąd Matrixa
-
- Wiadomość zaszyfrowana
-
- Adres e-mail
- Numer telefonu
-
- wszyscy członkowie pokoju.
- wszyscy.
- %1$s zmienił(a) nazwę pokoju na: %2$s
- %s zakończył(a) rozmowę.
- %1$s usunął(-ęła) nazwę pokoju
- %1$s usunął(-ęła) temat pokoju
- %1$s wysłał(a) naklejkę.
-
- %1$s włączył(a) szyfrowanie end-to-end (%2$s)
-
- %1$s wycofał(a) zaproszenie %2$s
- %s odebrał(a) połączenie.
- (awatar też został zmieniony)
-
- Zaproszenie od %s
- Zaproszenie do pokoju
- %1$s i %2$s
- Pusty pokój
-
-
- %1$s i jeden inny
- %1$s i kilku innych
- %1$s i %2$d innych
-
-
-
- ** Nie można odszyfrować: %s **
- %s wykonał(a) rozmowę wideo.
- %s wykonał(a) połączenie głosowe.
- %1$s uczynił(a) przyszłą historię pokoju widoczną dla %2$s
- wszyscy członkowie pokoju, od momentu w którym zostali zaproszeni.
- wszyscy członkowie pokoju, od momentu w którym dołączyli.
- nieznane (%s).
- %1$s zażądał(a) grupowego połączenia VoIP
- Rozpoczęto grupowe połączenie głosowe VoIP
- Zakończono grupowe połączenie głosowe VoIP
-
- %1$s zaktualizował swój profil %2$s
- %1$s wysłał(a) zaproszenie do %2$s aby dołączył(a) do tego pokoju
- %1$s zaakceptował(a) zaproszenie dla %2$s
-
- Urządzenie nadawcy nie wysłało nam kluczy do tej wiadomości.
-
- Nie można zredagować
- Obecnie nie jest możliwe ponowne dołączenie do pustego pokoju.
-
- Wiadomość usunięta
- Wiadomość usunięta przez %1$s
- Wiadomość usunięta [powód: %1$s]
- Wiadomość usunięta przez %1$s [powód: %2$s]
- %s zakutalizował(a) ten pokój.
-
- Synchronizacja początkowa:
-\nImportowanie konta…
- Synchronizacja początkowa:
-\nImportowanie kryptografii
- Synchronizacja początkowa:
-\nImportowanie Pokoi
- Synchronizacja początkowa:
-\nImportowanie dołączonych Pokoi
- Synchronizacja początkowa:
-\nImportowanie zaproszonych Pokoi
- Synchronizacja początkowa:
-\nImportowanie opuszczonych Pokoi
- Synchronizacja początkowa:
-\nImportowanie Społeczności
- Synchronizacja początkowa:
-\nImportowanie danych Konta
-
- Wysyłanie wiadomości…
- Wyczyść kolejkę wysyłania
-
-
diff --git a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml
deleted file mode 100644
index 52b935c097..0000000000
--- a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml
+++ /dev/null
@@ -1,240 +0,0 @@
-
-
-
- %1$s: %2$s
- %1$s enviou uma foto.
-
- convite de %s
- %1$s convidou %2$s
- %1$s convidou você
- %1$s entrou na sala
- %1$s saiu da sala
- %1$s recusou o convite
- %1$s removeu %2$s
- %1$s removeu o banimento de %2$s
- %1$s baniu %2$s
- %1$s desfez o convite a %2$s
- %1$s alterou a foto de perfil
- %1$s definiu o nome e sobrenome como %2$s
- %1$s alterou o nome e sobrenome de %2$s para %3$s
- %1$s removeu o nome e sobrenome (era %2$s)
- %1$s alterou a descrição para: %2$s
- %1$s alterou o nome da sala para: %2$s
- %s iniciou uma chamada de vídeo.
- %s iniciou uma chamada de voz.
- %s aceitou a chamada.
- %s encerrou a chamada.
- %1$s deixou o histórico futuro da sala visível para %2$s
- todos os participantes da sala, a partir do momento em que foram convidados.
- todos os participantes da sala, a partir do momento em que entraram nela.
- todos os participantes da sala.
- qualquer pessoa.
- desconhecido (%s).
- %1$s ativou a criptografia de ponta a ponta (%2$s)
-
- %1$s deseja iniciar uma chamada em grupo
- Chamada em grupo iniciada
- Chamada em grupo encerrada
-
- (a foto de perfil também foi alterada)
- %1$s removeu o nome da sala
- %1$s removeu a descrição da sala
- %1$s atualizou o perfil %2$s
- %1$s enviou um convite para %2$s entrar na sala
- %1$s aceitou o convite para %2$s
-
- ** Não foi possível descriptografar: %s **
- O aparelho do remetente não nos enviou as chaves para esta mensagem.
-
-
- Não foi possível redigir
- Não foi possível enviar a mensagem
-
- O envio da imagem falhou
-
-
- Erro de conexão à internet
- Erro no servidor Matrix
-
-
-
-
-
-
-
-
- Atualmente, não é possível entrar novamente em uma sala vazia.
-
- Mensagem criptografada
-
-
- Endereço de e-mail
- Número de telefone
-
-
- %1$s enviou uma figurinha.
-
-
- Convite de %s
- Convite para sala
- %1$s e %2$s
- Sala vazia
-
-
- %1$s e 1 outro
- %1$s e %2$d outros
-
-
-
- Você enviou uma foto.
- Você enviou uma figurinha.
-
- Seu convite
- %1$s criou a sala
- Você criou a sala
- Você convidou %1$s
- Você entrou na sala
- Você saiu da sala
- Você recusou o convite
- Você removeu %1$s
- Você removeu o banimento de %1$s
- Você baniu %1$s
- Você desfez o convite a %1$s
- Você alterou a sua foto de perfil
- Você definiu o seu nome e sobrenome como %1$s
- Você alterou o seu nome e sobrenome de %1$s para %2$s
- Você removeu o seu nome e sobrenome (era %1$s)
- Você alterou a descrição para: %1$s
- %1$s alterou a foto da sala
- Você alterou a foto da sala
- Você alterou o nome da sala para: %1$s
- Você iniciou uma chamada de vídeo.
- Você iniciou uma chamada de voz.
- %s enviou dados para configurar a chamada.
- Você enviou dados para configurar a chamada.
- Você aceitou a chamada.
- Você encerrou a chamada.
- Você deixou o histórico futuro da sala visível para %1$s
- Você ativou a criptografia de ponta a ponta (%1$s)
- %s atualizou esta sala.
- Você atualizou esta sala.
-
- Você solicitou uma chamada em grupo
- Você removeu o nome da sala
- Você removeu a descrição da sala
- %1$s removeu a foto da sala
- Você removeu a foto da sala
- Mensagem apagada
- Mensagem apagada por %1$s
- Mensagem apagada [motivo: %1$s]
- Mensagem apagada por %1$s [motivo: %2$s]
- Você atualizou o seu perfil %1$s
- Você enviou um convite para %1$s entrar na sala
- %1$s cancelou o convite a %2$s para entrar na sala
- Você cancelou o convite a %1$s para entrar na sala
- Você aceitou o convite para %1$s
-
- %1$s adicionou o widget %2$s
- Você adicionou o widget %1$s
- %1$s removeu o widget %2$s
- Você removeu o widget %1$s
- %1$s editou o widget %2$s
- Você editou o widget %1$s
-
- Administrador
- Moderador
- Padrão
- Personalizado (%1$d)
- Personalizado
-
- Você alterou o nível de permissão de %1$s.
- %1$s alterou o nível de permissão de %2$s.
- %1$s de %2$s para %3$s
-
- Primeira sincronização:
-\nImportando a conta…
- Primeira sincronização:
-\nImportando as chaves de criptografia
- Primeira sincronização:
-\nImportando as salas
- Primeira sincronização:
-\nImportando as salas em que você entrou
- Primeira sincronização:
-\nImportando as salas em que você foi convidado
- Primeira sincronização:
-\nImportando as salas em que você saiu
- Primeira sincronização:
-\nImportando as comunidades
- Primeira sincronização:
-\nImportando os dados da conta
-
- Enviando mensagem…
- Limpar a fila de envio
-
- Convite de %1$s. Motivo: %2$s
- O seu convite. Motivo: %1$s
- %1$s convidou %2$s. Motivo: %3$s
- Você convidou %1$s. Motivo: %2$s
- %1$s convidou você. Motivo: %2$s
- %1$s entrou na sala. Motivo: %2$s
- Você entrou na sala. Motivo: %1$s
- %1$s saiu da sala. Motivo: %2$s
- Você saiu da sala. Motivo: %1$s
- %1$s recusou o convite. Motivo: %2$s
- Você recusou o convite. Motivo: %1$s
- %1$s removeu %2$s. Motivo: %3$s
- Você removeu %1$s. Motivo: %2$s
- %1$s removeu o banimento de %2$s. Motivo: %3$s
- Você removeu o banimento de %1$s. Motivo: %2$s
- %1$s baniu %2$s. Motivo: %3$s
- Você baniu %1$s. Motivo: %2$s
- %1$s enviou um convite para %2$s entrar na sala. Motivo: %3$s
- Você enviou um convite para %1$s entrar na sala. Motivo: %2$s
- %1$s revogou o convite para %2$s entrar na sala. Motivo: %3$s
- Você revogou o convite para %1$s entrar na sala. Motivo: %2$s
- %1$s aceitou o convite para %2$s. Motivo: %3$s
- Você aceitou o convite para %1$s. Motivo: %2$s
- %1$s desfez o convite de %2$s. Motivo: %3$s
- Você desfez o convite de %1$s. Motivo: %2$s
-
-
- %1$s adicionou %2$s como um endereço desta sala.
- %1$s adicionou %2$s como endereços desta sala.
-
-
-
- Você adicionou %1$s como um endereço desta sala.
- Você adicionou %1$s como endereços desta sala.
-
-
-
- %1$s removeu %2$s como um endereço desta sala.
- %1$s removeu %3$s como endereços desta sala.
-
-
-
- Você removeu %1$s como um endereço desta sala.
- Você removeu %2$s como endereços desta sala.
-
-
- %1$s adicionou %2$s e removeu %3$s como endereços desta sala.
- Você adicionou %1$s e removeu %2$s como endereços desta sala.
-
- %1$s definiu o endereço principal desta sala como %2$s.
- Você definiu o endereço principal desta sala como %1$s.
- %1$s removeu o endereço principal desta sala.
- Você removeu o endereço principal desta sala.
-
- %1$s permitiu que convidados entrem na sala.
- Você permitiu que convidados entrem na sala.
- %1$s impediu que convidados entrassem na sala.
- Você impediu que convidados entrassem na sala.
-
- %1$s ativou a criptografia de ponta a ponta.
- Você ativou a criptografia de ponta a ponta.
- %1$s ativou a criptografia de ponta a ponta (algoritmo não reconhecido %2$s).
- Você ativou a criptografia de ponta a ponta (algoritmo não reconhecido %1$s).
-
- %s deseja confirmar a sua chave, mas o seu aplicativo não suporta a confirmação da chave da conversa. Você precisará usar a confirmação tradicional de chaves para confirmar chaves.
-
-
diff --git a/matrix-sdk-android/src/main/res/values-pt/strings.xml b/matrix-sdk-android/src/main/res/values-pt/strings.xml
deleted file mode 100644
index 4bc90cf0cb..0000000000
--- a/matrix-sdk-android/src/main/res/values-pt/strings.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
- %1$s: %2$s
- %1$s enviou uma imagem.
-
- convite de %s
- %1$s convidou %2$s
- %1$s convidou-o
- %1$s entrou
- %1$s saiu
- %1$s recusou o convite
- %1$s expulsou %2$s
- %1$s des-baniu %2$s
- %1$s baniu %2$s
- %1$s cancelou o convite de %2$s
- %1$s mudou o seu avatar
- %1$s definiu seu nome público como %2$s
- %1$s alterou seu nome público de %2$s para %3$s
- %1$s apagou o seu nome público (%2$s)
- %1$s alterou o tópico desta sala para: %2$s
- %1$s alterou o nome desta sala para: %2$s
- %s iniciou uma chamada de vídeo.
- %s iniciou uma chamada de voz.
- %s respondeu à chamada.
- %s terminou a chamada.
- %1$s tornou o histórico futuro desta sala visível para %2$s
- todas os membros que integram esta sala, a partir do momento em que foram convidados.
- todas os membros da sala, a partir do momento em que entraram.
- todas os membros da sala.
- todos.
- desconhecida (%s).
- %1$s ativou a criptografia ponta-a-ponta (%2$s)
-
- %1$s solicitou uma conferência VoIP
- A conferência VoIP começou
- A conferência VoIP terminou
-
- (o avatar também foi alterado)
- %1$s removeu o nome da sala
- %1$s removeu o tópico da sala
- %1$s atualizou o seu perfil %2$s
- %1$s enviou um convite para que %2$s se junte à sala
- %1$s aceitou o convite para %2$s
-
- ** Impossível decifrar: %s **
- O dispositivo de quem enviou a mensagem não nos enviou as chaves para esta mensagem.
-
-
- Não foi possível apagar
- Não foi possível enviar a mensagem
-
- O envio da imagem falhou
-
-
- Erro de conexão à Internet
- Erro do Matrix
-
-
-
-
-
-
-
-
- Ainda não é possível voltar a entrar numa sala vazia.
-
- Mensagem cifrada
-
-
- Endereço de e-mail
- Número de telefone
-
-
- Convite de %s
- Convite para sala
- %1$s e %2$s
- Sala vazia
-
-
- %1$s enviou um sticker.
-
- %s fez o upgrade da sala.
-
- Mensagem removida
- Mensagem removida por %1$s
-
diff --git a/matrix-sdk-android/src/main/res/values-ru/strings.xml b/matrix-sdk-android/src/main/res/values-ru/strings.xml
deleted file mode 100644
index a4d752782e..0000000000
--- a/matrix-sdk-android/src/main/res/values-ru/strings.xml
+++ /dev/null
@@ -1,253 +0,0 @@
-
-
-
- %1$s: %2$s
- %1$s отправил(а) изображение.
-
- %s приглашение
- %1$s пригласил(а) %2$s
- %1$s пригласил(а) вас
- %1$s вошёл(ла) в комнату
- %1$s покинул(а) комнату
- %1$s отклонил(а) приглашение
- %1$s выгнан %2$s
- %1$s разблокировал(а) %2$s
- %1$s заблокировал(а) %2$s
- %1$s отозвал(а) приглашение %2$s
- %1$s изменил(а) свой аватар
- %1$s установил(а) имя %2$s
- %1$s изменил(а) имя с %2$s на %3$s
- %1$s удалил(а) свое имя (%2$s)
- %1$s изменил(а) тему на: %2$s
- %1$s изменил(а) название комнаты: %2$s
- %s начал(а) видеовызов.
- %s начал(а) голосовой вызов.
- %s ответил(а) на звонок.
- %s завершил(а) вызов.
- %1$s сделал(а) будущую историю комнаты видимой %2$s
- всем членам, с момента их приглашения.
- всем членам, с момента присоединения.
- всем членам.
- всем.
- неизвестно (%s).
- %1$s включил(а) сквозное шифрование (%2$s)
-
- %1$s запросил(а) VoIP конференцию
- VoIP-конференция начата
- VoIP-конференция завершена
-
- (аватар также был изменен)
- %1$s удалил(а) название комнаты
- %1$s удалил(а) тему комнаты
- %1$s обновил(а) свой профиль %2$s
- %1$s отправил(а) приглашение %2$s присоединиться к комнате
- %1$s принял(а) приглашение от %2$s
-
- ** Невозможно расшифровать: %s **
- Устройство отправителя не предоставило нам ключ для расшифровки этого сообщения.
-
-
- Не удалось изменить
- Не удалось отправить сообщение
-
- Не удалось загрузить изображение
-
-
- Сетевая ошибка
- Ошибка Matrix
-
-
-
-
-
-
-
-
- В настоящее время невозможно вновь присоединиться к пустой комнате.
-
- Зашифрованное сообщение
-
-
- Адрес электронной почты
- Номер телефона
-
- %1$s отправил стикер.
-
-
- Приглашение от %s
- Приглашение в комнату
- %1$s и %2$s
- Пустая комната
-
-
- %1$s и 1 другой
- %1$s и %2$d другие
- %1$s и %2$d других
-
-
-
-
- Сообщение удалено
- %1$s удалил(а) сообщение
- Сообщение удалено [причина: %1$s]
- %1$s удалил(а) сообщение [причина: %2$s]
-
- Начальная синхронизация:
-\nИмпорт учетной записи…
- Начальная синхронизация:
-\nИмпорт криптографии
- Начальная синхронизация:
-\nИмпорт комнат
- Синхронизация начата:
-\nИмпорт присоединенных комнат
- Синхронизация начата:
-\nИмпорт приглашенных комнат
- Начальная синхронизация:
-\nИмпорт покинутых комнат
- Начальная синхронизация:
-\nИмпорт сообществ
- Начальная синхронизация:
-\nИмпорт данных учетной записи
-
- %s обновил эту комнату.
-
- Отправка сообщения…
- Очистить очередь отправки
-
- %1$s отозвал приглашение %2$s присоединиться к комнате
- Приглашение %1$s. Причина: %2$s
- %1$s приглашен %2$s. Причина: %3$s
- %1$s пригласил вас. Причина: %2$s
- %1$s вошёл(ла) в комнату. Причина: %2$s
- %1$s покинул(а) комнату. Причина: %2$s
- %1$s отклонил приглашение. Причина: %2$s
- %1$s выгнали %2$s. Причина: %3$s
- %1$s разблокировано %2$s. Причина: %3$s
- %1$s забанен %2$s. Причина: %3$s
- %1$s отправил приглашение %2$s в комнату. Причина: %3$s
- %1$s отозвал приглашение %2$s присоединиться к комнате. Причина: %3$s
- %1$s принял приглашение для %2$s. Причина: %3$s
- %1$s отозвал приглашение %2$s. Причина: %3$s
-
- %1$s создал(а) комнату
-
- %1$s добавил(а) %2$s в качестве адреса для этой комнаты.
- %1$s добавил(а) %2$s в качестве адресов для этой комнаты.
- %1$s добавил(а) %2$s в качестве адресов для этой комнаты.
-
-
-
- %1$s удалил(а) адрес %2$s для комнаты.
- %1$s удалил(а) адреса %2$s для комнаты.
- %1$s удалил(а) адреса %2$s для комнаты.
-
-
- %1$s добавил(а) адреса %2$s и удалил(а) %3$s для комнаты.
-
- %1$s сделал(а) %2$s главным адресом комнаты.
- %1$s удалил(а) главный адрес комнаты.
-
- %1$s разрешил(а) гостям входить в комнату.
- %1$s запретил(а) гостям входить в комнату.
-
- %1$s включил(а) сквозное шифрование.
- %1$s включил(а) сквозное шифрование (неизвестный алгоритм %2$s).
-
- %s запрашивает подтверждение вашего ключа, но ваш клиент не поддерживает подтверждение в чате. Используйте устаревшую проверку для сверки ключей.
-
- Вы отправили изображение.
- Вы отправили стикер.
-
- Ваше приглашение
- Вы создали комнату
- Вы пригласили %1$s
- Вы вошли в комнату
- Вы покинули комнату
- Вы отклонили приглашение
- Вы выгнали %1$s
- Вы разбанили %1$s
- Вы забанили %1$s
- Вы отозвали приглашение %1$s
- Вы сменили свой аватар
- Вы сменили своё отображаемое имя на %1$s
- Вы сменили своё отображаемое имя с %1$s на %2$s
- Вы удалили своё отображаемое имя (%1$s)
- Вы сменили тему на: %1$s
- Вы сменили название комнаты на: %1$s
- Вы начали видеозвонок.
- Вы начали звонок.
- Вы ответили на звонок.
- Вы закончили звонок.
- Вы сделали будущую историю комнаты видимой для %1$s
- Вы включили сквозное шифрование (%1$s)
- Вы обновили эту комнату.
-
- Вы начали групповой звонок
- Вы удалили название комнаты
- Вы удалили тему комнаты
- Вы обновили свой профиль %1$s
- Вы отправили %1$s приглашение в эту комнату
- Вы отозвали у %1$s приглашение в эту комнату
- Вы приняли приглашение для %1$s
-
- %1$s добавил(а) виджет %2$s
- Вы добавили виджет %1$s
- %1$s удалил(а) виджет %2$s
- Вы удалили виджет %1$s
- %1$s изменил(а) виджет %2$s
- Вы изменили виджет %1$s
-
- Администратор
- Модератор
- По умолчанию
- Пользовательский (%1$d)
- Пользовательский
-
- Вы изменили уровни доступа %1$s.
- %1$s изменил(а) уровни доступа %2$s.
- %1$s с %2$s на %3$s
-
- Ваше приглашение. Причина: %1$s
- Вы пригласили %1$s. Причина: %2$s
- Вы вошли в комнату. Причина: %1$s
- Вы покинули комнату. Причина: %1$s
- Вы отклонили приглашение. Причина: %1$s
- Вы выгнали %1$s. Причина: %2$s
- Вы разбанили %1$s. Причина: %2$s
- Вы забанили %1$s. Причина: %2$s
- Вы отправили %1$s приглашение в эту комнату. Причина: %2$s
- Вы отозвали у %1$s приглашение в эту комнату. Причина: %2$s
- Вы приняли приглашение для %1$s. Причина: %2$s
- Вы отозвали приглашение %1$s. Причина: %2$s
-
-
- Вы добавили адрес %1$s для этой комнаты.
- Вы добавили %1$s в качестве адресов для этой комнаты.
- Вы добавили %1$s в качестве адресов для этой комнаты.
-
-
-
- Вы удалили адрес этой комнаты: %1$s.
- Вы удалили адреса этой комнаты: %1$s.
- Вы удалили адреса этой комнаты: %1$s.
-
-
- Вы добавили адреса %1$s и удалили %2$s для этой комнаты.
-
- Вы задали главный адрес этой комнаты %1$s.
- Вы удалили главный адрес этой комнаты.
-
- Вы разрешили гостям входить в комнату.
- Вы запретили гостям входить в комнату.
-
- Вы включили сквозное шифрование.
- Вы включили сквозное шифрование (неизвестный алгоритм %1$s).
-
- %1$s изменил(а) аватар комнаты
- Вы изменили аватар комнаты
- %s отправил(а) данные для начала звонка.
- Вы отправили данные для начала звонка.
- %1$s удалил(а) аватар комнаты
- Вы удалили аватар комнаты
-
-
diff --git a/matrix-sdk-android/src/main/res/values-si/strings_sas.xml b/matrix-sdk-android/src/main/res/values-si/strings_sas.xml
new file mode 100644
index 0000000000..7ea72d2a4d
--- /dev/null
+++ b/matrix-sdk-android/src/main/res/values-si/strings_sas.xml
@@ -0,0 +1,8 @@
+
+
+
+ බල්ලා
+ පූසා
+ සිංහයා
+ අශ්වයා
+
diff --git a/matrix-sdk-android/src/main/res/values-sk/strings.xml b/matrix-sdk-android/src/main/res/values-sk/strings.xml
deleted file mode 100644
index da869eacc2..0000000000
--- a/matrix-sdk-android/src/main/res/values-sk/strings.xml
+++ /dev/null
@@ -1,238 +0,0 @@
-
-
- %1$s: %2$s
- %1$s poslal/a obrázok.
-
- Pozvanie od %s
- %1$s pozval/a %2$s
- %1$s vás pozval/a
- %1$s vstúpil/a do miestnosti
- %1$s opustil/a miestnosť
- %1$s odmietol/a pozvanie
- %1$s vykázal/a %2$s
- %1$s povolil/a vstupovať %2$s
- %1$s zakázal/a vstupovať %2$s
- %1$s vzal/a späť pozvanie %2$s
- %1$s si zmenil/a obrázok v profile
- %1$s si nastavil/a zobrazované meno %2$s
- %1$s si zmenil/a zobrazované meno %2$s na %3$s
- %1$s odstránil/a svoje zobrazované meno (%2$s)
- %1$s zmenil/a tému na: %2$s
- %1$s zmenil/a názov miestnosti na: %2$s
- %s uskutočnil/a video hovor.
- %s zatelefonoval/a.
- %s prijal/a hovor.
- %s ukončil/a hovor.
- %1$s sprístupnil/a budúcu históriu miestnosti %2$s
- pre všetkých členov, od kedy boli pozvaní.
- pre všetkých členov, od kedy vstúpili.
- pre všetkých členov.
- pre každého.
- neznámym (%s).
- %1$s povolil/a E2E šifrovanie (%2$s)
-
- %1$s požiadal/a o VoIP konferenciu
- Začala sa VoIP konferencia
- Skončila sa VoIP konferencia
-
- (aj obrázok v profile)
- %1$s odstránil/a názov miestnosti
- %1$s odstránil/a tému miestnosti
- %1$s aktualizoval/a svoj profil %2$s
- %1$s pozval/a %2$s vstúpiť do miestnosti
- %1$s prijal/a pozvanie pre %2$s
-
- ** Nie je možné dešifrovať: %s **
- Zo zariadenia odosieľateľa nebolo možné získať kľúče potrebné na dešifrovanie tejto správy.
-
- Nie je možné vymazať
- Nie je možné odoslať správu
-
- Nepodarilo sa nahrať obrázok
-
- Chyba siete
- Chyba Matrix
-
- V súčasnosti nie je možné znovu vstúpiť do prázdnej miestnosti.
-
- Šifrovaná správa
-
- Emailová adresa
- Telefónne číslo
-
- %1$s poslal/a nálepku.
-
- Pozvanie od %s
- Pozvanie do miestnosti
- %1$s a %2$s
- Prázdna miestnosť
-
-
- %1$s a 1 ďalší
- %1$s a %2$d ďalší
- %1$s a %2$d ďalších
-
-
-
-
- %s aktualizoval/a túto miestnosť.
-
- Odstránená správa
- Odstránená správa používateľom %1$s
- Odstránená správa [dôvod: %1$s]
- Odstránená správa používateľom %1$s [dôvod: %2$s]
-
- Úvodná synchronizácia:
-\nPrebieha import účtu…
- Úvodná synchronizácia:
-\nPrebieha import šifrovacích kľúčov
- Úvodná synchronizácia:
-\nPrebieha import miestností
- Úvodná synchronizácia:
-\nPrebieha import miestností, do ktorých ste vstúpili
- Úvodná synchronizácia:
-\nPrebieha import pozvaní
- Úvodná synchronizácia:
-\nPrebieha import opustených miestností
- Úvodná synchronizácia:
-\nPrebieha import komunít
- Úvodná synchronizácia:
-\nPrebieha import údajov účtu
-
- Odosielanie správy…
- Vymazať správy na odoslanie
-
- %1$s zamietol/a pozvanie používateľa %2$s vstúpiť do miestnosti
- Pozvanie od %1$s. Dôvod: %2$s
- %1$s pozval/a %2$s. Dôvod: %3$s
- %1$s vás pozval/a. Dôvod: %2$s
- %1$s vstúpil/a do miestnosti. Dôvod: %2$s
- %1$s opustil/a miestnosť. Dôvod: %2$s
- %1$s odmietol/a pozvanie. Dôvod: %2$s
- %1$s vykázal/a %2$s. Dôvod: %3$s
- %1$s povolil/a vstupovať %2$s. Dôvod: %3$s
- %1$s zakázal/a vstupovať %2$s. Dôvod: %3$s
- %1$s pozval/a %2$s vstúpiť do miestnosti. Dôvod: %3$s
- %1$s zamietol/a pozvanie používateľa %2$s vstúpiť do miestnosti. Dôvod: %3$s
- %1$s prijal/a pozvanie pre %2$s. Dôvod: %3$s
- %1$s vzal/a späť pozvanie %2$s. Dôvod: %3$s
-
-
- %1$s pridal/a adresu %2$s pre túto miestnosť.
- %1$s pridal/a adresy %2$s pre túto miestnosť.
- %1$s pridal/a adresy %2$s pre túto miestnosť.
-
-
-
- %1$s odstránil/a adresu %2$s pre túto miestnosť.
- %1$s odstránil/a adresy %3$s pre túto miestnosť.
- %1$s odstránil/a adresy %3$s pre túto miestnosť.
-
-
- %1$s pridal/a adresy %2$s a odstránil/a adresy %3$s pre túto miestnosť.
-
- %1$s nastavil/a hlavnú adresu tejto miestnosti %2$s.
- %1$s odstránil/a hlavnú adresu tejto miestnosti.
-
- %1$s povolil/a hosťom///návštevníkom prístup do tejto miestnosti.
- Poslali ste obrázok.
- Poslali ste nálepku.
-
- Pozvanie od vás
- %1$s vytvoril/a miestnosť
- Vytvorili ste miestnosť
- Pozvali ste %1$s
- Vstúpili ste do miestnosti
- Opustili ste miestnosť
- Odmietli ste pozvanie
- Vykázali ste %1$s
- Povolili ste vstupovať %1$s
- Zakázali ste vstupovať %1$s
- Vzali ste späť pozvanie %1$s
- Zmenili ste si obrázok v profile
- Nastavili ste si zobrazované meno %1$s
- Zmenili ste si zobrazované meno %1$s na %2$s
- Odstránili ste svoje zobrazované meno %1$s
- Zmenili ste tému na: %1$s
- %1$s zmenil/a obrázok miestnosti
- Zmenili ste obrázok miestnosti
- Zmenili ste názov miestnosti na: %1$s
- Uskutočnili ste video hovor.
- Zatelefonovali ste.
- %s poslal údaje pre nastavenie hovoru.
- Poslali ste údaje na nastavenie hovoru.
- Prijali ste hovor.
- Ukončili ste hovor.
- Sprístupnili ste budúcu históriu miestnosti %1$s
- Povolili ste E2E šifrovanie (%1$s)
- Aktualizovali ste túto miestnosť.
-
- Požiadali ste o VoIP konferenciu
- Odstránili ste názov miestnosti
- Odstránili ste tému miestnosti
- %1$s odstránil obrázok miestnosti
- Odstránili ste obrázok miestnosti
- Aktualizovali ste svoj profil %1$s
- Pozvali ste %1$s vstúpiť do miestnosti
- Zamietli ste pozvanie používateľa %2$s vstúpiť do miestnosti
- Prijali ste pozvanie pre %1$s
-
- %1$s pridal/a widget %2$s
- Pridali ste widget %1$s
- %1$s odstránil/a widget %2$s
- Odstránili ste widget %1$s
- %1$s upravil/a widget %2$s
- Upravili ste widget %1$s
-
- Správca
- Moderátor
- Predvolený
- Vlastná úroveň (%1$d)
- Vlastná úroveň
-
- Zmenili ste úroveň moci používateľa %1$s.
- %1$s zmenil úroveň moci používateľa %2$s.
- %1$s z %2$s na %3$s
-
- Pozvanie od vás. Dôvod: %1$s
- Pozvali ste %1$s. Dôvod: %2$s
- Vstúpili ste do miestnosti. Dôvod: %1$s
- Opustili ste miestnosť. Dôvod: %1$s
- Odmietli ste pozvanie. Dôvod: %1$s
- Vykázali ste %1$s. Dôvod: %2$s
- Povolili ste vstupovať %1$s. Dôvod: %2$s
- Zakázali ste vstupovať %1$s. Dôvod: %2$s
- Pozvali ste %1$s vstúpiť do miestnosti. Dôvod: %2$s
- Zamietli ste pozvanie používateľa %1$s vstúpiť do miestnosti. Dôvod: %2$s
- Prijali ste pozvanie pre %1$s. Dôvod: %2$s
- Vzali ste späť pozvanie %1$s. Dôvod: %2$s
-
-
- Pridali ste adresu %1$s pre túto miestnosť.
- Pridali ste adresy %1$s pre túto miestnosť.
- Pridali ste adresy %1$s pre túto miestnosť.
-
-
-
- Odstránili ste adresu %1$s pre túto miestnosť.
- Odstránili ste adresy %2$s pre túto miestnosť.
- Odstránili ste adresy %2$s pre túto miestnosť.
-
-
- Pridali ste %1$s a odstránili adresy %2$s pre túto miestnosť.
-
- Nastavili ste hlavnú adresu tejto miestnosti %2$s.
- Odstránili ste hlavnú adresu tejto miestnosti.
-
- Povolili ste hosťom///návštevníkom prístup do tejto miestnosti.
- %1$s zakázal/a hosťom///návštevníkom prístup do tejto miestnosti.
- Zakázali ste hosťom///návštevníkom prístup do tejto miestnosti.
-
- %1$s povolil/a E2E šifrovanie.
- Povolili ste E2E šifrovanie.
- %1$s povolil/a E2E šifrovanie (Nerozpoznaný algorytmus %2$s).
- Povolili ste E2E šifrovanie (Nerozpoznaný algorytmus %1$s).
-
- %s požaduje overenie vašich šifrovacích kľúčov, ale váš klient nepodporuje overenie kľúčov v konverzácii. Budete musieť použiť zastaralú metódu overenia.
-
-
diff --git a/matrix-sdk-android/src/main/res/values-sq/strings.xml b/matrix-sdk-android/src/main/res/values-sq/strings.xml
deleted file mode 100644
index 14a7c61bbc..0000000000
--- a/matrix-sdk-android/src/main/res/values-sq/strings.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
- %1$s: %2$s
- %1$s dërgoi një figurë.
- %1$s ftoi %2$s
- %1$s ju ftoi
- %1$s hyri në dhomë
- %1$s doli nga dhoma
- %1$s hodhi tej ftesën
- %1$s përzuri %2$s
- %1$s dëboi %2$s
- %1$s ndryshoi avatarin e vet
- %1$s ndryshoi temën në: %2$s
- %1$s ndryshoi emrin e dhomës në: %2$s
- %s bëri një thirrje video.
- %s bëri një thirrje zanore.
- %s iu përgjigj thirrjes.
- %s e përfundoi thirrjen.
- %1$s e bëri historikun e ardhshëm të dhomës të dukshëm për %2$s
- për krejt anëtarët e dhomës, prej çastit kur janë ftuar.
- për krejt anëtarët e dhomës, prej çastit kur morën pjesë.
- krejt anëtarët e dhomës.
- cilido.
- e panjohur (%s).
- %1$s kërkoi një konferencë VoIP
- Konferenca VoIP filloi
- Konferenca VoIP përfundoi
-
- (u ndryshua edhe avatari)
- %1$s hoqi emrin e dhomës
- %1$s përditësoi profilin e tij %2$s
- %1$s pranoi ftesën tuaj për %2$s
-
- ** S’arrihet të shfshehtëzohet: %s **
- Pajisja e dërguesit nuk na ka dërguar kyçet për këtë mesazh.
-
- S’u redaktua dot
- S’arrihet të dërgohet mesazh
-
- Ngarkimi i figurës dështoi
-
- Gabim rrjeti
- Gabim Matrix
-
- Hëpërhë s’është e mundur të rihyhet në një dhomë të zbrazët.
-
- U fshehtëzua mesazhi
-
- Adresë email
- Numër telefoni
-
- Ftesë nga %s
- Ftesë Dhome
-
- %1$s dhe %2$s
-
- Dhomë e zbrazët
-
- %1$s dërgoi një ngjitës.
-
- Ftesë e %s
- %1$s hoqi dëbimin për %2$s
- %1$s tërhoqi mbrapsht ftesën për %2$s
- %1$s caktoi për veten emër ekrani %2$s
- %1$s ndryshoi emrin e tyre në ekran nga %2$s në %3$s
- %1$s hoqi emrin e tij në ekran (%2$s)
- %1$s aktivizoi fshehtëzim skaj-më-skaj (%2$s)
-
- %1$s hoqi temën e dhomës
- %1$s dërgoi një ftesë për %2$s që të marrë pjesë në dhomë
-
- %1$s dhe 1 tjetër
- %1$s dhe %2$d të tjerë
-
-
- Mesazhi u hoq
- Mesazhi u hoq nga %1$s
- Mesazh i hequr [arsye: %1$s]
- Mesazh i hequr nga %1$s [arsye: %2$s]
- %s e përmirësoi këtë dhomë.
-
- Njëkohësimi Fillestar:
-\nPo importohet llogaria…
- Njëkohësimi Fillestar:
-\nPo importohet kriptografi
- Njëkohësimi Fillestar:
-\nPo importohen Dhoma
- Njëkohësimi Fillestar:
-\nPo importohen Dhoma Ku Është Bërë Hyrje
- Njëkohësimi Fillestar:
-\nPo importohen Dhoma Me Ftesë
- Njëkohësimi Fillestar:
-\nPo importohen Dhoma të Braktisura
- Njëkohësimi Fillestar:
-\nPo importohen Bashkësi
- Njëkohësimi Fillestar:
-\nPo importohet të Dhëna Llogarie
-
- Po dërgohet mesazh…
- Spastro radhë pritjeje
-
- %1$s shfuqizoi ftesën për %2$s për pjesëmarrje te dhoma
- Ftesë e %1$s. Arsye: %2$s
- %1$s ftoi %2$s. Arsye: %3$s
- %1$s ju ftoi. Arsye: %2$s
- %1$s erdhi në dhomë. Arsye: %2$s
- %1$s doli nga dhoma. Arsye: %2$s
- %1$s hodhi poshtë ftesën. Arsye: %2$s
- %1$s përzuri %2$s. Arsye: %3$s
- %1$s hoqi dëbimin për %2$s. Arsye: %3$s
- %1$s dëboi %2$s. Arsye: %3$s
- %1$s dërgoi një ftesë për %2$s për të ardhur në dhomë. Arsye: %3$s
- %1$s shfuqizoi ftesën për %2$s për të ardhur në dhomë. Arsye: %3$s
- %1$s pranoi ftesën për %2$s. Arsye: %3$s
- %1$s tërhoqi mbrapsht ftesën për %2$s. Arsye: %3$s
-
-
- %1$s shtoi %2$s si një adresë për këtë dhomë.
- %1$s shtoi %2$s si adresa për këtë dhomë.
-
-
-
- %1$s hoqi %2$s si adresë për këtë dhomë.
- %1$s hoqi %3$s si adresa për këtë dhomë.
-
-
- %1$s shtoi %2$s dhe hoqi %3$s si adresa për këtë dhomë.
-
- %1$s caktoi %2$s si adresë kryesore për këtë dhomë.
- %1$s hoqi adresën kryesore për këtë dhomë.
-
- %1$s ka lejuar vizitorë të marrin pjesë në dhomë.
- %1$s ka penguar vizitorë të marrin pjesë në dhomë.
-
- %1$s aktivizoi fshehtëzim skaj-më-skaj.
- %1$s aktivizoi fshehtëzim skaj-më-skaj (algoritëm i papranuar %2$s).
-
- %s po kërkon të verifikojë kyçin tuaj, por klienti juaj nuk mbulon verifikim kyçesh brenda fjalosjeje. Që të verifikoni kyça, do t’ju duhet të përdorni verifikim të dikurshëm kyçesh.
-
- %1$s krijo dhomën
-
diff --git a/matrix-sdk-android/src/main/res/values-sr/strings_sas.xml b/matrix-sdk-android/src/main/res/values-sr/strings_sas.xml
new file mode 100644
index 0000000000..04da7a11f0
--- /dev/null
+++ b/matrix-sdk-android/src/main/res/values-sr/strings_sas.xml
@@ -0,0 +1,68 @@
+
+
+
+ пас
+ мачка
+ лав
+ коњ
+ једнорог
+ прасе
+ слон
+ зец
+ панда
+ петао
+ пингвин
+ корњача
+ риба
+ октопод
+ лептир
+ цвет
+ дрво
+ кактус
+ печурка
+ глобус
+ месец
+ облак
+ ватра
+ банана
+ јабука
+ јагода
+ кукуруз
+ пица
+ торта
+ срце
+ смајли
+ робот
+ шешир
+ наочаре
+ кључ
+ деда Мраз
+ палчић горе
+ кишобран
+ пешчаник
+ сат
+ поклон
+ сијалица
+ књига
+ оловка
+ спајалица
+ маказе
+ катанац
+ кључ
+ чекић
+ телефон
+ застава
+ воз
+ бицикл
+ авион
+ ракета
+ пехар
+ лопта
+ гитара
+ труба
+ звоно
+ сидро
+ слушалице
+ фасцикла
+ чиода
+
diff --git a/matrix-sdk-android/src/main/res/values-sv/strings.xml b/matrix-sdk-android/src/main/res/values-sv/strings.xml
deleted file mode 100644
index 8f8ba5e306..0000000000
--- a/matrix-sdk-android/src/main/res/values-sv/strings.xml
+++ /dev/null
@@ -1,224 +0,0 @@
-
-
- %1$s: %2$s
- %1$s skickade en bild.
- Du skickade en bild.
- %1$s skickade en dekal.
- Du skickade en dekal.
-
- Inbjudan från %s
- Inbjudan från dig
- %1$s skapade rummet
- Du skapade rummet
- %1$s bjöd in %2$s
- Du bjöd in %1$s
- %1$s bjöd in dig
- %1$s gick med i rummet
- Du gick med i rummet
- %1$s lämnade rummet
- Du lämnade rummet
- %1$s avböjde inbjudan
- Du avböjde inbjudan
- %1$s kickade %2$s
- Du kickade %1$s
- %1$s avbannade %2$s
- Du avbannade %1$s
- %1$s avbannade %2$s
- Du bannade %1$s
- %1$s drog tillbaka inbjudan för %2$s
- Du drog tillbaka inbjudan för %1$s
- %1$s bytte sin avatar
- Du bytte din avatar
- %1$s satte sitt visningsnamn till %2$s
- Du satte ditt visningsnamn till %1$s
- %1$s bytte sitt visningsnamn från %2$s till %3$s
- Du bytte ditt visningsnamn från %1$s till %2$s
- %1$s tog bort sitt visningsnamn (det var %2$s)
- Du tog bort ditt visningsnamn (det var %1$s)
- %1$s bytte ämnet till: %2$s
- Du bytte ämnet till: %1$s
- %1$s bytte rummets avatar
- Du bytte rummets avatar
- %1$s bytte rummets namn till: %2$s
- Du bytte rummets namnet till: %1$s
- %s startade ett videosamtal.
- Du startade ett videosamtal.
- %s startade ett röstsamtal.
- Du startade ett röstsamtal.
- %s skickade data för att sätta upp samtalet.
- Du skickade data för att sätta upp samtalet.
- %s svarade på samtalet.
- Du svarade på samtalet.
- %s avslutade samtalet.
- Du avslutade samtalet.
- %1$s gjorde framtida rumshistorik synlig för %2$s
- Du gjorde framtida rumshistorik synlig för %1$s
- alla rumsmedlemmar, från tiden de bjöds in.
- alla rumsmedlemmar, från tiden de gick med.
- alla rumsmedlemmar.
- vem som helst.
- okänt (%s).
- %1$s aktiverade totalsträckskryptering (%2$s)
- Du aktiverade totalsträckskryptering (%1$s)
- %s uppgraderade det här rummet.
- Du uppgraderade det här rummet.
-
- %1$s begärde ett VoIP-gruppsamtal
- Du begärde ett VoIP-gruppsamtal
- VoIP-gruppsamtal startat
- VoIP-gruppsamtal avslutat
-
- (avataren blev även bytt)
- %1$s tog bort rummets namn
- Du tog bort rummets namn
- %1$s tog bort rummets ämne
- Du tog bort rummets ämne
- %1$s tog bort rummets avatar
- Du tog bort rummets avatar
- Meddelande borttaget
- Meddelande borttaget av %1$s
- Meddelande borttaget [anledning: %1$s]
- Meddelande borttaget av %1$s [anledning: %2$s]
- %1$s uppdaterade sim profil %2$s
- Du uppdaterade din profil %1$s
- %1$s bjöd in %2$s att gå med i rummet
- Du bjöd in %1$s att gå med i rummet
- %1$s drog tillbaka inbjudan för %2$s att gå med i rummet
- Du drog tillbaka inbjudan för %1$s att gå med i rummet
- %1$s accepterade inbjudan för %2$s
- Du accepterade inbjudan för %1$s
-
- %1$s lade till %2$s-widget
- Du lade till %1$s-widget
- %1$s tog bort %2$s-widget
- Du tog bort %1$s-widget
- %1$s modifierade %2$s-widget
- Du modifierade %1$s-widget
-
- Admin
- Moderator
- Standard
- Anpassad (%1$d)
- Anpassad
-
- Du ändrade behörighetsnivå för %1$s.
- %1$s ändrade behörighetsnivå för %2$s.
- %1$s från %2$s till %3$s
-
- ** Kan inte avkryptera: %s **
- Avsändarens enhet har inte gett oss nycklarna för det här meddelandet.
-
- Kunde inte dölja
- Kunde inte skicka meddelandet
-
- Misslyckades att ladda upp bilden
-
- Nätverksfel
- Matrixfel
-
- Det går för närvarande inte att gå med i ett tomt rum igen.
-
- Krypterat meddelande
-
- E-postadress
- Telefonnummer
-
- Inbjudan från %s
- Rumsinbjudan
-
- %1$s och %2$s
-
-
- %1$s och en till
- %1$s och %2$d till
-
-
- Tomt rum
-
- Inledande synk:
-\nImporterar konto…
- Inledande synk:
-\nImporterar krypto
- Inledande synk:
-\nImporterar rum
- Inledande synk:
-\nImporterar anslutna rum
- Inledande synk:
-\nImporterar inbjudna rum
- Inledande synk:
-\nImporterar lämnade rum
- Inledande synk:
-\nImporterar gemenskaper
- Inledande synk:
-\nImporterar kontodata
-
- Skickar meddelande…
- Rensa sändningskö
-
- Inbjudan från %1$s. Anledning: %2$s
- Inbjudan från dig. Anledning: %1$s
- %1$s bjöd in %2$s. Anledning: %3$s
- Du bjöd in %1$s. Anledning: %2$s
- %1$s bjöd in dig. Anledning: %2$s
- %1$s gick med i rummet. Anledning: %2$s
- Du gick med i rummet. Anledning: %1$s
- %1$s lämnade rummet. Anledning: %2$s
- Du lämnade rummet. Anledning: %1$s
- %1$s avböjde inbjudan. Anledning: %2$s
- Du avböjde inbjudan. Anledning: %1$s
- %1$s kickade %2$s. Anledning: %3$s
- Du kickade %1$s. Anledning: %2$s
- %1$s avbannade %2$s. Anledning: %3$s
- Du avbannade %1$s. Anledning: %2$s
- %1$s bannade %2$s. Anledning: %3$s
- Du bannade %1$s. Anledning: %2$s
- %1$s bjöd in %2$s att gå med i rummet. Anledning: %3$s
- Du bjöd in %1$s att gå med i rummet. Anledning: %2$s
- %1$s drog tillbaka inbjudan för %2$s att gå med i rummet. Anledning: %3$s
- Du drog tillbaka inbjudan för %1$s att gå med i rummet. Anledning: %2$s
- %1$s accepterade inbjudan för %2$s. Anledning: %3$s
- Du accepterade inbjudan för %1$s. Anledning: %2$s
- %1$s drog tillbaka inbjudan för %2$s. Anledning: %3$s
- Du drog tillbaka inbjudan för %1$s. Anledning: %2$s
-
-
- %1$s lade till %2$s som en adress för det här rummet.
- %1$s lade till %2$s som adresser för det här rummet.
-
-
-
- Du lade till %1$s som en adress för det här rummet.
- Du lade till %1$s som adresser för det här rummet.
-
-
-
- %1$s tog bort %2$s som en adress för det här rummet.
- %1$s tog bort %2$s som adresser för det här rummet.
-
-
-
- Du tog bort %1$s som en adress för det här rummet.
- Du tog bort %2$s som adresser för det här rummet.
-
-
- %1$s lade till %2$s och tog bort %3$s som adresser för det här rummet.
- Du lade till %1$s och tog bort %2$s som adresser för det här rummet.
-
- %1$s satta huvudadressen för det här rummet till %2$s.
- Du satta huvudadressen för det här rummet till %1$s.
- %1$s tog bort huvudadressen för det här rummet.
- Du tog bort huvudadressen för det här rummet.
-
- %1$s tillät gäster att gå med i rummet.
- Du tillät gäster att gå med i rummet.
- %1$s hindrade gäster från att gå med i rummet.
- Du hindrade gäster från att gå med i rummet.
-
- %1$s aktiverade totalsträckskryptering.
- Du aktiverade totalsträckskryptering.
- %1$s aktiverade totalsträckskryptering (okänd algoritm %2$s).
- Du aktiverade totalsträckskryptering (okänd algoritm %1$s).
-
- %s begär att verifiera din nyckel, men din klient stöder inte nyckelverifiering i chatten. Du behöver använda legacynyckelverifiering för att verifiera nycklar.
-
-
diff --git a/matrix-sdk-android/src/main/res/values-szl/strings_sas.xml b/matrix-sdk-android/src/main/res/values-szl/strings_sas.xml
new file mode 100644
index 0000000000..9769ad73ce
--- /dev/null
+++ b/matrix-sdk-android/src/main/res/values-szl/strings_sas.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/matrix-sdk-android/src/main/res/values-te/strings.xml b/matrix-sdk-android/src/main/res/values-te/strings.xml
deleted file mode 100644
index 62f58c9e26..0000000000
--- a/matrix-sdk-android/src/main/res/values-te/strings.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
- %s\'s ఆహ్వానం
- %1$s ఆహ్వానించారు %2$s
- %1$s వదిలి వెళారు
- %1$s ఆహ్వానాన్ని తిరస్కరించారు
- %1$s తన్నాడు %2$s
- %1$s నిషేధాన్ని %2$s
- %1$s నిషేధించారు %2$s
- %1$s ఉపసంహరించుకుంది %2$s\'s ఆహ్వానం
- %1$s వారి అవతార్ను మార్చారు
- %1$s వారి డిస్ప్లే పేరును ని సెట్ చేసారు %2$s
- %1$s వారి ప్రదర్శన పేరును %2$s నుండి %3$s మార్చారు
- %1$s వారి ప్రదర్శన పేరుని తీసివేసారు (%2$s)
- %1$s అంశం మార్చబడింది:%2$s
- %1$s గది పెరు మార్చబడింది %2$s
- %s ఒక వీడియో కాల్ని ఉంచింది.
- %s వాయిస్ కాల్ని ఉంచారు.
- %s కాల్కి సమాధానం ఇచ్చారు.
- %s కాల్ ముగిసింది.
- %1$s భవిష్యత్ గది చరిత్రను %2$s కి కనిపించేలా చేసింది
- పాయింట్నుండి, అన్ని గది సభ్యుల వారు ఆహ్వానించబడ్డారు.
- పాయింట్ నుండి, అన్ని గదుల సభ్యుల వారు చేరారు.
- అన్ని గదుల సభ్యులు.
- ఎవరైనా.
- తెలియని (%s).
- %1$s ఎండ్-టు-ఎండ్ ఎన్క్రిప్షన్ ఆన్ చెయ్యబడింది (%2$s)
-
- %1$s వి ఓ ఇ పి సమావేశాన్ని అభ్యర్థించారు
- వి ఓ ఇ పి సమావేశం ప్రారంభమైంది
- వి ఓ ఇ పి సమావేశం ముగిసింది
-
- (అవతార్ మార్చబడింది)
- %1$s గది పేరు తొలగించబడింది
- %1$s గది అంశాన్ని తీసివేసారు
- %1$s వారి ప్రొఫైల్ నవీకరించబడింది %2$s
- %1$s గదిలో చేరడానికి %2$s కు ఆహ్వానాన్ని పంపారు
- %2$sకోసం %1$s ఆహ్వానాన్ని అంగీకరించారు
-
- ** వ్యక్తీకరించడానికి సాధ్యం కాలేదు: %s **
- ఈ సందేశానికి పంపేవారి పరికరం మాకు కీలను పంపలేదు.
-
- గది స్క్రీన్
- సందేశం పంపడం సాధ్యం కాలేదు
-
- చిత్రాన్ని అప్లోడ్ చేయడంలో విఫలమైంది
-
- సాధారణ లోపాలు
- మాట్రిక్స్ లోపం
-
- మళ్లీ ఖాళీ గది ని చేరడానికి ప్రస్తుతం ఇది సాధ్యం కాదు.
-
- ఎన్క్రిప్టెడ్ సందేశం
-
- ఇమెయిల్ చిరునామా
- ఫోను నంబరు
-
-
- %1$s: %2$s
- %1$s ఒక చిత్రం పంపారు.
-
- %1$s మిమ్మల్ని ఆహ్వానించారు
- %1$s చేరారు
-
- %s నుండి ఆహ్వానించు
- %1$s మరియు %2$s
- గదికి ఆహ్వానం
- ఖాళీ గది
-
-
-
diff --git a/matrix-sdk-android/src/main/res/values-th/strings.xml b/matrix-sdk-android/src/main/res/values-th/strings.xml
deleted file mode 100644
index 3abd948f77..0000000000
--- a/matrix-sdk-android/src/main/res/values-th/strings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- %1$s: %2$s
-
diff --git a/matrix-sdk-android/src/main/res/values-tzm/strings_sas.xml b/matrix-sdk-android/src/main/res/values-tzm/strings_sas.xml
new file mode 100644
index 0000000000..bebf64e5ab
--- /dev/null
+++ b/matrix-sdk-android/src/main/res/values-tzm/strings_sas.xml
@@ -0,0 +1,30 @@
+
+
+
+ Aydi
+ Amuc
+ Izem
+ Ayyis
+ Ilef
+ Ilu
+ Agnin
+ Ayaẓiḍ
+ Ifker
+ Aselm
+ Aseklu
+ Agursel
+ Ayyur
+ Timessi
+ Tabanant
+ Tadeffuyt
+ Ul
+ Aṛubu
+ Taraza
+ Adlis
+ Tasarut
+ Atilifun
+ Acenyal
+ Tcama
+ Agiṭaṛ
+ Asdaw
+
diff --git a/matrix-sdk-android/src/main/res/values-uk/strings.xml b/matrix-sdk-android/src/main/res/values-uk/strings.xml
deleted file mode 100644
index eb5071f190..0000000000
--- a/matrix-sdk-android/src/main/res/values-uk/strings.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
- %1$s: %2$s
- %1$s надіслав(ла) зображення.
-
- %s запрошення
- %1$s запросив(ла) %2$s
- Зашифроване повідомлення
-
-
- Запрошення від %s
- Запрошення до кімнати
- %1$s і %2$s
- Порожня кімната
-
-
- %1$s надіслав(ла) наліпку.
-
- %1$s запросив(ла) Вас
- %1$s приєднався(лась)
- %1$s покинув(ла)
- %1$s відхилив(ла) запрошення
- %1$s копнув(ла) %2$s
- %1$s розблокував(ла) %2$s
- %1$s заблокував(ла) %2$s
- %1$s відкликав(ла) запрошення для %2$s
- %1$s змінив(ла) свій аватар
- %1$s встановив(ла) собі ім’я %2$s
- %1$s змінив(ла) своє ім’я з %2$s на %3$s
- %1$s прибрав(ла) своє ім’я (%2$s)
- %1$s змінив(ла) тему на: %2$s
- %1$s змінив(ла) назву кімнати на: %2$s
- %s розпочав(ла) відеодзвінок.
- %s розпочав(ла) голосовий дзвінок.
- %s відповів(ла) на дзвінок.
- %s завершив(ла) дзвінок.
- %1$s зробив(ла) майбутню історію кімнати видимою для %2$s
- усіх співрозмовників, з моменту їх запрошення.
- усіх співрозмовників, з моменту їх приєднання.
- усіх співрозмовників.
- будь-кого.
- невідомо (%s).
- %1$s увімкнув(ла) наскрізне шифрування (%2$s)
-
- %1$s запросив(ла) VoIP конференцію
- VoIP конференція розпочалась
- VoIP конференція завершилась
-
- (аватар також змінено)
- %1$s прибрав(ла) назву кімнати
- %1$s прибрав(ла) тему кімнати
- %1$s оновив(ла) свій профіль %2$s
- %1$s надіслав(ла) запрошення %2$s приєднатися до кімнати
- %1$s прийняв(ла) запрошення у %2$s
-
- ** Неможливо розшифрувати: %s **
- Пристрій відправника не надіслав нам ключ для цього повідомлення.
-
- Неможливо відредагувати
- Не вдалося надіслати повідомлення
-
- Не вдалося завантажити зображення
-
- Помилка мережі
- Помилка Matrix
-
- Наразі неможливо переприєднатися до порожньої кімнати.
-
- Адреса електронної пошти
- Номер телефону
-
-
- %1$s та 1 інший
- %1$s та %2$d інші
- %1$s та %2$d інших
-
-
-
- %s вдосконалили цю кімнату.
-
- Повідомлення видалено
- %1$s видалили повідомлення
- Повідомлення видалено [причина: %1$s]
-
diff --git a/matrix-sdk-android/src/main/res/values-vls/strings.xml b/matrix-sdk-android/src/main/res/values-vls/strings.xml
deleted file mode 100644
index f0f2287a8d..0000000000
--- a/matrix-sdk-android/src/main/res/values-vls/strings.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
- %1$s: %2$s
- %1$s èt e fotootje gesteurd.
- %1$s èt e sticker gesteurd.
-
- Uutnodigienge van %s
- %1$s èt %2$s uutgenodigd
- %1$s èt joun uitgenodigd
- %1$s neemt nu deel an ’t gesprek
- %1$s èt ’t gesprek verloatn
- %1$s èt d’uitnodigienge geweigerd
- %1$s èt %2$s uut ’t gesprek verwyderd
- %1$s èt %2$s ountbann
- %1$s èt %2$s verbann
- %1$s èt d’uutnodigienge van %2$s ingetrokkn
- %1$s èt zyn/heur avatar angepast
- %1$s èt zyn/heur noame angepast noa %2$s
- %1$s èt zyn/heur noame angepast van %2$s noa %3$s
- %1$s èt zyn/heur noame verwyderd (%2$s)
- %1$s èt ’t ounderwerp veranderd noa: %2$s
- %1$s èt de gespreksnoame veranderd noa: %2$s
- %s èt e video-iproep gemakt.
- %s èt e sproakiproep gemakt.
- %s èt den iproep beantwoord.
- %s èt ipgehangn.
- %1$s èt de toekomstige gespreksgeschiedenisse zichtboar gemakt vo %2$s
- alle deelnemers an ’t gesprek, vanaf ’t punt dan ze zyn uutgenodigd.
- alle deelnemers an ’t gesprek, vanaf ’t punt dan ze zyn toegetreedn.
- alle deelnemers an ’t gesprek.
- iedereen.
- ounbekend (%s).
- %1$s èt eind-tout-eind-versleutelienge angezet (%2$s)
-
- %1$s èt e VoIP-vergoaderienge angevroagd
- VoIP-vergoaderienge begunn
- VoIP-vergoaderienge gestopt
-
- (avatar es ook veranderd)
- %1$s èt de gespreksnoame verwyderd
- %1$s èt ’t gespreksounderwerp verwyderd
- Bericht verwyderd
- Bericht verwyderd deur %1$s
- Bericht verwyderd [reden: %1$s]
- Bericht verwyderd deur %1$s [reden: %2$s]
- %1$s èt zyn/heur profiel %2$s bygewerkt
- %1$s èt een uutnodigienge noa %2$s gesteurd vo ’t gesprek toe te treedn
- %1$s èt d’uutnodigienge vo %2$s anveird
-
- ** Kun nie ountsleuteln: %s **
- ’t Toestel van den afzender èt geen sleutels vo da bericht hier gesteurd.
-
- Kosteg nie verwyderd wordn
- Kosteg ’t bericht nie verzendn
-
- Iploadn van ’t fotootje es mislukt
-
- Netwerkfout
- Matrix-fout
-
- ’t Es vo de moment nie meuglik van e leeg gesprek were toe te treedn.
-
- Versleuteld bericht
-
- E-mailadresse
- Telefongnumero
-
- Uutnodigienge van %s
- Gespreksuutnodigienge
-
- %1$s en %2$s
-
-
- %1$s en 1 andere
- %1$s en %2$d anderen
-
-
- Leeg gesprek
-
- Initiële synchronisoasje:
-\nAccount wor geïmporteerd…
- Initiële synchronisoasje:
-\nCrypto wor geïmporteerd
- Initiële synchronisoasje:
-\nGesprekkn wordn geïmporteerd
- Initiële synchronisoasje:
-\nDeelgenoomn gesprekken wordn geïmporteerd
- Initiële synchronisoasje:
-\nUutgenodigde gesprekkn wordn geïmporteerd
- Initiële synchronisoasje:
-\nVerloatn gesprekkn wordn geïmporteerd
- Initiële synchronisoasje:
-\nGemeenschappn wordn geïmporteerd
- Initiële synchronisoasje:
-\nAccountgegeevns wordn geïmporteerd
-
- %s èt da gesprek hier ipgewoardeerd.
-
- Bericht wor verstuurd…
- Uutgoande wachtreeke leegn
-
- %1$s èt d’uutnodigienge vo %2$s vo ’t gesprek toe te treedn ingetrokkn
-
diff --git a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml
deleted file mode 100644
index 60322821d4..0000000000
--- a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-
-
- %1$s 发送了一张图片。
-
- %s 的邀请
- %1$s 邀请了 %2$s
- %1$s 邀请了您
- %1$s 加入了聊天室
- %1$s 离开了聊天室
- %1$s 拒绝了邀请
- %1$s 移除了 %2$s
- %1$s 解封了 %2$s
- %1$s 封禁了 %2$s
- %1$s 更换了他们的头像
- %1$s 将他们的昵称设置为 %2$s
- %1$s 把他们的昵称从 %2$s 改为 %3$s
- %1$s 移除了他们的昵称 (%2$s)
- %1$s 把主题改为: %2$s
- %1$s 把聊天室名称改为: %2$s
- %s 发起了一次视频通话。
- %s 发起了一次语音通话。
- %s 已接听通话。
- %s 已结束通话。
- 所有聊天室成员,从他们被邀请开始。
- 所有聊天室成员,从他们加入开始。
- 所有聊天室成员。
- 任何人。
- 未知(%s)。
- %1$s 开启了端到端加密(%2$s)
-
- %1$s 请求了一次 VoIP 会议
- VoIP 会议已开始
- VoIP 会议已结束
-
- (头像也被更改)
- %1$s 移除了聊天室名称
- %1$s 移除了聊天室主题
- ** 无法解密:%s **
- 发送者的设备没有向我们发送此消息的密钥。
-
- 无法发送消息
-
- 上传图像失败
-
- 网络错误
- Matrix 错误
-
- 目前无法重新加入一个空的聊天室。
-
- 已加密消息
-
- 电子邮箱地址
- 手机号码
-
- %1$s 撤回了对 %2$s 的邀请
- %1$s 让未来的聊天室历史记录对 %2$s 可见
- %1$s 更新了他的个人档案 %2$s
- %1$s 向 %2$s 发送了加入聊天室的邀请
- %1$s 接受了 %2$s 的邀请
-
- 无法撤回
-
- %1$s:%2$s
- %1$s 发送了一张贴纸。
-
- 空聊天室
- 来自 %s 的邀请
- 聊天室邀请
- %1$s 和 %2$s
-
- %1$s 与其他 %2$d 位
-
-
- 消息已被移除
- 消息已被 %1$s 移除
- 消息已被移除 [原因: %1$s]
- 消息已被 %1$s 移除 [原因: %2$s]
- 初始化同步:
-\n正在导入账号…
- 初始化同步:
-\n正在导入加密数据
- 初始化同步:
-\n正在导入聊天室
- 初始化同步:
-\n正在导入已加入的聊天室
- 初始化同步:
-\n正在导入已邀请的聊天室
- 初始化同步:
-\n正在导入已离开的聊天室
- 初始化同步:
-\n正在导入社区
- 初始化同步:
-\n正在导入账号数据
-
- %s 升级了此聊天室。
-
- 正在发送消息…
- 清除正在发送队列
-
- %1$s 撤回了对 %2$s 加入聊天室的邀请
-
- %1$s 的邀请。理由:%2$s
- %1$s 邀请了 %2$s。理由:%3$s
- %1$s 邀请了您。理由:%2$s
- %1$s 加入了聊天室。理由:%2$s
- %1$s 离开了聊天室。理由:%2$s
- %1$s 已拒绝邀请。理由:%2$s
- %1$s 踢走了 %2$s。理由:%3$s
- %1$s 解封了 %2$s。理由:%3$s
- %1$s 封禁了 %2$s。理由:%3$s
- %1$s 已发送邀请给 %2$s 来加入聊天室。理由:%3$s
- %1$s 撤销了 %2$s 加入聊天室的邀請。理由:%3$s
- %1$s 接受 %2$s 的邀請。理由:%3$s
- %1$s 撤回了对 %2$s 的邀请。理由:%3$s
-
-
- %1$s 新增了 %2$s 为此聊天室的地址。
-
-
-
- %1$s 移除了此聊天室的 %3$s 地址。
-
-
- %1$s 为此聊天室新增了 %2$s 并移除 %3$s 地址。
-
- %1$s 将此聊天室的主地址设为了 %2$s。
- %1$s 为此聊天室移除了主地址。
-
- %1$s 已允许访客加入聊天室。
- %1$s 已禁止访客加入聊天室。
-
- %1$s 已开启端到端加密。
- %1$s 已开启端到端加密(无法识别的演算法 %2$s)。
-
- %s 正在请求验证您的密钥,但您的客户端不支援聊天中密钥验证。 您将必须使用旧版的密钥验证来验证金钥。
-
- %1$s 创建了这个聊天室
- 您发送了一张图片。
- 您发送了一张贴纸。
-
- 您的邀请
- 您创建了这个聊天室
- 您邀请了 %1$s
- 您加入了聊天室
- 您离开了聊天室
- 您拒绝了邀请
- 您移除了 %1$s
- 您解封了 %1$s
- 您封禁了 %1$s
- 您撤回了对 %1$s 的邀请
- 您更换了您的头像
- 您将您的昵称设置为 %1$s
- 您将您的昵称从 %1$s 改为 %2$s
- 您移除了您的昵称 (%1$s)
- 您把主题改为:%1$s
- %1$s 变更了聊天室头像
- 您变更了聊天室头像
- 您把聊天室名称改为:%1$s
- 您发起了一次视频通话。
- 您发起了一次语音通话。
- %s 发送了数据以建立通话。
- 您发送了数据以建立通话。
- 您接听了通话。
- 您结束了通话。
- 您已让未来的聊天室记录对 %1$s 可见
- 您开启了端到端加密(%1$s)
- 您升级了此聊天室。
-
- 您请求了 VoIP 会议
- 您移除了聊天室名称
- 您移除了聊天室主题
- %1$s 移除了聊天室头像
- 您移除了聊天室头像
- 您更新了您的个人档案 %1$s
- 您向 %1$s 发送了加入聊天室的邀请
- 您已撤回了对 %1$s 加入聊天室的邀请
- 您接受了 %1$s 的邀请
-
- %1$s 添加了 %2$s 小部件
- 您添加了 %1$s 小部件
- %1$s 移除了 %2$s 小部件
- 您移除了 %1$s 小部件
- %1$s 修改了 %2$s 小部件
- 您修改了 %1$s 小部件
-
- 管理员
- 审核员
- 默认
- 自定义(%1$d)
- 自定义
-
- 您更改了%1$s 的权力等级。
- %1$s 更改了 %2$s 的权力等级。
- %1$s 从 %2$s 到 %3$s
-
- 您的邀请。理由:%1$s
- 您邀请了 %1$s。理由:%2$s
- 您加入了聊天室。理由:%1$s
- 您离开了聊天室。理由:%1$s
- 您拒绝了邀请。理由:%1$s
- 您踢走了 %1$s。理由:%2$s
- 您解封了 %1$s。理由:%2$s
- 您封禁了 %1$s。理由:%2$s
- 您已发送邀请给 %1$s 来加入聊天室。理由:%2$s
- 您撤销了 %1$s 加入聊天室的邀请。理由:%2$s
- 您接受了 %1$s 的邀请。理由:%2$s
- 您撤回了 %1$s 的邀请。理由:%2$s
-
-
- 您新增了 %1$s 为此聊天室的地址。
-
-
-
- 您移除了此聊天室的 %2$s 地址。
-
-
- 您为此聊天室新增了 %1$s 并移除了 %2$s 地址。
-
- 您将此聊天室的主地址设为了 %1$s。
- 您移除了此聊天室的主地址。
-
- 您已允许访客加入聊天室。
- 您已禁止访客加入聊天室。
-
- 您已开启端到端加密。
- 您已开启端到端加密(无法识别的算法 %1$s)。
-
-
diff --git a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml
deleted file mode 100644
index 355890923c..0000000000
--- a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-
-
- %1$s:%2$s
- %1$s 傳送了一張圖片。
-
- %s 的邀請
- %1$s 邀請了 %2$s
- %1$s 邀請您
- %1$s 已加入聊天室
- %1$s 已離開聊天室
- %1$s 拒絕邀請
- %1$s 踢出 %2$s
- %1$s 解除禁止 %2$s
- %1$s 禁止 %2$s
- %1$s 收回了對 %2$s 的邀請
- %1$s 變更了他們的大頭貼
- %1$s 設定了他們的顯示名稱為 %2$s
- %1$s 變更了他們的顯示名稱從 %2$s 到 %3$s
- %1$s 移除了他們的顯示名稱 (%2$s)
- %1$s 變更主題為:%2$s
- %1$s 變更房間名稱為:%2$s
- %s 撥出了視訊通話。
- %s 撥出了語音通話。
- %s 回覆了通話。
- %s 結束通話。
- %1$s 讓房間未來可讓 %2$s 看到歷史紀錄
- 所有的房間成員,從他們被邀請的時間開始。
- 所有的房間成員,從他們加入的時間開始。
- 所有的房間成員。
- 任何人。
- 未知 (%s)。
- %1$s 開啟了端對端加密 (%2$s)
-
- %1$s 請求了 VoIP 會議通話
- VoIP 會議通話已開始
- VoIP 會議通話已結束
-
- (大頭貼也變更了)
- %1$s 移除了房間名稱
- %1$s 移除了房間主題
- %1$s 更新了他們的基本資料 %2$s
- %1$s 傳送加入房間的邀請給 %2$s
- %1$s 接受 %2$s 的邀請
-
- ** 無法解密:%s **
- 傳送者的裝置並未在此訊息傳送他們的金鑰。
-
- 無法編輯
- 無法傳送訊息
-
- 上傳圖片失敗
-
- 網路錯誤
- Matrix 錯誤
-
- 目前無法重新加入空房間。
-
- 已加密的訊息
-
- 電子郵件
- 電話號碼
-
- %1$s 傳送了一張貼圖。
-
- 來自%s 的邀請
- 聊天室邀請
- %1$s 和 %2$s
-
- 空聊天室
-
- %1$s 和 和其他 %2$d 個人
-
-
- 訊息已移除
- 訊息已被 %1$s 移除
- 訊息已移除 [理由:%1$s]
- 訊息已被 %1$s 移除 [理由:%2$s]
-
- 初始化同步:
-\n正在匯入帳號……
- 初始化同步:
-\n正在匯入 crypto
- 初始化同步:
-\n正在匯入聊天室
- 初始化同步:
-\n正在匯入已加入的聊天室
- 初始化同步:
-\n正在匯入已邀請的聊天室
- 初始化同步:
-\n正在匯入已離開的聊天室
- 初始化同步:
-\n正在匯入社群
- 初始化同步:
-\n正在匯入帳號資料
-
- %s 已升級此聊天室。
-
- 正在傳送訊息……
- 清除傳送佇列
-
- %1$s 撤銷了 %2$s 加入聊天室的邀請
- %1$s 的邀請。理由:%2$s
- %1$s 邀請了 %2$s。理由:%3$s
- %1$s 邀請了您。理由:%2$s
- %1$s 已加入聊天室。理由:%2$s
- %1$s 已離開聊天室。理由:%2$s
- %1$s 已回絕邀請。理由:%2$s
- %1$s 踢走了 %2$s。理由:%3$s
- %1$s 取消封鎖了 %2$s。理由:%3$s
- %1$s 封鎖了 %2$s。理由:%3$s
- %1$s 已傳送邀請給 %2$s 來加入聊天室。理由:%3$s
- %1$s 撤銷了 %2$s 加入聊天室的邀請。理由:%3$s
- %1$s 接受 %2$s 的邀請。理由:%3$s
- %1$s 撤回了對 %2$s 的邀請。理由:%3$s
-
-
- %1$s 新增了 %2$s 為此聊天室的地址。
-
-
-
- %1$s 移除了此聊天室的 %3$s 地址。
-
-
- %1$s 為此聊天室新增 %2$s 並移除 %3$s 地址。
-
- %1$s 為此聊天室設定了 %2$s 為主地址。
- %1$s 為此聊天室移除了主要地址。
-
- %1$s 已允許訪客加入聊天室。
- %1$s 已禁止訪客加入聊天室。
-
- %1$s 已開啟端到端加密。
- %1$s 已開啟端到端加密(無法識別的演算法 %2$s)。
-
- %s 正在請求驗證您的金鑰,但您的客戶端不支援聊天中金鑰驗證。您將必須使用舊版的金鑰驗證來驗證金鑰。
-
- %1$s 建立了聊天室
- 您傳送了圖片。
- 您傳送了貼圖。
-
- 您的邀請
- 您建立了聊天室
- 您邀請了 %1$s
- 您加入了聊天室
- 您離開的聊天室
- 您回絕了邀請
- 您踢除了 %1$s
- 您取消封鎖了 %1$s
- 您封鎖了 %1$s
- 您撤銷了 %1$s 的邀請
- 您變更了您的大頭貼
- 您將您的顯示名稱設定為 %1$s
- 您將您的顯示名稱從 %1$s 變更為 %2$s
- 您移除了您的顯示名稱(其曾為 %1$s)
- 您將主題變更為:%1$s
- %1$s 變更了聊天室大頭貼
- 您變更了聊天室大頭貼
- 您將聊天室名稱變更為:%1$s
- 您發起了視訊通話。
- 您發起了音訊通話。
- %s 傳送了資料以建立通話。
- 您傳送了資料以建立通話。
- 您接了通話。
- 您結束了通話。
- 您已將未來的聊天室歷史設定為對 %1$s 可見
- 您開啟了端到端加密 (%1$s)
- 您升級了此聊天室。
-
- 您請求了 VoIP 會議
- 您移除了聊天室名稱
- 您移除了聊天室主題
- %1$s 移除了聊天室大頭貼
- 您移除了聊天室大頭貼
- 您更新了您的個人檔案 %1$s
- 您傳送了邀請給 %1$s 以加入聊天室
- 您已撤銷對 %1$s 加入聊天室的邀請
- 您接受了 %1$s 的邀請
-
- %1$s 新增了 %2$s 小工具
- 您新增了 %1$s 小工具
- %1$s 移除了 %2$s 小工具
- 您移除了 %1$s 小工具
- %1$s 修改了 %2$s 小工具
- 您修改了 %1$s 小工具
-
- 管理員
- 板主
- 預設
- 自訂 (%1$d)
- 自訂
-
- 您變更了 %1$s 的權力等級。
- %1$s 變更了 %2$s 的權力等級。
- %1$s 從 %2$s 到 %3$s
-
- 您的邀請。理由:%1$s
- 您邀請了 %1$s。理由:%2$s
- 您加入了聊天室。理由:%1$s
- 您離開了聊天室。理由:%1$s
- 您回絕了邀請。理由:%1$s
- 您踢除了 %1$s。理由:%2$s
- 您取消封鎖了 %1$s。理由:%2$s
- 您封鎖了 %1$s。理由:%2$s
- 您傳甕了邀請給 %1$s 以加入聊天室。理由:%2$s
- 您撤銷了 %1$s 加入聊天室的邀請。理由:%2$s
- 您接受了 %1$s 的邀請。理由:%2$s
- 您撤回了 %1$s 的邀請。理由:%2$s
-
-
- 您為此聊天室新增了 %1$s 作為地址。
-
-
-
- 您為此聊天室移除了 %2$s 作為地址。
-
-
- 您為此聊天室新增了 %1$s 並移除了 %2$s 作為地址。
-
- 您將此聊天室的主要地址設定為 %1$s。
- 您將此聊天室的主要地址移除。
-
- 您已允許訪客加入聊天室。
- 您已阻止訪客加入聊天室。
-
- 您開啟了端到端加密。
- 您開啟了端到端加密(無法識別的演算法 %1$s)。
-
-
diff --git a/matrix-sdk-android/src/main/res/values/strings.xml b/matrix-sdk-android/src/main/res/values/strings.xml
deleted file mode 100644
index 3f75b715f6..0000000000
--- a/matrix-sdk-android/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,255 +0,0 @@
-
-
- %1$s: %2$s
- %1$s sent an image.
- You sent an image.
- %1$s sent a sticker.
- You sent a sticker.
-
- %s\'s invitation
- Your invitation
- %1$s created the room
- You created the room
- %1$s created the discussion
- You created the discussion
- %1$s invited %2$s
- You invited %1$s
- %1$s invited you
- %1$s joined the room
- You joined the room
- %1$s joined
- You joined
- %1$s left the room
- You left the room
- %1$s left the room
- You left the room
- %1$s rejected the invitation
- You rejected the invitation
- %1$s kicked %2$s
- You kicked %1$s
- %1$s unbanned %2$s
- You unbanned %1$s
- %1$s banned %2$s
- You banned %1$s
- %1$s withdrew %2$s\'s invitation
- You withdrew %1$s\'s invitation
- %1$s changed their avatar
- You changed your avatar
- %1$s set their display name to %2$s
- You set your display name to %1$s
- %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 changed the topic to: %2$s
- You changed the topic to: %1$s
- %1$s changed the room avatar
- You changed the room avatar
- %1$s changed the room name to: %2$s
- You changed the room name to: %1$s
- %s placed a video call.
- You placed a video call.
- %s placed a voice call.
- You placed a voice call.
- %s sent data to setup the call.
- You sent data to setup the call.
- %s answered the call.
- You answered the call.
- %s ended the call.
- You ended the call.
- %1$s made future room history visible to %2$s
- You made future room history visible to %1$s
- %1$s made future messages visible to %2$s
- You made future messages visible to %1$s
- all room members, from the point they are invited.
- all room members, from the point they joined.
- all room members.
- anyone.
- unknown (%s).
- %1$s turned on end-to-end encryption (%2$s)
- You turned on end-to-end encryption (%1$s)
- %s upgraded this room.
- You upgraded this room.
- %s upgraded here.
- You upgraded here.
-
- %1$s requested a VoIP conference
- You requested a VoIP conference
- VoIP conference started
- VoIP conference finished
-
- (avatar was changed too)
- %1$s removed the room name
- You removed the room name
- %1$s removed the room topic
- You removed the room topic
- %1$s removed the room avatar
- You removed the room avatar
- Message removed
- Message removed by %1$s
- Message removed [reason: %1$s]
- Message removed by %1$s [reason: %2$s]
- %1$s updated their profile %2$s
- You updated your profile %1$s
- %1$s sent an invitation to %2$s to join the room
- You sent an invitation to %1$s to join the room
- %1$s invited %2$s
- You invited %1$s
- %1$s revoked the invitation for %2$s to join the room
- You revoked the invitation for %1$s to join the room
- %1$s revoked the invitation for %2$s
- You revoked the invitation for %1$s
- %1$s accepted the invitation for %2$s
- You accepted the invitation for %1$s
-
- %1$s added %2$s widget
- You added %1$s widget
- %1$s removed %2$s widget
- You removed %1$s widget
- %1$s modified %2$s widget
- You modified %1$s widget
-
- Admin
- Moderator
- Default
- Custom (%1$d)
- Custom
-
-
- You changed the power level of %1$s.
-
- %1$s changed the power level of %2$s.
-
- %1$s from %2$s to %3$s
-
- ** Unable to decrypt: %s **
- The sender\'s device has not sent us the keys for this message.
-
-
-
-
- Could not redact
- Unable to send message
-
- Failed to upload image
-
-
- Network error
- Matrix error
-
-
-
-
-
-
-
-
- It is not currently possible to re-join an empty room.
-
- Encrypted message
-
-
- Email address
- Phone number
-
-
- Invite from %s
- Room Invite
-
-
- %1$s and %2$s
-
-
- %1$s and 1 other
- %1$s and %2$d others
-
-
- Empty room
-
- Initial Sync:\nImporting account…
- Initial Sync:\nImporting crypto
- Initial Sync:\nImporting Rooms
- Initial Sync:\nImporting Joined Rooms
- Initial Sync:\nImporting Invited Rooms
- Initial Sync:\nImporting Left Rooms
- Initial Sync:\nImporting Communities
- Initial Sync:\nImporting Account Data
-
- Sending message…
- Clear sending queue
-
- %1$s\'s invitation. Reason: %2$s
- Your invitation. Reason: %1$s
- %1$s invited %2$s. Reason: %3$s
- You invited %1$s. Reason: %2$s
- %1$s invited you. Reason: %2$s
- %1$s joined the room. Reason: %2$s
- You joined the room. Reason: %1$s
- %1$s joined. Reason: %2$s
- You joined. Reason: %1$s
- %1$s left the room. Reason: %2$s
- You left the room. Reason: %1$s
- %1$s left. Reason: %2$s
- You left. Reason: %1$s
- %1$s rejected the invitation. Reason: %2$s
- You rejected the invitation. Reason: %1$s
- %1$s kicked %2$s. Reason: %3$s
- You kicked %1$s. Reason: %2$s
- %1$s unbanned %2$s. Reason: %3$s
- You unbanned %1$s. Reason: %2$s
- %1$s banned %2$s. Reason: %3$s
- You banned %1$s. Reason: %2$s
- %1$s sent an invitation to %2$s to join the room. Reason: %3$s
- You sent an invitation to %1$s to join the room. Reason: %2$s
- %1$s revoked the invitation for %2$s to join the room. Reason: %3$s
- You revoked the invitation for %1$s to join the room. Reason: %2$s
- %1$s accepted the invitation for %2$s. Reason: %3$s
- You accepted the invitation for %1$s. Reason: %2$s
- %1$s withdrew %2$s\'s invitation. Reason: %3$s
- You withdrew %1$s\'s invitation. Reason: %2$s
-
-
- %1$s added %2$s as an address for this room.
- %1$s added %2$s as addresses for this room.
-
-
-
- You added %1$s as an address for this room.
- You added %1$s as addresses for this room.
-
-
-
- %1$s removed %2$s as an address for this room.
- %1$s removed %3$s as addresses for this room.
-
-
-
- You removed %1$s as an address for this room.
- You removed %2$s as addresses for this room.
-
-
- %1$s added %2$s and removed %3$s as addresses for this room.
- You added %1$s and removed %2$s as addresses for this room.
-
- "%1$s set the main address for this room to %2$s."
- "You set the main address for this room to %1$s."
- "%1$s removed the main address for this room."
- "You removed the main address for this room."
-
- "%1$s has allowed guests to join the room."
- "You have allowed guests to join the room."
- "%1$s has allowed guests to join here."
- "You have allowed guests to join here."
- "%1$s has prevented guests from joining the room."
- "You have prevented guests from joining the room."
- "%1$s has prevented guests from joining the room."
- "You have prevented guests from joining the room."
-
- %1$s turned on end-to-end encryption.
- You turned on end-to-end encryption.
- %1$s turned on end-to-end encryption (unrecognised algorithm %2$s).
- You turned on end-to-end encryption (unrecognised algorithm %1$s).
-
- %s is requesting to verify your key, but your client does not support in-chat key verification. You will need to use legacy key verification to verify keys.
-
-
diff --git a/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt b/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt
index c4fed36216..f46e2ca35b 100644
--- a/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt
+++ b/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt b/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt
index 69b15a1fa5..a815cec353 100644
--- a/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt
+++ b/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/sharedTest/java/org/matrix/android/sdk/test/shared/TestRules.kt b/matrix-sdk-android/src/sharedTest/java/org/matrix/android/sdk/test/shared/TestRules.kt
index 52aa7ea0c7..662656ae5e 100644
--- a/matrix-sdk-android/src/sharedTest/java/org/matrix/android/sdk/test/shared/TestRules.kt
+++ b/matrix-sdk-android/src/sharedTest/java/org/matrix/android/sdk/test/shared/TestRules.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/MatrixTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/MatrixTest.kt
index b0933c7106..f6a7f525db 100644
--- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/MatrixTest.kt
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/MatrixTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/auth/data/VersionsKtTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/auth/data/VersionsKtTest.kt
index 69e2f12eb7..c413d9ccae 100644
--- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/auth/data/VersionsKtTest.kt
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/auth/data/VersionsKtTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRuleActionsTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRuleActionsTest.kt
index f213e1b1c1..b734444990 100644
--- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRuleActionsTest.kt
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRuleActionsTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRulesConditionTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRulesConditionTest.kt
index b2c8d3bda8..c0b869a90e 100644
--- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRulesConditionTest.kt
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRulesConditionTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58Test.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58Test.kt
index b2d10968b6..2f01a43a67 100644
--- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58Test.kt
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58Test.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2018 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKeyTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKeyTest.kt
index 6b9d388623..64ffe52acd 100644
--- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKeyTest.kt
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKeyTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2018 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/store/db/HelperTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/store/db/HelperTest.kt
index cac2d1cba9..0bcc7983c5 100644
--- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/store/db/HelperTest.kt
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/store/db/HelperTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2018 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/BinaryStringTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/BinaryStringTest.kt
index 0f8fe58b7f..b04834f9f4 100644
--- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/BinaryStringTest.kt
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/BinaryStringTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,13 +17,13 @@
package org.matrix.android.sdk.internal.crypto.verification.qrcode
import org.matrix.android.sdk.MatrixTest
-import org.amshove.kluent.shouldEqualTo
+import org.amshove.kluent.shouldBeEqualTo
import org.junit.FixMethodOrder
import org.junit.Test
import org.junit.runners.MethodSorters
@FixMethodOrder(MethodSorters.JVM)
-class BinaryStringTest: MatrixTest {
+class BinaryStringTest : MatrixTest {
/**
* I want to put bytes to a String, and vice versa
@@ -37,17 +37,17 @@ class BinaryStringTest: MatrixTest {
val str = byteArray.toString(Charsets.ISO_8859_1)
- str.length shouldEqualTo 256
+ str.length shouldBeEqualTo 256
// Ok convert back to bytearray
val result = str.toByteArray(Charsets.ISO_8859_1)
- result.size shouldEqualTo 256
+ result.size shouldBeEqualTo 256
for (i in 0..255) {
- result[i] shouldEqualTo i.toByte()
- result[i] shouldEqualTo byteArray[i]
+ result[i] shouldBeEqualTo i.toByte()
+ result[i] shouldBeEqualTo byteArray[i]
}
}
}
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/session/room/send/WaveFormSanitizerTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/session/room/send/WaveFormSanitizerTest.kt
new file mode 100644
index 0000000000..23c8aeb76b
--- /dev/null
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/session/room/send/WaveFormSanitizerTest.kt
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2021 The Matrix.org Foundation C.I.C.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.matrix.android.sdk.internal.session.room.send
+
+import org.amshove.kluent.shouldBe
+import org.amshove.kluent.shouldBeInRange
+import org.junit.Test
+
+class WaveFormSanitizerTest {
+
+ private val waveFormSanitizer = WaveFormSanitizer()
+
+ @Test
+ fun sanitizeNull() {
+ waveFormSanitizer.sanitize(null) shouldBe null
+ }
+
+ @Test
+ fun sanitizeEmpty() {
+ waveFormSanitizer.sanitize(emptyList()) shouldBe null
+ }
+
+ @Test
+ fun sanitizeSingleton() {
+ val result = waveFormSanitizer.sanitize(listOf(1))!!
+ result.size shouldBe 30
+ checkResult(result)
+ }
+
+ @Test
+ fun sanitize29() {
+ val list = generateSequence { 1 }.take(29).toList()
+ val result = waveFormSanitizer.sanitize(list)!!
+ checkResult(result)
+ }
+
+ @Test
+ fun sanitize30() {
+ val list = generateSequence { 1 }.take(30).toList()
+ val result = waveFormSanitizer.sanitize(list)!!
+ result.size shouldBe 30
+ checkResult(result)
+ }
+
+ @Test
+ fun sanitize31() {
+ val list = generateSequence { 1 }.take(31).toList()
+ val result = waveFormSanitizer.sanitize(list)!!
+ checkResult(result)
+ }
+
+ @Test
+ fun sanitize119() {
+ val list = generateSequence { 1 }.take(119).toList()
+ val result = waveFormSanitizer.sanitize(list)!!
+ checkResult(result)
+ }
+
+ @Test
+ fun sanitize120() {
+ val list = generateSequence { 1 }.take(120).toList()
+ val result = waveFormSanitizer.sanitize(list)!!
+ result.size shouldBe 120
+ checkResult(result)
+ }
+
+ @Test
+ fun sanitize121() {
+ val list = generateSequence { 1 }.take(121).toList()
+ val result = waveFormSanitizer.sanitize(list)!!
+ checkResult(result)
+ }
+
+ @Test
+ fun sanitize1024() {
+ val list = generateSequence { 1 }.take(1024).toList()
+ val result = waveFormSanitizer.sanitize(list)!!
+ checkResult(result)
+ }
+
+ @Test
+ fun sanitizeNegative() {
+ val list = generateSequence { -1 }.take(30).toList()
+ val result = waveFormSanitizer.sanitize(list)!!
+ checkResult(result)
+ }
+
+ @Test
+ fun sanitizeMaxValue() {
+ val list = generateSequence { 1025 }.take(30).toList()
+ val result = waveFormSanitizer.sanitize(list)!!
+ checkResult(result)
+ }
+
+ @Test
+ fun sanitizeNegativeMaxValue() {
+ val list = generateSequence { -1025 }.take(30).toList()
+ val result = waveFormSanitizer.sanitize(list)!!
+ checkResult(result)
+ }
+
+ private fun checkResult(result: List) {
+ result.forEach {
+ it shouldBeInRange 0..1024
+ }
+
+ result.size shouldBeInRange 30..120
+ }
+}
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/task/CoroutineSequencersTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/task/CoroutineSequencersTest.kt
index 7bef439417..3572a1a546 100644
--- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/task/CoroutineSequencersTest.kt
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/task/CoroutineSequencersTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 New Vector Ltd
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -32,25 +32,23 @@ class CoroutineSequencersTest: MatrixTest {
private val dispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher()
@Test
+ @Suppress("EXPERIMENTAL_API_USAGE")
fun sequencer_should_run_sequential() {
val sequencer = SemaphoreCoroutineSequencer()
val results = ArrayList()
val jobs = listOf(
GlobalScope.launch(dispatcher) {
- sequencer.post { suspendingMethod("#1") }.also {
- results.add(it)
- }
+ sequencer.post { suspendingMethod("#1") }
+ .also { results.add(it) }
},
GlobalScope.launch(dispatcher) {
- sequencer.post { suspendingMethod("#2") }.also {
- results.add(it)
- }
+ sequencer.post { suspendingMethod("#2") }
+ .also { results.add(it) }
},
GlobalScope.launch(dispatcher) {
- sequencer.post { suspendingMethod("#3") }.also {
- results.add(it)
- }
+ sequencer.post { suspendingMethod("#3") }
+ .also { results.add(it) }
}
)
runBlocking {
@@ -63,6 +61,7 @@ class CoroutineSequencersTest: MatrixTest {
}
@Test
+ @Suppress("EXPERIMENTAL_API_USAGE")
fun sequencer_should_run_parallel() {
val sequencer1 = SemaphoreCoroutineSequencer()
val sequencer2 = SemaphoreCoroutineSequencer()
@@ -70,19 +69,16 @@ class CoroutineSequencersTest: MatrixTest {
val results = ArrayList()
val jobs = listOf(
GlobalScope.launch(dispatcher) {
- sequencer1.post { suspendingMethod("#1") }.also {
- results.add(it)
- }
+ sequencer1.post { suspendingMethod("#1") }
+ .also { results.add(it) }
},
GlobalScope.launch(dispatcher) {
- sequencer2.post { suspendingMethod("#2") }.also {
- results.add(it)
- }
+ sequencer2.post { suspendingMethod("#2") }
+ .also { results.add(it) }
},
GlobalScope.launch(dispatcher) {
- sequencer3.post { suspendingMethod("#3") }.also {
- results.add(it)
- }
+ sequencer3.post { suspendingMethod("#3") }
+ .also { results.add(it) }
}
)
runBlocking {
@@ -92,25 +88,23 @@ class CoroutineSequencersTest: MatrixTest {
}
@Test
+ @Suppress("EXPERIMENTAL_API_USAGE")
fun sequencer_should_jump_to_next_when_current_job_canceled() {
val sequencer = SemaphoreCoroutineSequencer()
val results = ArrayList()
val jobs = listOf(
GlobalScope.launch(dispatcher) {
- sequencer.post { suspendingMethod("#1") }.also {
- results.add(it)
- }
+ sequencer.post { suspendingMethod("#1") }
+ .also { results.add(it) }
},
GlobalScope.launch(dispatcher) {
- val result = sequencer.post { suspendingMethod("#2") }.also {
- results.add(it)
- }
- println("Result: $result")
+ sequencer.post { suspendingMethod("#2") }
+ .also { results.add(it) }
+ .also { println("Result: $it") }
},
GlobalScope.launch(dispatcher) {
- sequencer.post { suspendingMethod("#3") }.also {
- results.add(it)
- }
+ sequencer.post { suspendingMethod("#3") }
+ .also { results.add(it) }
}
)
// We are canceling the second job
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/util/GraphUtilsTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/util/GraphUtilsTest.kt
new file mode 100644
index 0000000000..d28192a282
--- /dev/null
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/util/GraphUtilsTest.kt
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2021 The Matrix.org Foundation C.I.C.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.matrix.android.sdk.internal.util
+
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runners.MethodSorters
+import org.matrix.android.sdk.MatrixTest
+import org.matrix.android.sdk.internal.session.room.summary.Graph
+
+@FixMethodOrder(MethodSorters.JVM)
+class GraphUtilsTest : MatrixTest {
+
+ @Test
+ fun testCreateGraph() {
+ val graph = Graph()
+
+ graph.addEdge("E", "C")
+ graph.addEdge("B", "A")
+ graph.addEdge("C", "A")
+ graph.addEdge("D", "C")
+ graph.addEdge("E", "D")
+
+ graph.getOrCreateNode("F")
+
+ System.out.println(graph.toString())
+
+ val backEdges = graph.findBackwardEdges(graph.getOrCreateNode("E"))
+
+ assertTrue("There should not be any cycle in this graphs", backEdges.isEmpty())
+ }
+
+ @Test
+ fun testCycleGraph() {
+ val graph = Graph()
+
+ graph.addEdge("E", "C")
+ graph.addEdge("B", "A")
+ graph.addEdge("C", "A")
+ graph.addEdge("D", "C")
+ graph.addEdge("E", "D")
+
+ graph.getOrCreateNode("F")
+
+ // adding loops
+ graph.addEdge("C", "E")
+ graph.addEdge("B", "B")
+
+ System.out.println(graph.toString())
+
+ val backEdges = graph.findBackwardEdges(graph.getOrCreateNode("E"))
+ System.out.println(backEdges.joinToString(" | ") { "${it.source.name} -> ${it.destination.name}" })
+
+ assertEquals("There should be 2 backward edges not ${backEdges.size}", 2, backEdges.size)
+
+ val edge1 = backEdges.find { it.source.name == "C" }
+ assertNotNull("There should be a back edge from C", edge1)
+ assertEquals("There should be a back edge C -> E", "E", edge1!!.destination.name)
+
+ val edge2 = backEdges.find { it.source.name == "B" }
+ assertNotNull("There should be a back edge from B", edge2)
+ assertEquals("There should be a back edge C -> C", "B", edge2!!.destination.name)
+
+ // clean the graph
+ val acyclicGraph = graph.withoutEdges(backEdges)
+ System.out.println(acyclicGraph.toString())
+
+ assertTrue("There should be no backward edges", acyclicGraph.findBackwardEdges(acyclicGraph.getOrCreateNode("E")).isEmpty())
+
+ val flatten = acyclicGraph.flattenDestination()
+
+ assertTrue(flatten[acyclicGraph.getOrCreateNode("A")]!!.isEmpty())
+
+ val flattenParentsB = flatten[acyclicGraph.getOrCreateNode("B")]
+ assertTrue(flattenParentsB!!.size == 1)
+ assertTrue(flattenParentsB.contains(acyclicGraph.getOrCreateNode("A")))
+
+ val flattenParentsE = flatten[acyclicGraph.getOrCreateNode("E")]
+ assertEquals(3, flattenParentsE!!.size)
+ assertTrue(flattenParentsE.contains(acyclicGraph.getOrCreateNode("A")))
+ assertTrue(flattenParentsE.contains(acyclicGraph.getOrCreateNode("C")))
+ assertTrue(flattenParentsE.contains(acyclicGraph.getOrCreateNode("D")))
+
+// System.out.println(
+// buildString {
+// flatten.entries.forEach {
+// append("${it.key.name}: [")
+// append(it.value.joinToString(",") { it.name })
+// append("]\n")
+// }
+// }
+// )
+ }
+}
diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/util/MathUtilTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/util/MathUtilTest.kt
new file mode 100644
index 0000000000..ade811f9b7
--- /dev/null
+++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/util/MathUtilTest.kt
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2020 The Matrix.org Foundation C.I.C.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.matrix.android.sdk.internal.util
+
+import org.amshove.kluent.shouldBeEqualTo
+import org.amshove.kluent.shouldHaveSize
+import org.junit.FixMethodOrder
+import org.junit.Test
+import org.junit.runners.MethodSorters
+import org.matrix.android.sdk.MatrixTest
+
+@FixMethodOrder(MethodSorters.JVM)
+class MathUtilTest : MatrixTest {
+
+ @Test
+ fun testComputeBestChunkSize0() = doTest(0, 100, 1, 0)
+
+ @Test
+ fun testComputeBestChunkSize1to99() {
+ for (i in 1..99) {
+ doTest(i, 100, 1, i)
+ }
+ }
+
+ @Test
+ fun testComputeBestChunkSize100() = doTest(100, 100, 1, 100)
+
+ @Test
+ fun testComputeBestChunkSize101() = doTest(101, 100, 2, 51)
+
+ @Test
+ fun testComputeBestChunkSize199() = doTest(199, 100, 2, 100)
+
+ @Test
+ fun testComputeBestChunkSize200() = doTest(200, 100, 2, 100)
+
+ @Test
+ fun testComputeBestChunkSize201() = doTest(201, 100, 3, 67)
+
+ @Test
+ fun testComputeBestChunkSize240() = doTest(240, 100, 3, 80)
+
+ private fun doTest(listSize: Int, limit: Int, expectedNumberOfChunks: Int, expectedChunkSize: Int) {
+ val result = computeBestChunkSize(listSize, limit)
+
+ result.numberOfChunks shouldBeEqualTo expectedNumberOfChunks
+ result.chunkSize shouldBeEqualTo expectedChunkSize
+
+ // Test that the result make sense, when we use chunked()
+ if (result.chunkSize > 0) {
+ generateSequence { "a" }
+ .take(listSize)
+ .chunked(result.chunkSize)
+ .shouldHaveSize(result.numberOfChunks)
+ }
+ }
+}
diff --git a/multipicker/build.gradle b/multipicker/build.gradle
index 8f2226e884..437499df7b 100644
--- a/multipicker/build.gradle
+++ b/multipicker/build.gradle
@@ -16,17 +16,14 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
+apply plugin: 'kotlin-parcelize'
android {
- compileSdkVersion 29
+ compileSdk versions.compileSdk
defaultConfig {
- minSdkVersion 19
- targetSdkVersion 29
- versionCode 1
- versionName "1.0"
-
+ minSdk versions.minSdk
+ targetSdk versions.targetSdk
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
}
@@ -41,16 +38,11 @@ android {
}
dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'androidx.appcompat:appcompat:1.1.0'
- implementation 'androidx.core:core-ktx:1.3.0'
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'androidx.test.ext:junit:1.1.1'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
-
- implementation 'androidx.exifinterface:exifinterface:1.3.0-alpha01'
+ implementation libs.jetbrains.kotlinStdlibJdk7
+ implementation libs.androidx.appCompat
+ implementation libs.androidx.fragmentKtx
+ implementation libs.androidx.exifinterface
// Log
- implementation 'com.jakewharton.timber:timber:4.7.1'
+ implementation libs.jakewharton.timber
}
diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt
index c51084dd39..739bda7004 100644
--- a/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt
+++ b/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt
@@ -16,71 +16,24 @@
package im.vector.lib.multipicker
-import android.app.Activity
import android.content.Context
import android.content.Intent
-import android.media.MediaMetadataRetriever
-import android.provider.MediaStore
import im.vector.lib.multipicker.entity.MultiPickerAudioType
+import im.vector.lib.multipicker.utils.toMultiPickerAudioType
/**
* Audio file picker implementation
*/
-class AudioPicker(override val requestCode: Int) : Picker(requestCode) {
+class AudioPicker : Picker() {
/**
* Call this function from onActivityResult(int, int, Intent).
- * Returns selected audio files or empty list if request code is wrong
- * or result code is not Activity.RESULT_OK
- * or user did not select any files.
+ * Returns selected audio files or empty list if user did not select any files.
*/
- override fun getSelectedFiles(context: Context, requestCode: Int, resultCode: Int, data: Intent?): List {
- if (requestCode != this.requestCode && resultCode != Activity.RESULT_OK) {
- return emptyList()
+ override fun getSelectedFiles(context: Context, data: Intent?): List {
+ return getSelectedUriList(data).mapNotNull { selectedUri ->
+ selectedUri.toMultiPickerAudioType(context)
}
-
- val audioList = mutableListOf()
-
- getSelectedUriList(data).forEach { selectedUri ->
- val projection = arrayOf(
- MediaStore.Audio.Media.DISPLAY_NAME,
- MediaStore.Audio.Media.SIZE
- )
-
- context.contentResolver.query(
- selectedUri,
- projection,
- null,
- null,
- null
- )?.use { cursor ->
- val nameColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)
- val sizeColumn = cursor.getColumnIndex(MediaStore.Audio.Media.SIZE)
-
- if (cursor.moveToNext()) {
- val name = cursor.getString(nameColumn)
- val size = cursor.getLong(sizeColumn)
- var duration = 0L
-
- context.contentResolver.openFileDescriptor(selectedUri, "r")?.use { pfd ->
- val mediaMetadataRetriever = MediaMetadataRetriever()
- mediaMetadataRetriever.setDataSource(pfd.fileDescriptor)
- duration = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION).toLong()
- }
-
- audioList.add(
- MultiPickerAudioType(
- name,
- size,
- context.contentResolver.getType(selectedUri),
- selectedUri,
- duration
- )
- )
- }
- }
- }
- return audioList
}
override fun createIntent(): Intent {
diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt
index be6fdb5ee8..b1442a56e1 100644
--- a/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt
+++ b/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt
@@ -16,15 +16,14 @@
package im.vector.lib.multipicker
-import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.provider.MediaStore
+import androidx.activity.result.ActivityResultLauncher
import androidx.core.content.FileProvider
-import androidx.fragment.app.Fragment
import im.vector.lib.multipicker.entity.MultiPickerImageType
-import im.vector.lib.multipicker.utils.ImageUtils
+import im.vector.lib.multipicker.utils.toMultiPickerImageType
import java.io.File
import java.text.SimpleDateFormat
import java.util.Date
@@ -33,33 +32,18 @@ import java.util.Locale
/**
* Implementation of taking a photo with Camera
*/
-class CameraPicker(val requestCode: Int) {
+class CameraPicker {
/**
- * Start camera by using an Activity
- * @param activity Activity to handle onActivityResult().
+ * Start camera by using a ActivityResultLauncher
* @return Uri of taken photo or null if the operation is cancelled.
*/
- fun startWithExpectingFile(activity: Activity): Uri? {
- val photoUri = createPhotoUri(activity)
+ fun startWithExpectingFile(context: Context, activityResultLauncher: ActivityResultLauncher): Uri? {
+ val photoUri = createPhotoUri(context)
val intent = createIntent().apply {
putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
}
- activity.startActivityForResult(intent, requestCode)
- return photoUri
- }
-
- /**
- * Start camera by using a Fragment
- * @param fragment Fragment to handle onActivityResult().
- * @return Uri of taken photo or null if the operation is cancelled.
- */
- fun startWithExpectingFile(fragment: Fragment): Uri? {
- val photoUri = createPhotoUri(fragment.requireContext())
- val intent = createIntent().apply {
- putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
- }
- fragment.startActivityForResult(intent, requestCode)
+ activityResultLauncher.launch(intent)
return photoUri
}
@@ -69,62 +53,29 @@ class CameraPicker(val requestCode: Int) {
* or result code is not Activity.RESULT_OK
* or user cancelled the operation.
*/
- fun getTakenPhoto(context: Context, requestCode: Int, resultCode: Int, photoUri: Uri): MultiPickerImageType? {
- if (requestCode == this.requestCode && resultCode == Activity.RESULT_OK) {
- val projection = arrayOf(
- MediaStore.Images.Media.DISPLAY_NAME,
- MediaStore.Images.Media.SIZE
- )
-
- context.contentResolver.query(
- photoUri,
- projection,
- null,
- null,
- null
- )?.use { cursor ->
- val nameColumn = cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME)
- val sizeColumn = cursor.getColumnIndex(MediaStore.Images.Media.SIZE)
-
- if (cursor.moveToNext()) {
- val name = cursor.getString(nameColumn)
- val size = cursor.getLong(sizeColumn)
-
- val bitmap = ImageUtils.getBitmap(context, photoUri)
- val orientation = ImageUtils.getOrientation(context, photoUri)
-
- return MultiPickerImageType(
- name,
- size,
- context.contentResolver.getType(photoUri),
- photoUri,
- bitmap?.width ?: 0,
- bitmap?.height ?: 0,
- orientation
- )
- }
- }
- }
- return null
+ fun getTakenPhoto(context: Context, photoUri: Uri): MultiPickerImageType? {
+ return photoUri.toMultiPickerImageType(context)
}
private fun createIntent(): Intent {
return Intent(MediaStore.ACTION_IMAGE_CAPTURE)
}
- private fun createPhotoUri(context: Context): Uri {
- val file = createImageFile(context)
- val authority = context.packageName + ".multipicker.fileprovider"
- return FileProvider.getUriForFile(context, authority, file)
- }
+ companion object {
+ fun createPhotoUri(context: Context): Uri {
+ val file = createImageFile(context)
+ val authority = context.packageName + ".multipicker.fileprovider"
+ return FileProvider.getUriForFile(context, authority, file)
+ }
- private fun createImageFile(context: Context): File {
- val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
- val storageDir: File = context.filesDir
- return File.createTempFile(
- "${timeStamp}_", /* prefix */
- ".jpg", /* suffix */
- storageDir /* directory */
- )
+ private fun createImageFile(context: Context): File {
+ val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
+ val storageDir: File = context.filesDir
+ return File.createTempFile(
+ "${timeStamp}_", /* prefix */
+ ".jpg", /* suffix */
+ storageDir /* directory */
+ )
+ }
}
}
diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/CameraVideoPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/CameraVideoPicker.kt
new file mode 100644
index 0000000000..76342b6e2e
--- /dev/null
+++ b/multipicker/src/main/java/im/vector/lib/multipicker/CameraVideoPicker.kt
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2021 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.lib.multipicker
+
+import android.content.Context
+import android.content.Intent
+import android.net.Uri
+import android.provider.MediaStore
+import androidx.activity.result.ActivityResultLauncher
+import androidx.core.content.FileProvider
+import im.vector.lib.multipicker.entity.MultiPickerVideoType
+import im.vector.lib.multipicker.utils.toMultiPickerVideoType
+import java.io.File
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.Locale
+
+/**
+ * Implementation of taking a video with Camera
+ */
+class CameraVideoPicker {
+
+ /**
+ * Start camera by using a ActivityResultLauncher
+ * @return Uri of taken photo or null if the operation is cancelled.
+ */
+ fun startWithExpectingFile(context: Context, activityResultLauncher: ActivityResultLauncher): Uri? {
+ val videoUri = createVideoUri(context)
+ val intent = createIntent().apply {
+ putExtra(MediaStore.EXTRA_OUTPUT, videoUri)
+ }
+ activityResultLauncher.launch(intent)
+ return videoUri
+ }
+
+ /**
+ * Call this function from onActivityResult(int, int, Intent).
+ * @return Taken photo or null if request code is wrong
+ * or result code is not Activity.RESULT_OK
+ * or user cancelled the operation.
+ */
+ fun getTakenVideo(context: Context, videoUri: Uri): MultiPickerVideoType? {
+ return videoUri.toMultiPickerVideoType(context)
+ }
+
+ private fun createIntent(): Intent {
+ return Intent(MediaStore.ACTION_VIDEO_CAPTURE)
+ }
+
+ companion object {
+ fun createVideoUri(context: Context): Uri {
+ val file = createVideoFile(context)
+ val authority = context.packageName + ".multipicker.fileprovider"
+ return FileProvider.getUriForFile(context, authority, file)
+ }
+
+ private fun createVideoFile(context: Context): File {
+ val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
+ val storageDir: File = context.filesDir
+ return File.createTempFile(
+ "${timeStamp}_", /* prefix */
+ ".mp4", /* suffix */
+ storageDir /* directory */
+ )
+ }
+ }
+}
diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt
index e9ae096174..315fe6cbf2 100644
--- a/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt
+++ b/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt
@@ -16,7 +16,6 @@
package im.vector.lib.multipicker
-import android.app.Activity
import android.content.ContentResolver
import android.content.Context
import android.content.Intent
@@ -26,19 +25,13 @@ import im.vector.lib.multipicker.entity.MultiPickerContactType
/**
* Contact Picker implementation
*/
-class ContactPicker(override val requestCode: Int) : Picker(requestCode) {
+class ContactPicker : Picker() {
/**
* Call this function from onActivityResult(int, int, Intent).
- * Returns selected contact or empty list if request code is wrong
- * or result code is not Activity.RESULT_OK
- * or user did not select any files.
+ * Returns selected contact or empty list if user did not select any contacts.
*/
- override fun getSelectedFiles(context: Context, requestCode: Int, resultCode: Int, data: Intent?): List {
- if (requestCode != this.requestCode && resultCode != Activity.RESULT_OK) {
- return emptyList()
- }
-
+ override fun getSelectedFiles(context: Context, data: Intent?): List {
val contactList = mutableListOf()
data?.data?.let { selectedUri ->
diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt
index d5718b9951..ec98152aa7 100644
--- a/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt
+++ b/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt
@@ -16,51 +16,58 @@
package im.vector.lib.multipicker
-import android.app.Activity
import android.content.Context
import android.content.Intent
import android.provider.OpenableColumns
+import im.vector.lib.multipicker.entity.MultiPickerBaseType
import im.vector.lib.multipicker.entity.MultiPickerFileType
+import im.vector.lib.multipicker.utils.isMimeTypeAudio
+import im.vector.lib.multipicker.utils.isMimeTypeImage
+import im.vector.lib.multipicker.utils.isMimeTypeVideo
+import im.vector.lib.multipicker.utils.toMultiPickerAudioType
+import im.vector.lib.multipicker.utils.toMultiPickerImageType
+import im.vector.lib.multipicker.utils.toMultiPickerVideoType
/**
* Implementation of selecting any type of files
*/
-class FilePicker(override val requestCode: Int) : Picker(requestCode) {
+class FilePicker : Picker() {
/**
* Call this function from onActivityResult(int, int, Intent).
- * Returns selected files or empty list if request code is wrong
- * or result code is not Activity.RESULT_OK
- * or user did not select any files.
+ * Returns selected files or empty list if user did not select any files.
*/
- override fun getSelectedFiles(context: Context, requestCode: Int, resultCode: Int, data: Intent?): List {
- if (requestCode != this.requestCode && resultCode != Activity.RESULT_OK) {
- return emptyList()
- }
+ override fun getSelectedFiles(context: Context, data: Intent?): List {
+ return getSelectedUriList(data).mapNotNull { selectedUri ->
+ val type = context.contentResolver.getType(selectedUri)
- val fileList = mutableListOf()
+ when {
+ type.isMimeTypeVideo() -> selectedUri.toMultiPickerVideoType(context)
+ type.isMimeTypeImage() -> selectedUri.toMultiPickerImageType(context)
+ type.isMimeTypeAudio() -> selectedUri.toMultiPickerAudioType(context)
+ else -> {
+ // Other files
+ context.contentResolver.query(selectedUri, null, null, null, null)
+ ?.use { cursor ->
+ val nameColumn = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
+ val sizeColumn = cursor.getColumnIndex(OpenableColumns.SIZE)
+ if (cursor.moveToFirst()) {
+ val name = cursor.getString(nameColumn)
+ val size = cursor.getLong(sizeColumn)
- getSelectedUriList(data).forEach { selectedUri ->
- context.contentResolver.query(selectedUri, null, null, null, null)
- ?.use { cursor ->
- val nameColumn = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
- val sizeColumn = cursor.getColumnIndex(OpenableColumns.SIZE)
- if (cursor.moveToFirst()) {
- val name = cursor.getString(nameColumn)
- val size = cursor.getLong(sizeColumn)
-
- fileList.add(
MultiPickerFileType(
name,
size,
context.contentResolver.getType(selectedUri),
selectedUri
)
- )
- }
- }
+ } else {
+ null
+ }
+ }
+ }
+ }
}
- return fileList
}
override fun createIntent(): Intent {
diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt
index ec87e027f9..4cc2352109 100644
--- a/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt
+++ b/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt
@@ -16,69 +16,24 @@
package im.vector.lib.multipicker
-import android.app.Activity
import android.content.Context
import android.content.Intent
-import android.provider.MediaStore
import im.vector.lib.multipicker.entity.MultiPickerImageType
-import im.vector.lib.multipicker.utils.ImageUtils
+import im.vector.lib.multipicker.utils.toMultiPickerImageType
/**
* Image Picker implementation
*/
-class ImagePicker(override val requestCode: Int) : Picker(requestCode) {
+class ImagePicker : Picker() {
/**
* Call this function from onActivityResult(int, int, Intent).
- * Returns selected image files or empty list if request code is wrong
- * or result code is not Activity.RESULT_OK
- * or user did not select any files.
+ * Returns selected image files or empty list if user did not select any files.
*/
- override fun getSelectedFiles(context: Context, requestCode: Int, resultCode: Int, data: Intent?): List {
- if (requestCode != this.requestCode && resultCode != Activity.RESULT_OK) {
- return emptyList()
+ override fun getSelectedFiles(context: Context, data: Intent?): List {
+ return getSelectedUriList(data).mapNotNull { selectedUri ->
+ selectedUri.toMultiPickerImageType(context)
}
-
- val imageList = mutableListOf()
-
- getSelectedUriList(data).forEach { selectedUri ->
- val projection = arrayOf(
- MediaStore.Images.Media.DISPLAY_NAME,
- MediaStore.Images.Media.SIZE
- )
-
- context.contentResolver.query(
- selectedUri,
- projection,
- null,
- null,
- null
- )?.use { cursor ->
- val nameColumn = cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME)
- val sizeColumn = cursor.getColumnIndex(MediaStore.Images.Media.SIZE)
-
- if (cursor.moveToNext()) {
- val name = cursor.getString(nameColumn)
- val size = cursor.getLong(sizeColumn)
-
- val bitmap = ImageUtils.getBitmap(context, selectedUri)
- val orientation = ImageUtils.getOrientation(context, selectedUri)
-
- imageList.add(
- MultiPickerImageType(
- name,
- size,
- context.contentResolver.getType(selectedUri),
- selectedUri,
- bitmap?.width ?: 0,
- bitmap?.height ?: 0,
- orientation
- )
- )
- }
- }
- }
- return imageList
}
override fun createIntent(): Intent {
diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/MediaPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/MediaPicker.kt
new file mode 100644
index 0000000000..c58abde694
--- /dev/null
+++ b/multipicker/src/main/java/im/vector/lib/multipicker/MediaPicker.kt
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2020 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.lib.multipicker
+
+import android.content.Context
+import android.content.Intent
+import im.vector.lib.multipicker.entity.MultiPickerBaseMediaType
+import im.vector.lib.multipicker.utils.isMimeTypeVideo
+import im.vector.lib.multipicker.utils.toMultiPickerImageType
+import im.vector.lib.multipicker.utils.toMultiPickerVideoType
+
+/**
+ * Image/Video Picker implementation
+ */
+class MediaPicker : Picker() {
+
+ /**
+ * Call this function from onActivityResult(int, int, Intent).
+ * Returns selected image/video files or empty list if user did not select any files.
+ */
+ override fun getSelectedFiles(context: Context, data: Intent?): List {
+ return getSelectedUriList(data).mapNotNull { selectedUri ->
+ val mimeType = context.contentResolver.getType(selectedUri)
+
+ if (mimeType.isMimeTypeVideo()) {
+ selectedUri.toMultiPickerVideoType(context)
+ } else {
+ // Assume it's an image
+ selectedUri.toMultiPickerImageType(context)
+ }
+ }
+ }
+
+ override fun createIntent(): Intent {
+ return Intent(Intent.ACTION_GET_CONTENT).apply {
+ addCategory(Intent.CATEGORY_OPENABLE)
+ putExtra(Intent.EXTRA_ALLOW_MULTIPLE, !single)
+ type = "video/*, image/*"
+ val mimeTypes = arrayOf("image/*", "video/*")
+ putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes)
+ }
+ }
+}
diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/MultiPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/MultiPicker.kt
index d28dcf9586..6ce50f622a 100644
--- a/multipicker/src/main/java/im/vector/lib/multipicker/MultiPicker.kt
+++ b/multipicker/src/main/java/im/vector/lib/multipicker/MultiPicker.kt
@@ -20,29 +20,26 @@ class MultiPicker {
companion object Type {
val IMAGE by lazy { MultiPicker() }
+ val MEDIA by lazy { MultiPicker() }
val FILE by lazy { MultiPicker() }
val VIDEO by lazy { MultiPicker() }
val AUDIO by lazy { MultiPicker() }
val CONTACT by lazy { MultiPicker() }
val CAMERA by lazy { MultiPicker() }
-
- const val REQUEST_CODE_PICK_IMAGE = 5000
- const val REQUEST_CODE_PICK_VIDEO = 5001
- const val REQUEST_CODE_PICK_FILE = 5002
- const val REQUEST_CODE_PICK_AUDIO = 5003
- const val REQUEST_CODE_PICK_CONTACT = 5004
- const val REQUEST_CODE_TAKE_PHOTO = 5005
+ val CAMERA_VIDEO by lazy { MultiPicker() }
@Suppress("UNCHECKED_CAST")
fun get(type: MultiPicker): T {
return when (type) {
- IMAGE -> ImagePicker(REQUEST_CODE_PICK_IMAGE) as T
- VIDEO -> VideoPicker(REQUEST_CODE_PICK_VIDEO) as T
- FILE -> FilePicker(REQUEST_CODE_PICK_FILE) as T
- AUDIO -> AudioPicker(REQUEST_CODE_PICK_AUDIO) as T
- CONTACT -> ContactPicker(REQUEST_CODE_PICK_CONTACT) as T
- CAMERA -> CameraPicker(REQUEST_CODE_TAKE_PHOTO) as T
- else -> throw IllegalArgumentException("Unsupported type $type")
+ IMAGE -> ImagePicker() as T
+ VIDEO -> VideoPicker() as T
+ MEDIA -> MediaPicker() as T
+ FILE -> FilePicker() as T
+ AUDIO -> AudioPicker() as T
+ CONTACT -> ContactPicker() as T
+ CAMERA -> CameraPicker() as T
+ CAMERA_VIDEO -> CameraVideoPicker() as T
+ else -> throw IllegalArgumentException("Unsupported type $type")
}
}
}
diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt
index 65ec77e02a..ba765a3b1d 100644
--- a/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt
+++ b/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt
@@ -16,28 +16,25 @@
package im.vector.lib.multipicker
-import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.content.pm.ResolveInfo
import android.net.Uri
-import androidx.fragment.app.Fragment
+import androidx.activity.result.ActivityResultLauncher
/**
* Abstract class to provide all types of Pickers
*/
-abstract class Picker(open val requestCode: Int) {
+abstract class Picker {
protected var single = false
/**
* Call this function from onActivityResult(int, int, Intent).
- * @return selected files or empty list if request code is wrong
- * or result code is not Activity.RESULT_OK
- * or user did not select any files.
+ * @return selected files or empty list if user did not select any files.
*/
- abstract fun getSelectedFiles(context: Context, requestCode: Int, resultCode: Int, data: Intent?): List
+ abstract fun getSelectedFiles(context: Context, data: Intent?): List
/**
* Use this function to retrieve files which are shared from another application or internally
@@ -61,7 +58,7 @@ abstract class Picker(open val requestCode: Int) {
context.grantUriPermission(packageName, it, Intent.FLAG_GRANT_READ_URI_PERMISSION)
}
}
- return getSelectedFiles(context, requestCode, Activity.RESULT_OK, data)
+ return getSelectedFiles(context, data)
}
/**
@@ -75,19 +72,11 @@ abstract class Picker(open val requestCode: Int) {
abstract fun createIntent(): Intent
/**
- * Start Storage Access Framework UI by using an Activity.
- * @param activity Activity to handle onActivityResult().
+ * Start Storage Access Framework UI by using a ActivityResultLauncher.
+ * @param activityResultLauncher to handle the result.
*/
- fun startWith(activity: Activity) {
- activity.startActivityForResult(createIntent().apply { addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) }, requestCode)
- }
-
- /**
- * Start Storage Access Framework UI by using a Fragment.
- * @param fragment Fragment to handle onActivityResult().
- */
- fun startWith(fragment: Fragment) {
- fragment.startActivityForResult(createIntent().apply { addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) }, requestCode)
+ fun startWith(activityResultLauncher: ActivityResultLauncher) {
+ activityResultLauncher.launch(createIntent().apply { addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) })
}
protected fun getSelectedUriList(data: Intent?): List {
diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt
index 965c8e08e0..6b6bc52c1b 100644
--- a/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt
+++ b/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt
@@ -16,80 +16,24 @@
package im.vector.lib.multipicker
-import android.app.Activity
import android.content.Context
import android.content.Intent
-import android.media.MediaMetadataRetriever
-import android.provider.MediaStore
import im.vector.lib.multipicker.entity.MultiPickerVideoType
+import im.vector.lib.multipicker.utils.toMultiPickerVideoType
/**
* Video Picker implementation
*/
-class VideoPicker(override val requestCode: Int) : Picker(requestCode) {
+class VideoPicker : Picker() {
/**
* Call this function from onActivityResult(int, int, Intent).
- * Returns selected video files or empty list if request code is wrong
- * or result code is not Activity.RESULT_OK
- * or user did not select any files.
+ * Returns selected video files or empty list if user did not select any files.
*/
- override fun getSelectedFiles(context: Context, requestCode: Int, resultCode: Int, data: Intent?): List {
- if (requestCode != this.requestCode && resultCode != Activity.RESULT_OK) {
- return emptyList()
+ override fun getSelectedFiles(context: Context, data: Intent?): List {
+ return getSelectedUriList(data).mapNotNull { selectedUri ->
+ selectedUri.toMultiPickerVideoType(context)
}
-
- val videoList = mutableListOf()
-
- getSelectedUriList(data).forEach { selectedUri ->
- val projection = arrayOf(
- MediaStore.Video.Media.DISPLAY_NAME,
- MediaStore.Video.Media.SIZE
- )
-
- context.contentResolver.query(
- selectedUri,
- projection,
- null,
- null,
- null
- )?.use { cursor ->
- val nameColumn = cursor.getColumnIndex(MediaStore.Video.Media.DISPLAY_NAME)
- val sizeColumn = cursor.getColumnIndex(MediaStore.Video.Media.SIZE)
-
- if (cursor.moveToNext()) {
- val name = cursor.getString(nameColumn)
- val size = cursor.getLong(sizeColumn)
- var duration = 0L
- var width = 0
- var height = 0
- var orientation = 0
-
- context.contentResolver.openFileDescriptor(selectedUri, "r")?.use { pfd ->
- val mediaMetadataRetriever = MediaMetadataRetriever()
- mediaMetadataRetriever.setDataSource(pfd.fileDescriptor)
- duration = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION).toLong()
- width = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH).toInt()
- height = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT).toInt()
- orientation = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION).toInt()
- }
-
- videoList.add(
- MultiPickerVideoType(
- name,
- size,
- context.contentResolver.getType(selectedUri),
- selectedUri,
- width,
- height,
- orientation,
- duration
- )
- )
- }
- }
- }
- return videoList
}
override fun createIntent(): Intent {
diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/entity/MultiPickerAudioType.kt b/multipicker/src/main/java/im/vector/lib/multipicker/entity/MultiPickerAudioType.kt
index a779923d46..4d0f14fbfa 100644
--- a/multipicker/src/main/java/im/vector/lib/multipicker/entity/MultiPickerAudioType.kt
+++ b/multipicker/src/main/java/im/vector/lib/multipicker/entity/MultiPickerAudioType.kt
@@ -23,5 +23,6 @@ data class MultiPickerAudioType(
override val size: Long,
override val mimeType: String?,
override val contentUri: Uri,
- val duration: Long
+ val duration: Long,
+ var waveform: List