diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml
index 91352bb27b..a88a5faa9d 100644
--- a/.github/workflows/danger.yml
+++ b/.github/workflows/danger.yml
@@ -11,7 +11,7 @@ jobs:
- run: |
npm install --save-dev @babel/plugin-transform-flow-strip-types
- name: Danger
- uses: danger/danger-js@11.2.2
+ uses: danger/danger-js@11.2.3
with:
args: "--dangerfile ./tools/danger/dangerfile.js"
env:
diff --git a/.github/workflows/maestro.yml b/.github/workflows/maestro.yml
index 0b9939b133..486094760e 100644
--- a/.github/workflows/maestro.yml
+++ b/.github/workflows/maestro.yml
@@ -25,7 +25,7 @@ jobs:
- uses: actions/checkout@v3
- name: Assemble debug APK
run: ./gradlew assembleDebug $CI_GRADLE_ARG_PROPERTIES
- - uses: mobile-dev-inc/action-maestro-cloud@v1.1.1
+ - uses: mobile-dev-inc/action-maestro-cloud@v1.2.3
with:
api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }}
app-file: app/build/outputs/apk/debug/app-debug.apk
diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml
index 47400648a5..78c407cde1 100644
--- a/.github/workflows/quality.yml
+++ b/.github/workflows/quality.yml
@@ -37,7 +37,7 @@ jobs:
yarn add danger-plugin-lint-report --dev
- name: Danger lint
if: always()
- uses: danger/danger-js@11.2.2
+ uses: danger/danger-js@11.2.3
with:
args: "--dangerfile ./tools/danger/dangerfile-lint.js"
env:
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 678a4268af..f4a12c9ec2 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -23,6 +23,17 @@ jobs:
- uses: actions/checkout@v3
- name: Run tests
run: ./gradlew test $CI_GRADLE_ARG_PROPERTIES
+ - name: Generate kover report
+ if: always()
+ run: ./gradlew koverMergedReport $CI_GRADLE_ARG_PROPERTIES
+
+ - name: Archive kover report
+ if: always()
+ uses: actions/upload-artifact@v3
+ with:
+ name: kover-results
+ path: |
+ **/build/reports/kover/merged
- name: Archive test results on error
if: failure()
@@ -32,3 +43,17 @@ jobs:
path: |
**/out/failures/
**/build/reports/tests/*UnitTest/
+
+ - name: Publish results to Sonar
+ env:
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
+ ORG_GRADLE_PROJECT_SONAR_LOGIN: ${{ secrets.SONAR_TOKEN }}
+ if: ${{ always() && env.SONAR_TOKEN != '' && env.ORG_GRADLE_PROJECT_SONAR_LOGIN != '' }}
+ run: ./gradlew sonar $CI_GRADLE_ARG_PROPERTIES
+
+ # https://github.com/codecov/codecov-action
+ - name: Upload coverage reports to codecov
+ if: always()
+ uses: codecov/codecov-action@v3
+ # with:
+ # files: build/reports/kover/merged/xml/report.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index fb7f4a8a46..7d1c62f24e 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,6 +1,8 @@
-
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 54d5acd7d7..55ded342f7 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/README.md b/README.md
index 2b3385c34b..6406ffbb6b 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,11 @@
+[](https://github.com/vector-im/element-x-android/actions/workflows/build.yml?query=branch%3Adevelop)
+[](https://sonarcloud.io/summary/new_code?id=vector-im_element-x-android)
+[](https://sonarcloud.io/summary/new_code?id=vector-im_element-x-android)
+[](https://sonarcloud.io/summary/new_code?id=vector-im_element-x-android)
+[](https://codecov.io/github/vector-im/element-x-android)
+[](https://matrix.to/#/#element-android:matrix.org)
+[](https://translate.element.io/engage/element-android/?utm_source=widget)
+
# element-x-android
ElementX Android is a [Matrix](https://matrix.org/) Android Client provided by [Element](https://element.io/).
diff --git a/anvilannotations/src/main/kotlin/io/element/android/x/anvilannotations/ContributesNode.kt b/anvilannotations/src/main/kotlin/io/element/android/anvilannotations/ContributesNode.kt
similarity index 95%
rename from anvilannotations/src/main/kotlin/io/element/android/x/anvilannotations/ContributesNode.kt
rename to anvilannotations/src/main/kotlin/io/element/android/anvilannotations/ContributesNode.kt
index 1367dc0dc7..cf9f2f3684 100644
--- a/anvilannotations/src/main/kotlin/io/element/android/x/anvilannotations/ContributesNode.kt
+++ b/anvilannotations/src/main/kotlin/io/element/android/anvilannotations/ContributesNode.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.anvilannotations
+package io.element.android.anvilannotations
import kotlin.reflect.KClass
diff --git a/anvilcodegen/build.gradle.kts b/anvilcodegen/build.gradle.kts
index da817a5edb..e8b6ab285c 100644
--- a/anvilcodegen/build.gradle.kts
+++ b/anvilcodegen/build.gradle.kts
@@ -22,7 +22,7 @@ plugins {
}
dependencies {
- implementation(project(":anvilannotations"))
+ implementation(projects.anvilannotations)
api(libs.anvil.compiler.api)
implementation(libs.anvil.compiler.utils)
implementation("com.squareup:kotlinpoet:1.12.0")
diff --git a/anvilcodegen/src/main/kotlin/io/element/android/x/anvilcodegen/ContributesNodeCodeGenerator.kt b/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeCodeGenerator.kt
similarity index 96%
rename from anvilcodegen/src/main/kotlin/io/element/android/x/anvilcodegen/ContributesNodeCodeGenerator.kt
rename to anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeCodeGenerator.kt
index 0ca9da53af..576a52df89 100644
--- a/anvilcodegen/src/main/kotlin/io/element/android/x/anvilcodegen/ContributesNodeCodeGenerator.kt
+++ b/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeCodeGenerator.kt
@@ -16,7 +16,7 @@
@file:OptIn(ExperimentalAnvilApi::class)
-package io.element.android.x.anvilcodegen
+package io.element.android.anvilcodegen
import com.google.auto.service.AutoService
import com.squareup.anvil.annotations.ContributesTo
@@ -46,7 +46,7 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import dagger.multibindings.IntoMap
-import io.element.android.x.anvilannotations.ContributesNode
+import io.element.android.anvilannotations.ContributesNode
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile
@@ -148,7 +148,7 @@ class ContributesNodeCodeGenerator : CodeGenerator {
}
companion object {
- private val assistedNodeFactoryFqName = FqName("io.element.android.x.architecture.AssistedNodeFactory")
- private val nodeKeyFqName = FqName("io.element.android.x.architecture.NodeKey")
+ private val assistedNodeFactoryFqName = FqName("io.element.android.libraries.architecture.AssistedNodeFactory")
+ private val nodeKeyFqName = FqName("io.element.android.libraries.architecture.NodeKey")
}
}
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index a3818bf972..f5a0799676 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,5 +1,3 @@
-
-
/*
* Copyright (c) 2022 New Vector Ltd
*
@@ -164,14 +162,14 @@ knit {
dependencies {
allLibraries()
allFeatures()
- implementation(project(":tests:uitests"))
- implementation(project(":anvilannotations"))
- anvil(project(":anvilcodegen"))
+ implementation(projects.tests.uitests)
+ implementation(projects.anvilannotations)
+ anvil(projects.anvilcodegen)
// https://developer.android.com/studio/write/java8-support#library-desugaring-versions
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.2.2")
implementation(libs.appyx.core)
-
+ implementation(libs.androidx.splash)
implementation(libs.androidx.corektx)
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.activity.compose)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 61a03241a1..aa64ea3f53 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -31,7 +31,8 @@
tools:targetApi="33">
diff --git a/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt b/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt
index 4532276e11..76cf15e660 100644
--- a/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt
+++ b/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt
@@ -18,9 +18,10 @@ package io.element.android.x
import android.app.Application
import androidx.startup.AppInitializer
-import io.element.android.x.di.DaggerComponentOwner
+import io.element.android.libraries.di.DaggerComponentOwner
import io.element.android.x.di.AppComponent
import io.element.android.x.di.DaggerAppComponent
+import io.element.android.x.info.logApplicationInfo
import io.element.android.x.initializer.CrashInitializer
import io.element.android.x.initializer.MatrixInitializer
import io.element.android.x.initializer.TimberInitializer
@@ -40,5 +41,6 @@ class ElementXApplication : Application(), DaggerComponentOwner {
initializeComponent(TimberInitializer::class.java)
initializeComponent(MatrixInitializer::class.java)
}
+ logApplicationInfo()
}
}
diff --git a/app/src/main/kotlin/io/element/android/x/MainActivity.kt b/app/src/main/kotlin/io/element/android/x/MainActivity.kt
index 2630c78c7e..ebd9494017 100644
--- a/app/src/main/kotlin/io/element/android/x/MainActivity.kt
+++ b/app/src/main/kotlin/io/element/android/x/MainActivity.kt
@@ -22,20 +22,23 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.ui.Modifier
+import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.WindowCompat
import com.bumble.appyx.core.integration.NodeHost
import com.bumble.appyx.core.integrationpoint.NodeComponentActivity
-import io.element.android.x.architecture.bindings
-import io.element.android.x.di.DaggerComponentOwner
-import io.element.android.x.designsystem.ElementXTheme
+import io.element.android.libraries.architecture.bindings
+import io.element.android.libraries.designsystem.ElementXTheme
+import io.element.android.libraries.di.DaggerComponentOwner
import io.element.android.x.di.AppBindings
import io.element.android.x.node.RootFlowNode
class MainActivity : NodeComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
+ installSplashScreen()
super.onCreate(savedInstanceState)
val appBindings = bindings()
+ appBindings.matrixClientsHolder().restore(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
setContent {
ElementXTheme {
@@ -48,11 +51,17 @@ class MainActivity : NodeComponentActivity() {
buildContext = it,
appComponentOwner = applicationContext as DaggerComponentOwner,
authenticationService = appBindings.authenticationService(),
- rootPresenter = appBindings.rootPresenter()
+ presenter = appBindings.rootPresenter(),
+ matrixClientsHolder = appBindings.matrixClientsHolder()
)
}
}
}
}
}
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ bindings().matrixClientsHolder().onSaveInstanceState(outState)
+ }
}
diff --git a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt
index 78f40f0322..de8b29682e 100644
--- a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt
@@ -17,13 +17,14 @@
package io.element.android.x.di
import com.squareup.anvil.annotations.ContributesTo
-import io.element.android.x.matrix.auth.MatrixAuthenticationService
+import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.matrix.auth.MatrixAuthenticationService
import io.element.android.x.root.RootPresenter
import kotlinx.coroutines.CoroutineScope
@ContributesTo(AppScope::class)
interface AppBindings {
- fun coroutineScope(): CoroutineScope
fun rootPresenter(): RootPresenter
fun authenticationService(): MatrixAuthenticationService
+ fun matrixClientsHolder(): MatrixClientsHolder
}
diff --git a/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt b/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt
index 342c18e3a4..ded3c333d7 100644
--- a/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt
@@ -20,7 +20,10 @@ import android.content.Context
import com.squareup.anvil.annotations.MergeComponent
import dagger.BindsInstance
import dagger.Component
-import io.element.android.x.architecture.NodeFactoriesBindings
+import io.element.android.libraries.architecture.NodeFactoriesBindings
+import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.di.ApplicationContext
+import io.element.android.libraries.di.SingleIn
@SingleIn(AppScope::class)
@MergeComponent(AppScope::class)
diff --git a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt
index c1b3ff42e7..7cb3fb55c3 100644
--- a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt
@@ -20,7 +20,10 @@ import android.content.Context
import com.squareup.anvil.annotations.ContributesTo
import dagger.Module
import dagger.Provides
-import io.element.android.x.core.coroutine.CoroutineDispatchers
+import io.element.android.libraries.core.coroutine.CoroutineDispatchers
+import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.di.ApplicationContext
+import io.element.android.libraries.di.SingleIn
import kotlinx.coroutines.CoroutineName
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
diff --git a/app/src/main/kotlin/io/element/android/x/di/MatrixClientsHolder.kt b/app/src/main/kotlin/io/element/android/x/di/MatrixClientsHolder.kt
new file mode 100644
index 0000000000..22dfe8a3ef
--- /dev/null
+++ b/app/src/main/kotlin/io/element/android/x/di/MatrixClientsHolder.kt
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.x.di
+
+import android.os.Bundle
+import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.di.SingleIn
+import io.element.android.libraries.matrix.MatrixClient
+import io.element.android.libraries.matrix.auth.MatrixAuthenticationService
+import io.element.android.libraries.matrix.core.SessionId
+import kotlinx.coroutines.runBlocking
+import timber.log.Timber
+import java.util.concurrent.ConcurrentHashMap
+import javax.inject.Inject
+
+private const val SAVE_INSTANCE_KEY = "io.element.android.x.di.MatrixClientsHolder.SaveInstanceKey"
+
+@SingleIn(AppScope::class)
+class MatrixClientsHolder @Inject constructor(private val authenticationService: MatrixAuthenticationService) {
+
+ private val sessionIdsToMatrixClient = ConcurrentHashMap()
+
+ fun add(matrixClient: MatrixClient) {
+ sessionIdsToMatrixClient[matrixClient.sessionId] = matrixClient
+ }
+
+ fun removeAll() {
+ sessionIdsToMatrixClient.clear()
+ }
+
+ fun remove(sessionId: SessionId) {
+ sessionIdsToMatrixClient.remove(sessionId)
+ }
+
+ fun isEmpty(): Boolean = sessionIdsToMatrixClient.isEmpty()
+
+ fun knowSession(sessionId: SessionId): Boolean = sessionIdsToMatrixClient.containsKey(sessionId)
+
+ fun getOrNull(sessionId: SessionId): MatrixClient? {
+ return sessionIdsToMatrixClient[sessionId]
+ }
+
+ @Suppress("DEPRECATION")
+ fun restore(savedInstanceState: Bundle?) {
+ if (savedInstanceState == null || sessionIdsToMatrixClient.isNotEmpty()) return
+ val sessionIds = savedInstanceState.getSerializable(SAVE_INSTANCE_KEY) as? Array
+ if (sessionIds.isNullOrEmpty()) return
+ // Not ideal but should only happens in case of process recreation. This ensure we restore all the active sessions before restoring the node graphs.
+ runBlocking {
+ sessionIds.forEach { sessionId ->
+ Timber.v("Restore matrix session: $sessionId")
+ val matrixClient = authenticationService.restoreSession(sessionId)
+ if (matrixClient != null) {
+ add(matrixClient)
+ }
+ }
+ }
+ }
+
+ fun onSaveInstanceState(outState: Bundle) {
+ val sessionKeys = sessionIdsToMatrixClient.keys.toTypedArray()
+ Timber.v("Save matrix session keys = $sessionKeys")
+ outState.putSerializable(SAVE_INSTANCE_KEY, sessionKeys)
+ }
+}
diff --git a/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt b/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt
index cfd7eee471..c60eba1575 100644
--- a/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt
@@ -20,8 +20,11 @@ import com.squareup.anvil.annotations.ContributesTo
import com.squareup.anvil.annotations.MergeSubcomponent
import dagger.BindsInstance
import dagger.Subcomponent
-import io.element.android.x.architecture.NodeFactoriesBindings
-import io.element.android.x.matrix.room.MatrixRoom
+import io.element.android.libraries.architecture.NodeFactoriesBindings
+import io.element.android.libraries.di.RoomScope
+import io.element.android.libraries.di.SessionScope
+import io.element.android.libraries.di.SingleIn
+import io.element.android.libraries.matrix.room.MatrixRoom
@SingleIn(RoomScope::class)
@MergeSubcomponent(RoomScope::class)
diff --git a/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt b/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt
index 8da31df8eb..be558f6f63 100644
--- a/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt
@@ -20,8 +20,11 @@ import com.squareup.anvil.annotations.ContributesTo
import com.squareup.anvil.annotations.MergeSubcomponent
import dagger.BindsInstance
import dagger.Subcomponent
-import io.element.android.x.architecture.NodeFactoriesBindings
-import io.element.android.x.matrix.MatrixClient
+import io.element.android.libraries.architecture.NodeFactoriesBindings
+import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.di.SessionScope
+import io.element.android.libraries.di.SingleIn
+import io.element.android.libraries.matrix.MatrixClient
@SingleIn(SessionScope::class)
@MergeSubcomponent(SessionScope::class)
diff --git a/app/src/main/kotlin/io/element/android/x/info/Logs.kt b/app/src/main/kotlin/io/element/android/x/info/Logs.kt
new file mode 100644
index 0000000000..9e96f48e2d
--- /dev/null
+++ b/app/src/main/kotlin/io/element/android/x/info/Logs.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.x.info
+
+import io.element.android.x.BuildConfig
+import timber.log.Timber
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.Locale
+
+fun logApplicationInfo() {
+ val appVersion = buildString {
+ append(BuildConfig.VERSION_NAME)
+ append(" (")
+ append(BuildConfig.VERSION_CODE)
+ append(") - ")
+ append(BuildConfig.BUILD_TYPE)
+ }
+ // TODO Get SDK version somehow
+ val sdkVersion = "SDK VERSION (TODO)"
+ val date = SimpleDateFormat("MM-dd HH:mm:ss.SSSZ", Locale.US).format(Date())
+
+ Timber.d("----------------------------------------------------------------")
+ Timber.d("----------------------------------------------------------------")
+ Timber.d(" Application version: $appVersion")
+ Timber.d(" SDK version: $sdkVersion")
+ Timber.d(" Local time: $date")
+ Timber.d("----------------------------------------------------------------")
+ Timber.d("----------------------------------------------------------------\n\n\n\n")
+}
diff --git a/app/src/main/kotlin/io/element/android/x/initializer/CrashInitializer.kt b/app/src/main/kotlin/io/element/android/x/initializer/CrashInitializer.kt
index df3dcacdbb..fa7e904e72 100644
--- a/app/src/main/kotlin/io/element/android/x/initializer/CrashInitializer.kt
+++ b/app/src/main/kotlin/io/element/android/x/initializer/CrashInitializer.kt
@@ -18,7 +18,7 @@ package io.element.android.x.initializer
import android.content.Context
import androidx.startup.Initializer
-import io.element.android.x.features.rageshake.crash.VectorUncaughtExceptionHandler
+import io.element.android.features.rageshake.crash.VectorUncaughtExceptionHandler
class CrashInitializer : Initializer {
diff --git a/app/src/main/kotlin/io/element/android/x/initializer/MatrixInitializer.kt b/app/src/main/kotlin/io/element/android/x/initializer/MatrixInitializer.kt
index bfcdaea612..9af7738fa8 100644
--- a/app/src/main/kotlin/io/element/android/x/initializer/MatrixInitializer.kt
+++ b/app/src/main/kotlin/io/element/android/x/initializer/MatrixInitializer.kt
@@ -18,9 +18,9 @@ package io.element.android.x.initializer
import android.content.Context
import androidx.startup.Initializer
+import io.element.android.libraries.matrix.tracing.TracingConfigurations
+import io.element.android.libraries.matrix.tracing.setupTracing
import io.element.android.x.BuildConfig
-import io.element.android.x.matrix.tracing.TracingConfigurations
-import io.element.android.x.matrix.tracing.setupTracing
class MatrixInitializer : Initializer {
diff --git a/app/src/main/kotlin/io/element/android/x/initializer/TimberInitializer.kt b/app/src/main/kotlin/io/element/android/x/initializer/TimberInitializer.kt
index 10b7e17ffd..23286c683d 100644
--- a/app/src/main/kotlin/io/element/android/x/initializer/TimberInitializer.kt
+++ b/app/src/main/kotlin/io/element/android/x/initializer/TimberInitializer.kt
@@ -18,8 +18,8 @@ package io.element.android.x.initializer
import android.content.Context
import androidx.startup.Initializer
+import io.element.android.features.rageshake.logs.VectorFileLogger
import io.element.android.x.BuildConfig
-import io.element.android.x.features.rageshake.logs.VectorFileLogger
import timber.log.Timber
class TimberInitializer : Initializer {
diff --git a/app/src/main/kotlin/io/element/android/x/node/BackstackExt.kt b/app/src/main/kotlin/io/element/android/x/node/BackstackExt.kt
new file mode 100644
index 0000000000..0476e50553
--- /dev/null
+++ b/app/src/main/kotlin/io/element/android/x/node/BackstackExt.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.x.node
+
+import com.bumble.appyx.navmodel.backstack.BackStack
+import com.bumble.appyx.navmodel.backstack.operation.NewRoot
+
+/**
+ * Don't process NewRoot if the nav target already exists in the stack.
+ */
+fun BackStack.safeRoot(element: T) {
+ val containsRoot = elements.value.any {
+ it.key.navTarget == element
+ }
+ if (containsRoot) return
+ accept(NewRoot(element))
+}
diff --git a/app/src/main/kotlin/io/element/android/x/node/LoggedInFlowNode.kt b/app/src/main/kotlin/io/element/android/x/node/LoggedInFlowNode.kt
index 8a5a967875..b2e2aca077 100644
--- a/app/src/main/kotlin/io/element/android/x/node/LoggedInFlowNode.kt
+++ b/app/src/main/kotlin/io/element/android/x/node/LoggedInFlowNode.kt
@@ -32,16 +32,17 @@ import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.core.node.node
import com.bumble.appyx.navmodel.backstack.BackStack
import com.bumble.appyx.navmodel.backstack.operation.push
-import io.element.android.x.architecture.bindings
-import io.element.android.x.architecture.createNode
-import io.element.android.x.di.DaggerComponentOwner
+import io.element.android.features.preferences.PreferencesFlowNode
+import io.element.android.features.roomlist.RoomListNode
+import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler
+import io.element.android.libraries.architecture.bindings
+import io.element.android.libraries.architecture.createNode
+import io.element.android.libraries.di.DaggerComponentOwner
+import io.element.android.libraries.matrix.MatrixClient
+import io.element.android.libraries.matrix.core.RoomId
+import io.element.android.libraries.matrix.core.SessionId
+import io.element.android.libraries.matrix.ui.di.MatrixUIBindings
import io.element.android.x.di.SessionComponent
-import io.element.android.x.features.preferences.PreferencesFlowNode
-import io.element.android.x.features.roomlist.RoomListNode
-import io.element.android.x.matrix.MatrixClient
-import io.element.android.x.matrix.core.RoomId
-import io.element.android.x.matrix.core.SessionId
-import io.element.android.x.matrix.ui.di.MatrixUIBindings
import kotlinx.parcelize.Parcelize
class LoggedInFlowNode(
@@ -124,6 +125,11 @@ class LoggedInFlowNode(
@Composable
override fun View(modifier: Modifier) {
- Children(navModel = backstack)
+ Children(
+ navModel = backstack,
+ modifier = modifier,
+ // Animate navigation to settings and to a room
+ transitionHandler = rememberDefaultTransitionHandler(),
+ )
}
}
diff --git a/app/src/main/kotlin/io/element/android/x/node/NotLoggedInFlowNode.kt b/app/src/main/kotlin/io/element/android/x/node/NotLoggedInFlowNode.kt
index 3c619c5e38..b9e38d1063 100644
--- a/app/src/main/kotlin/io/element/android/x/node/NotLoggedInFlowNode.kt
+++ b/app/src/main/kotlin/io/element/android/x/node/NotLoggedInFlowNode.kt
@@ -26,9 +26,10 @@ import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.core.node.node
import com.bumble.appyx.navmodel.backstack.BackStack
-import com.bumble.appyx.navmodel.backstack.operation.replace
-import io.element.android.x.features.login.LoginFlowNode
-import io.element.android.x.features.onboarding.OnBoardingScreen
+import com.bumble.appyx.navmodel.backstack.operation.push
+import io.element.android.features.login.LoginFlowNode
+import io.element.android.features.onboarding.OnBoardingScreen
+import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler
import kotlinx.parcelize.Parcelize
import timber.log.Timber
@@ -62,7 +63,7 @@ class NotLoggedInFlowNode(
return when (navTarget) {
NavTarget.OnBoarding -> node(buildContext) {
OnBoardingScreen(
- onSignIn = { backstack.replace(NavTarget.LoginFlow) }
+ onSignIn = { backstack.push(NavTarget.LoginFlow) }
)
}
NavTarget.LoginFlow -> LoginFlowNode(buildContext)
@@ -71,6 +72,11 @@ class NotLoggedInFlowNode(
@Composable
override fun View(modifier: Modifier) {
- Children(navModel = backstack)
+ Children(
+ navModel = backstack,
+ modifier = modifier,
+ // Animate navigation to login screen
+ transitionHandler = rememberDefaultTransitionHandler(),
+ )
}
}
diff --git a/app/src/main/kotlin/io/element/android/x/node/RoomFlowNode.kt b/app/src/main/kotlin/io/element/android/x/node/RoomFlowNode.kt
index 9db5f5cfb5..bae60841d6 100644
--- a/app/src/main/kotlin/io/element/android/x/node/RoomFlowNode.kt
+++ b/app/src/main/kotlin/io/element/android/x/node/RoomFlowNode.kt
@@ -25,12 +25,12 @@ import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.navmodel.backstack.BackStack
-import io.element.android.x.architecture.bindings
-import io.element.android.x.architecture.createNode
-import io.element.android.x.di.DaggerComponentOwner
+import io.element.android.features.messages.MessagesNode
+import io.element.android.libraries.architecture.bindings
+import io.element.android.libraries.architecture.createNode
+import io.element.android.libraries.di.DaggerComponentOwner
+import io.element.android.libraries.matrix.room.MatrixRoom
import io.element.android.x.di.RoomComponent
-import io.element.android.x.features.messages.MessagesNode
-import io.element.android.x.matrix.room.MatrixRoom
import kotlinx.parcelize.Parcelize
import timber.log.Timber
@@ -70,6 +70,9 @@ class RoomFlowNode(
@Composable
override fun View(modifier: Modifier) {
- Children(navModel = backstack)
+ Children(
+ navModel = backstack,
+ modifier = modifier,
+ )
}
}
diff --git a/app/src/main/kotlin/io/element/android/x/node/RootFlowNode.kt b/app/src/main/kotlin/io/element/android/x/node/RootFlowNode.kt
index 9dee857470..ae3c31008d 100644
--- a/app/src/main/kotlin/io/element/android/x/node/RootFlowNode.kt
+++ b/app/src/main/kotlin/io/element/android/x/node/RootFlowNode.kt
@@ -21,13 +21,10 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.collectAsState
-import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.lifecycle.lifecycleScope
import com.bumble.appyx.core.composable.Children
-import com.bumble.appyx.core.lifecycle.subscribe
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.node.ParentNode
@@ -36,13 +33,13 @@ import com.bumble.appyx.navmodel.backstack.BackStack
import com.bumble.appyx.navmodel.backstack.operation.newRoot
import com.bumble.appyx.navmodel.backstack.operation.pop
import com.bumble.appyx.navmodel.backstack.operation.push
-import io.element.android.x.architecture.createNode
-import io.element.android.x.architecture.presenterConnector
-import io.element.android.x.di.DaggerComponentOwner
-import io.element.android.x.features.rageshake.bugreport.BugReportNode
-import io.element.android.x.matrix.MatrixClient
-import io.element.android.x.matrix.auth.MatrixAuthenticationService
-import io.element.android.x.matrix.core.SessionId
+import io.element.android.features.rageshake.bugreport.BugReportNode
+import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler
+import io.element.android.libraries.architecture.createNode
+import io.element.android.libraries.di.DaggerComponentOwner
+import io.element.android.libraries.matrix.auth.MatrixAuthenticationService
+import io.element.android.libraries.matrix.core.SessionId
+import io.element.android.x.di.MatrixClientsHolder
import io.element.android.x.root.RootPresenter
import io.element.android.x.root.RootView
import kotlinx.coroutines.flow.distinctUntilChanged
@@ -50,66 +47,96 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.parcelize.Parcelize
import timber.log.Timber
-import java.util.concurrent.ConcurrentHashMap
class RootFlowNode(
- buildContext: BuildContext,
+ private val buildContext: BuildContext,
private val backstack: BackStack = BackStack(
initialElement = NavTarget.SplashScreen,
savedStateMap = buildContext.savedStateMap,
),
private val appComponentOwner: DaggerComponentOwner,
private val authenticationService: MatrixAuthenticationService,
- rootPresenter: RootPresenter
+ private val matrixClientsHolder: MatrixClientsHolder,
+ private val presenter: RootPresenter
) :
ParentNode(
navModel = backstack,
- buildContext = buildContext,
+ buildContext = buildContext
),
DaggerComponentOwner by appComponentOwner {
- private val matrixClientsHolder = ConcurrentHashMap()
- private val presenterConnector = presenterConnector(rootPresenter)
-
override fun onBuilt() {
super.onBuilt()
- whenChildAttached(LoggedInFlowNode::class) { _, child ->
- child.lifecycle.subscribe(
- onDestroy = { matrixClientsHolder.remove(child.sessionId) }
- )
- }
+ observeLoggedInState()
+ }
+
+ private fun observeLoggedInState() {
authenticationService.isLoggedIn()
.distinctUntilChanged()
.onEach { isLoggedIn ->
Timber.v("isLoggedIn=$isLoggedIn")
if (isLoggedIn) {
- val matrixClient = authenticationService.restoreSession()
- if (matrixClient == null) {
- backstack.newRoot(NavTarget.NotLoggedInFlow)
- } else {
- matrixClientsHolder[matrixClient.sessionId] = matrixClient
- backstack.newRoot(NavTarget.LoggedInFlow(matrixClient.sessionId))
- }
+ tryToRestoreLatestSession(
+ onSuccess = { switchToLoggedInFlow(it) },
+ onFailure = { switchToLogoutFlow() }
+ )
} else {
- backstack.newRoot(NavTarget.NotLoggedInFlow)
+ switchToLogoutFlow()
}
}
.launchIn(lifecycleScope)
}
+ private fun switchToLoggedInFlow(sessionId: SessionId) {
+ backstack.safeRoot(NavTarget.LoggedInFlow(sessionId = sessionId))
+ }
+
+ private fun switchToLogoutFlow() {
+ matrixClientsHolder.removeAll()
+ backstack.safeRoot(NavTarget.NotLoggedInFlow)
+ }
+
+ private suspend fun tryToRestoreLatestSession(
+ onSuccess: (SessionId) -> Unit = {},
+ onFailure: () -> Unit = {}
+ ) {
+ val latestKnownSessionId = authenticationService.getLatestSessionId()
+ if (latestKnownSessionId == null) {
+ onFailure()
+ return
+ }
+ if (matrixClientsHolder.knowSession(latestKnownSessionId)) {
+ onSuccess(latestKnownSessionId)
+ return
+ }
+ val matrixClient = authenticationService.restoreSession(latestKnownSessionId)
+ if (matrixClient == null) {
+ Timber.v("Failed to restore session...")
+ onFailure()
+ } else {
+ matrixClientsHolder.add(matrixClient)
+ onSuccess(matrixClient.sessionId)
+ }
+ }
+
private fun onOpenBugReport() {
backstack.push(NavTarget.BugReport)
}
@Composable
override fun View(modifier: Modifier) {
- val state by presenterConnector.stateFlow.collectAsState()
+ val state = presenter.present()
RootView(
state = state,
+ modifier = modifier,
onOpenBugReport = this::onOpenBugReport,
) {
- Children(navModel = backstack)
+ Children(
+ navModel = backstack,
+ // Animate opening the bug report screen
+ transitionHandler = rememberDefaultTransitionHandler(),
+ )
}
}
@@ -136,8 +163,10 @@ class RootFlowNode(
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
return when (navTarget) {
is NavTarget.LoggedInFlow -> {
- val matrixClient =
- matrixClientsHolder[navTarget.sessionId] ?: throw IllegalStateException("Makes sure to give a matrixClient with the given sessionId")
+ val matrixClient = matrixClientsHolder.getOrNull(navTarget.sessionId) ?: return splashNode(buildContext).also {
+ Timber.w("Couldn't find any session, go through SplashScreen")
+ backstack.newRoot(NavTarget.SplashScreen)
+ }
LoggedInFlowNode(
buildContext = buildContext,
sessionId = navTarget.sessionId,
@@ -146,12 +175,14 @@ class RootFlowNode(
)
}
NavTarget.NotLoggedInFlow -> NotLoggedInFlowNode(buildContext)
- NavTarget.SplashScreen -> node(buildContext) {
- Box(modifier = it.fillMaxSize(), contentAlignment = Alignment.Center) {
- CircularProgressIndicator()
- }
- }
+ NavTarget.SplashScreen -> splashNode(buildContext)
NavTarget.BugReport -> createNode(buildContext, plugins = listOf(bugReportNodeCallback))
}
}
+
+ private fun splashNode(buildContext: BuildContext) = node(buildContext) {
+ Box(modifier = it.fillMaxSize(), contentAlignment = Alignment.Center) {
+ CircularProgressIndicator()
+ }
+ }
}
diff --git a/app/src/main/kotlin/io/element/android/x/root/RootPresenter.kt b/app/src/main/kotlin/io/element/android/x/root/RootPresenter.kt
index 2bcf49505a..63881df5ae 100644
--- a/app/src/main/kotlin/io/element/android/x/root/RootPresenter.kt
+++ b/app/src/main/kotlin/io/element/android/x/root/RootPresenter.kt
@@ -19,10 +19,10 @@ package io.element.android.x.root
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.features.rageshake.bugreport.BugReportPresenter
-import io.element.android.x.features.rageshake.crash.ui.CrashDetectionPresenter
-import io.element.android.x.features.rageshake.detection.RageshakeDetectionPresenter
+import io.element.android.features.rageshake.bugreport.BugReportPresenter
+import io.element.android.features.rageshake.crash.ui.CrashDetectionPresenter
+import io.element.android.features.rageshake.detection.RageshakeDetectionPresenter
+import io.element.android.libraries.architecture.Presenter
import javax.inject.Inject
class RootPresenter @Inject constructor(
diff --git a/app/src/main/kotlin/io/element/android/x/root/RootState.kt b/app/src/main/kotlin/io/element/android/x/root/RootState.kt
index 6a062d2925..6d516c5c70 100644
--- a/app/src/main/kotlin/io/element/android/x/root/RootState.kt
+++ b/app/src/main/kotlin/io/element/android/x/root/RootState.kt
@@ -17,9 +17,9 @@
package io.element.android.x.root
import androidx.compose.runtime.Stable
-import io.element.android.x.features.rageshake.bugreport.BugReportState
-import io.element.android.x.features.rageshake.crash.ui.CrashDetectionState
-import io.element.android.x.features.rageshake.detection.RageshakeDetectionState
+import io.element.android.features.rageshake.bugreport.BugReportState
+import io.element.android.features.rageshake.crash.ui.CrashDetectionState
+import io.element.android.features.rageshake.detection.RageshakeDetectionState
@Stable
data class RootState(
diff --git a/app/src/main/kotlin/io/element/android/x/root/RootView.kt b/app/src/main/kotlin/io/element/android/x/root/RootView.kt
index b767fb164f..f8cbdea24f 100644
--- a/app/src/main/kotlin/io/element/android/x/root/RootView.kt
+++ b/app/src/main/kotlin/io/element/android/x/root/RootView.kt
@@ -24,12 +24,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
+import io.element.android.features.rageshake.crash.ui.CrashDetectionEvents
+import io.element.android.features.rageshake.crash.ui.CrashDetectionView
+import io.element.android.features.rageshake.detection.RageshakeDetectionEvents
+import io.element.android.features.rageshake.detection.RageshakeDetectionView
+import io.element.android.tests.uitests.openShowkase
import io.element.android.x.component.ShowkaseButton
-import io.element.android.x.features.rageshake.crash.ui.CrashDetectionEvents
-import io.element.android.x.features.rageshake.crash.ui.CrashDetectionView
-import io.element.android.x.features.rageshake.detection.RageshakeDetectionEvents
-import io.element.android.x.features.rageshake.detection.RageshakeDetectionView
-import io.element.android.x.tests.uitests.openShowkase
@Composable
fun RootView(
diff --git a/app/src/main/res/drawable/splash_icon.xml b/app/src/main/res/drawable/splash_icon.xml
new file mode 100644
index 0000000000..9b852a657f
--- /dev/null
+++ b/app/src/main/res/drawable/splash_icon.xml
@@ -0,0 +1,8 @@
+
+
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000000..6763f9b016
--- /dev/null
+++ b/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index e75bc2cc4d..3d52c58e26 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -16,6 +16,10 @@
-->
-
+
diff --git a/build.gradle.kts b/build.gradle.kts
index fa9822913a..f2f16714ea 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -29,6 +29,8 @@ plugins {
alias(libs.plugins.detekt)
alias(libs.plugins.ktlint)
alias(libs.plugins.dependencygraph)
+ alias(libs.plugins.sonarqube)
+ alias(libs.plugins.kover)
}
tasks.register("clean").configure {
@@ -108,3 +110,68 @@ allprojects {
plugin("org.owasp.dependencycheck")
}
}
+
+// To run a sonar analysis:
+// Run './gradlew sonar -Dsonar.login='
+// The SONAR_LOGIN is stored in passbolt as Token Sonar Cloud Bma
+// Sonar result can be found here: https://sonarcloud.io/project/overview?id=vector-im_element-x-android
+sonar {
+ properties {
+ property("sonar.projectName", "element-x-android")
+ property("sonar.projectKey", "vector-im_element-x-android")
+ property("sonar.host.url", "https://sonarcloud.io")
+ property("sonar.projectVersion", "1.0") // TODO project(":app").android.defaultConfig.versionName)
+ property("sonar.sourceEncoding", "UTF-8")
+ property("sonar.links.homepage", "https://github.com/vector-im/element-x-android/")
+ property("sonar.links.ci", "https://github.com/vector-im/element-x-android/actions")
+ property("sonar.links.scm", "https://github.com/vector-im/element-x-android/")
+ property("sonar.links.issue", "https://github.com/vector-im/element-x-android/issues")
+ property("sonar.organization", "new_vector_ltd_organization")
+ property("sonar.login", if (project.hasProperty("SONAR_LOGIN")) project.property("SONAR_LOGIN")!! else "invalid")
+
+ // exclude source code from analyses separated by a colon (:)
+ // Exclude Java source
+ property("sonar.exclusions", "**/BugReporterMultipartBody.java")
+ }
+}
+
+allprojects {
+ val projectDir = projectDir.toString()
+ sonar {
+ properties {
+ // Note: folders `kotlin` are not supported (yet), I asked on their side: https://community.sonarsource.com/t/82824
+ // As a workaround provide the path in `sonar.sources` property.
+ if (File("$projectDir/src/main/kotlin").exists()) {
+ property("sonar.sources", "src/main/kotlin")
+ }
+ if (File("$projectDir/src/test/kotlin").exists()) {
+ property("sonar.tests", "src/test/kotlin")
+ }
+ }
+ }
+}
+
+allprojects {
+ apply(plugin = "kover")
+}
+
+// Run `./gradlew koverMergedHtmlReport` to get report at ./build/reports/kover
+// Run `./gradlew koverMergedReport` to also get XML report
+koverMerged {
+ enable()
+
+ filters {
+ classes {
+ excludes.addAll(
+ listOf(
+ /*
+ "*Fragment",
+ "*Fragment\$*",
+ "*Activity",
+ "*Activity\$*",
+ */
+ )
+ )
+ }
+ }
+}
diff --git a/features/login/build.gradle.kts b/features/login/build.gradle.kts
index 623477f727..c181d3b75e 100644
--- a/features/login/build.gradle.kts
+++ b/features/login/build.gradle.kts
@@ -24,7 +24,7 @@ plugins {
}
android {
- namespace = "io.element.android.x.features.login"
+ namespace = "io.element.android.features.login"
}
anvil {
@@ -32,16 +32,15 @@ anvil {
}
dependencies {
- implementation(project(":anvilannotations"))
- anvil(project(":anvilcodegen"))
- implementation(project(":libraries:di"))
- implementation(project(":libraries:core"))
- implementation(project(":libraries:architecture"))
- implementation(project(":libraries:matrix"))
- implementation(project(":libraries:designsystem"))
- implementation(project(":libraries:elementresources"))
- implementation(libs.appyx.core)
- implementation(project(":libraries:ui-strings"))
+ implementation(projects.anvilannotations)
+ anvil(projects.anvilcodegen)
+ implementation(projects.libraries.core)
+ implementation(projects.libraries.architecture)
+ implementation(projects.libraries.matrix)
+ implementation(projects.libraries.designsystem)
+ implementation(projects.libraries.elementresources)
+ implementation(projects.libraries.testtags)
+ implementation(projects.libraries.uiStrings)
ksp(libs.showkase.processor)
testImplementation(libs.test.junit)
androidTestImplementation(libs.test.junitext)
diff --git a/features/login/src/androidTest/kotlin/io/element/android/x/features/login/ExampleInstrumentedTest.kt b/features/login/src/androidTest/kotlin/io/element/android/features/login/ExampleInstrumentedTest.kt
similarity index 89%
rename from features/login/src/androidTest/kotlin/io/element/android/x/features/login/ExampleInstrumentedTest.kt
rename to features/login/src/androidTest/kotlin/io/element/android/features/login/ExampleInstrumentedTest.kt
index 88ae6c4133..4ad31d222f 100644
--- a/features/login/src/androidTest/kotlin/io/element/android/x/features/login/ExampleInstrumentedTest.kt
+++ b/features/login/src/androidTest/kotlin/io/element/android/features/login/ExampleInstrumentedTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.login
+package io.element.android.features.login
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
@@ -33,6 +33,6 @@ class ExampleInstrumentedTest {
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
- assertEquals("io.element.android.x.features.login.test", appContext.packageName)
+ assertEquals("io.element.android.features.login.test", appContext.packageName)
}
}
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/LoginFlowNode.kt b/features/login/src/main/kotlin/io/element/android/features/login/LoginFlowNode.kt
similarity index 79%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/LoginFlowNode.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/LoginFlowNode.kt
index 12aa0887f2..641435642d 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/LoginFlowNode.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/LoginFlowNode.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.login
+package io.element.android.features.login
import android.os.Parcelable
import androidx.compose.runtime.Composable
@@ -25,9 +25,10 @@ import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.navmodel.backstack.BackStack
import com.bumble.appyx.navmodel.backstack.operation.push
-import io.element.android.x.architecture.createNode
-import io.element.android.x.features.login.changeserver.ChangeServerNode
-import io.element.android.x.features.login.root.LoginRootNode
+import io.element.android.features.login.changeserver.ChangeServerNode
+import io.element.android.features.login.root.LoginRootNode
+import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler
+import io.element.android.libraries.architecture.createNode
import kotlinx.parcelize.Parcelize
class LoginFlowNode(
@@ -64,6 +65,11 @@ class LoginFlowNode(
@Composable
override fun View(modifier: Modifier) {
- Children(navModel = backstack)
+ Children(
+ navModel = backstack,
+ modifier = modifier,
+ // Animate transition to change server screen
+ transitionHandler = rememberDefaultTransitionHandler(),
+ )
}
}
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerEvents.kt b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerEvents.kt
similarity index 92%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerEvents.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerEvents.kt
index 78e4e64ffd..70b57b5038 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerEvents.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerEvents.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.login.changeserver
+package io.element.android.features.login.changeserver
sealed interface ChangeServerEvents {
data class SetServer(val server: String) : ChangeServerEvents
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerNode.kt b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerNode.kt
similarity index 75%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerNode.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerNode.kt
index 2e20380182..232b0a6497 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerNode.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerNode.kt
@@ -14,20 +14,17 @@
* limitations under the License.
*/
-package io.element.android.x.features.login.changeserver
+package io.element.android.features.login.changeserver
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.collectAsState
-import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
-import io.element.android.x.anvilannotations.ContributesNode
-import io.element.android.x.architecture.presenterConnector
-import io.element.android.x.di.AppScope
+import io.element.android.anvilannotations.ContributesNode
+import io.element.android.libraries.di.AppScope
@ContributesNode(AppScope::class)
class ChangeServerNode @AssistedInject constructor(
@@ -36,17 +33,16 @@ class ChangeServerNode @AssistedInject constructor(
private val presenter: ChangeServerPresenter,
) : Node(buildContext, plugins = plugins) {
- private val presenterConnector = presenterConnector(presenter)
-
private fun onSuccess() {
navigateUp()
}
@Composable
override fun View(modifier: Modifier) {
- val state by presenterConnector.stateFlow.collectAsState()
+ val state = presenter.present()
ChangeServerView(
state = state,
+ modifier = modifier,
onChangeServerSuccess = this::onSuccess,
)
}
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerPresenter.kt b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerPresenter.kt
similarity index 88%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerPresenter.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerPresenter.kt
index 13259baf42..038d2ecea1 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerPresenter.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerPresenter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.login.changeserver
+package io.element.android.features.login.changeserver
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
@@ -22,10 +22,10 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
-import io.element.android.x.architecture.Async
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.architecture.execute
-import io.element.android.x.matrix.auth.MatrixAuthenticationService
+import io.element.android.libraries.architecture.Async
+import io.element.android.libraries.architecture.Presenter
+import io.element.android.libraries.architecture.execute
+import io.element.android.libraries.matrix.auth.MatrixAuthenticationService
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import javax.inject.Inject
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerState.kt b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerState.kt
similarity index 88%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerState.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerState.kt
index 90dcb8ce64..9c1b9ac7e2 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerState.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerState.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.login.changeserver
+package io.element.android.features.login.changeserver
-import io.element.android.x.architecture.Async
+import io.element.android.libraries.architecture.Async
data class ChangeServerState(
val homeserver: String = "",
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerView.kt b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerView.kt
similarity index 92%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerView.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerView.kt
index 1ac77b16b8..2695163ac4 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/changeserver/ChangeServerView.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/changeserver/ChangeServerView.kt
@@ -16,7 +16,7 @@
@file:OptIn(ExperimentalMaterial3Api::class)
-package io.element.android.x.features.login.changeserver
+package io.element.android.features.login.changeserver
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
@@ -52,11 +52,13 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import io.element.android.x.architecture.Async
-import io.element.android.x.core.compose.textFieldState
-import io.element.android.x.designsystem.components.VectorIcon
-import io.element.android.x.features.login.R
-import io.element.android.x.features.login.error.changeServerError
+import io.element.android.features.login.R
+import io.element.android.features.login.error.changeServerError
+import io.element.android.libraries.architecture.Async
+import io.element.android.libraries.designsystem.components.VectorIcon
+import io.element.android.libraries.designsystem.components.form.textFieldState
+import io.element.android.libraries.testtags.TestTags
+import io.element.android.libraries.testtags.testTag
@Composable
fun ChangeServerView(
@@ -129,6 +131,7 @@ fun ChangeServerView(
value = homeserverFieldState,
modifier = Modifier
.fillMaxWidth()
+ .testTag(TestTags.changeServerServer)
.padding(top = 200.dp),
onValueChange = {
homeserverFieldState = it
@@ -162,6 +165,7 @@ fun ChangeServerView(
enabled = state.submitEnabled,
modifier = Modifier
.fillMaxWidth()
+ .testTag(TestTags.changeServerContinue)
.padding(top = 44.dp)
) {
Text(text = "Continue")
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/error/ErrorFormatter.kt b/features/login/src/main/kotlin/io/element/android/features/login/error/ErrorFormatter.kt
similarity index 86%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/error/ErrorFormatter.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/error/ErrorFormatter.kt
index 3700575b96..6527a3a141 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/error/ErrorFormatter.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/error/ErrorFormatter.kt
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package io.element.android.x.features.login.error
+package io.element.android.features.login.error
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
-import io.element.android.x.core.uri.isValidUrl
-import io.element.android.x.features.login.root.LoginFormState
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.features.login.root.LoginFormState
+import io.element.android.libraries.core.uri.isValidUrl
+import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun loginError(
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootEvents.kt b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootEvents.kt
similarity index 94%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootEvents.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootEvents.kt
index de72602775..623f80abc7 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootEvents.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootEvents.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.login.root
+package io.element.android.features.login.root
sealed interface LoginRootEvents {
object RefreshHomeServer : LoginRootEvents
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootNode.kt b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootNode.kt
similarity index 78%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootNode.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootNode.kt
index eb1f1d304b..f29eb2a7e5 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootNode.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootNode.kt
@@ -14,11 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.login.root
+package io.element.android.features.login.root
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.collectAsState
-import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.lifecycle.Lifecycle
import com.bumble.appyx.core.modality.BuildContext
@@ -27,10 +25,9 @@ import com.bumble.appyx.core.plugin.Plugin
import com.bumble.appyx.core.plugin.plugins
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
-import io.element.android.x.anvilannotations.ContributesNode
-import io.element.android.x.architecture.presenterConnector
-import io.element.android.x.core.compose.OnLifecycleEvent
-import io.element.android.x.di.AppScope
+import io.element.android.anvilannotations.ContributesNode
+import io.element.android.libraries.designsystem.utils.OnLifecycleEvent
+import io.element.android.libraries.di.AppScope
@ContributesNode(AppScope::class)
class LoginRootNode @AssistedInject constructor(
@@ -39,8 +36,6 @@ class LoginRootNode @AssistedInject constructor(
private val presenter: LoginRootPresenter,
) : Node(buildContext, plugins = plugins) {
- private val presenterConnector = presenterConnector(presenter)
-
interface Callback : Plugin {
fun onChangeHomeServer()
}
@@ -51,7 +46,7 @@ class LoginRootNode @AssistedInject constructor(
@Composable
override fun View(modifier: Modifier) {
- val state by presenterConnector.stateFlow.collectAsState()
+ val state = presenter.present()
OnLifecycleEvent { _, event ->
when (event) {
Lifecycle.Event.ON_RESUME -> state.eventSink(LoginRootEvents.RefreshHomeServer)
@@ -60,6 +55,7 @@ class LoginRootNode @AssistedInject constructor(
}
LoginRootScreen(
state = state,
+ modifier = modifier,
onChangeServer = this::onChangeHomeServer,
)
}
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootPresenter.kt b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootPresenter.kt
similarity index 94%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootPresenter.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootPresenter.kt
index e6908dab5b..cb80d3784a 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootPresenter.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootPresenter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.login.root
+package io.element.android.features.login.root
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
@@ -22,8 +22,8 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.matrix.auth.MatrixAuthenticationService
+import io.element.android.libraries.architecture.Presenter
+import io.element.android.libraries.matrix.auth.MatrixAuthenticationService
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import javax.inject.Inject
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootScreen.kt b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootScreen.kt
similarity index 93%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootScreen.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootScreen.kt
index 665064f270..b927ae4555 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootScreen.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootScreen.kt
@@ -16,7 +16,7 @@
@file:OptIn(ExperimentalMaterial3Api::class)
-package io.element.android.x.features.login.root
+package io.element.android.features.login.root
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -58,10 +58,12 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import io.element.android.x.core.compose.textFieldState
-import io.element.android.x.features.login.error.loginError
-import io.element.android.x.matrix.core.SessionId
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.features.login.error.loginError
+import io.element.android.libraries.designsystem.components.form.textFieldState
+import io.element.android.libraries.matrix.core.SessionId
+import io.element.android.libraries.testtags.TestTags
+import io.element.android.libraries.testtags.testTag
+import io.element.android.libraries.ui.strings.R as StringR
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -127,6 +129,7 @@ fun LoginRootScreen(
onClick = onChangeServer,
modifier = Modifier
.align(Alignment.CenterEnd)
+ .testTag(TestTags.loginChangeServer)
.padding(top = 8.dp, end = 8.dp),
content = {
Text(text = "Change")
@@ -137,6 +140,7 @@ fun LoginRootScreen(
value = loginFieldState,
modifier = Modifier
.fillMaxWidth()
+ .testTag(TestTags.loginEmailUsername)
.padding(top = 60.dp),
label = {
Text(text = stringResource(id = StringR.string.login_signin_username_hint))
@@ -159,6 +163,7 @@ fun LoginRootScreen(
value = passwordFieldState,
modifier = Modifier
.fillMaxWidth()
+ .testTag(TestTags.loginPassword)
.padding(top = 24.dp),
onValueChange = {
passwordFieldState = it
@@ -202,6 +207,7 @@ fun LoginRootScreen(
enabled = state.submitEnabled,
modifier = Modifier
.fillMaxWidth()
+ .testTag(TestTags.loginContinue)
.padding(vertical = 32.dp)
) {
Text(text = "Continue")
diff --git a/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootState.kt b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootState.kt
similarity index 93%
rename from features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootState.kt
rename to features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootState.kt
index 4481b3afff..fab74370f0 100644
--- a/features/login/src/main/kotlin/io/element/android/x/features/login/root/LoginRootState.kt
+++ b/features/login/src/main/kotlin/io/element/android/features/login/root/LoginRootState.kt
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.features.login.root
+package io.element.android.features.login.root
import android.os.Parcelable
-import io.element.android.x.matrix.core.SessionId
+import io.element.android.libraries.matrix.core.SessionId
import kotlinx.parcelize.Parcelize
data class LoginRootState(
diff --git a/features/onboarding/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt b/features/login/src/test/kotlin/io/element/android/features/login/ExampleUnitTest.kt
similarity index 95%
rename from features/onboarding/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt
rename to features/login/src/test/kotlin/io/element/android/features/login/ExampleUnitTest.kt
index 39a03196df..ee6363e624 100644
--- a/features/onboarding/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt
+++ b/features/login/src/test/kotlin/io/element/android/features/login/ExampleUnitTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.login
+package io.element.android.features.login
import org.junit.Assert.assertEquals
import org.junit.Test
diff --git a/features/logout/build.gradle.kts b/features/logout/build.gradle.kts
index 93f9c4f6f2..e2df3becf4 100644
--- a/features/logout/build.gradle.kts
+++ b/features/logout/build.gradle.kts
@@ -23,7 +23,7 @@ plugins {
}
android {
- namespace = "io.element.android.x.features.logout"
+ namespace = "io.element.android.features.logout"
}
anvil {
@@ -31,15 +31,14 @@ anvil {
}
dependencies {
- implementation(project(":anvilannotations"))
- anvil(project(":anvilcodegen"))
- implementation(project(":libraries:di"))
- implementation(project(":libraries:architecture"))
- implementation(project(":libraries:core"))
- implementation(project(":libraries:matrix"))
- implementation(project(":libraries:designsystem"))
- implementation(project(":libraries:elementresources"))
- implementation(project(":libraries:ui-strings"))
+ implementation(projects.anvilannotations)
+ anvil(projects.anvilcodegen)
+ implementation(projects.libraries.architecture)
+ implementation(projects.libraries.core)
+ implementation(projects.libraries.matrix)
+ implementation(projects.libraries.designsystem)
+ implementation(projects.libraries.elementresources)
+ implementation(projects.libraries.uiStrings)
ksp(libs.showkase.processor)
testImplementation(libs.test.junit)
androidTestImplementation(libs.test.junitext)
diff --git a/features/onboarding/src/androidTest/kotlin/io/element/android/x/features/login/ExampleInstrumentedTest.kt b/features/logout/src/androidTest/kotlin/io/element/android/features/logout/ExampleInstrumentedTest.kt
similarity index 89%
rename from features/onboarding/src/androidTest/kotlin/io/element/android/x/features/login/ExampleInstrumentedTest.kt
rename to features/logout/src/androidTest/kotlin/io/element/android/features/logout/ExampleInstrumentedTest.kt
index 88ae6c4133..1316448d00 100644
--- a/features/onboarding/src/androidTest/kotlin/io/element/android/x/features/login/ExampleInstrumentedTest.kt
+++ b/features/logout/src/androidTest/kotlin/io/element/android/features/logout/ExampleInstrumentedTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.login
+package io.element.android.features.logout
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
@@ -33,6 +33,6 @@ class ExampleInstrumentedTest {
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
- assertEquals("io.element.android.x.features.login.test", appContext.packageName)
+ assertEquals("io.element.android.features.login.test", appContext.packageName)
}
}
diff --git a/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceEvents.kt b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceEvents.kt
similarity index 93%
rename from features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceEvents.kt
rename to features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceEvents.kt
index 83aa2fe14f..b381668974 100644
--- a/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceEvents.kt
+++ b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceEvents.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.logout
+package io.element.android.features.logout
sealed interface LogoutPreferenceEvents {
object Logout : LogoutPreferenceEvents
diff --git a/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferencePresenter.kt b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferencePresenter.kt
similarity index 83%
rename from features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferencePresenter.kt
rename to features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferencePresenter.kt
index 578de59787..3aa626f1fa 100644
--- a/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferencePresenter.kt
+++ b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferencePresenter.kt
@@ -14,22 +14,23 @@
* limitations under the License.
*/
-package io.element.android.x.features.logout
+package io.element.android.features.logout
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
-import io.element.android.x.architecture.Async
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.architecture.execute
-import io.element.android.x.matrix.MatrixClient
+import io.element.android.libraries.architecture.Async
+import io.element.android.libraries.architecture.Presenter
+import io.element.android.libraries.architecture.execute
+import io.element.android.libraries.matrix.MatrixClient
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import javax.inject.Inject
-class LogoutPreferencePresenter @Inject constructor(private val matrixClient: MatrixClient) : Presenter {
+class LogoutPreferencePresenter @Inject constructor(private val matrixClient: MatrixClient) :
+ Presenter {
@Composable
override fun present(): LogoutPreferenceState {
diff --git a/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceScreen.kt b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceScreen.kt
similarity index 84%
rename from features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceScreen.kt
rename to features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceScreen.kt
index 5f76d9e3b4..cc94f56806 100644
--- a/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceScreen.kt
+++ b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceScreen.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.logout
+package io.element.android.features.logout
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Logout
@@ -24,12 +24,12 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
-import io.element.android.x.architecture.Async
-import io.element.android.x.designsystem.components.ProgressDialog
-import io.element.android.x.designsystem.components.dialogs.ConfirmationDialog
-import io.element.android.x.designsystem.components.preferences.PreferenceCategory
-import io.element.android.x.designsystem.components.preferences.PreferenceText
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.libraries.architecture.Async
+import io.element.android.libraries.designsystem.components.ProgressDialog
+import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
+import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
+import io.element.android.libraries.designsystem.components.preferences.PreferenceText
+import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun LogoutPreferenceView(
diff --git a/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceState.kt b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceState.kt
similarity index 88%
rename from features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceState.kt
rename to features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceState.kt
index 70e637899b..e594a04870 100644
--- a/features/logout/src/main/kotlin/io/element/android/x/features/logout/LogoutPreferenceState.kt
+++ b/features/logout/src/main/kotlin/io/element/android/features/logout/LogoutPreferenceState.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.logout
+package io.element.android.features.logout
-import io.element.android.x.architecture.Async
+import io.element.android.libraries.architecture.Async
data class LogoutPreferenceState(
val logoutAction: Async = Async.Uninitialized,
diff --git a/features/login/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt b/features/logout/src/test/kotlin/io/element/android/features/logout/ExampleUnitTest.kt
similarity index 95%
rename from features/login/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt
rename to features/logout/src/test/kotlin/io/element/android/features/logout/ExampleUnitTest.kt
index 39a03196df..065f4e917d 100644
--- a/features/login/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt
+++ b/features/logout/src/test/kotlin/io/element/android/features/logout/ExampleUnitTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.login
+package io.element.android.features.logout
import org.junit.Assert.assertEquals
import org.junit.Test
diff --git a/features/messages/build.gradle.kts b/features/messages/build.gradle.kts
index 861cb183c4..975c7b5c0e 100644
--- a/features/messages/build.gradle.kts
+++ b/features/messages/build.gradle.kts
@@ -23,7 +23,7 @@ plugins {
}
android {
- namespace = "io.element.android.x.features.messages"
+ namespace = "io.element.android.features.messages"
}
anvil {
@@ -31,16 +31,14 @@ anvil {
}
dependencies {
- implementation(project(":anvilannotations"))
- anvil(project(":anvilcodegen"))
- implementation(project(":libraries:di"))
- implementation(project(":libraries:core"))
- implementation(project(":libraries:architecture"))
- implementation(project(":libraries:matrix"))
- implementation(project(":libraries:matrixui"))
- implementation(project(":libraries:designsystem"))
- implementation(project(":libraries:textcomposer"))
- implementation(libs.appyx.core)
+ implementation(projects.anvilannotations)
+ anvil(projects.anvilcodegen)
+ implementation(projects.libraries.core)
+ implementation(projects.libraries.architecture)
+ implementation(projects.libraries.matrix)
+ implementation(projects.libraries.matrixui)
+ implementation(projects.libraries.designsystem)
+ implementation(projects.libraries.textcomposer)
implementation(libs.coil.compose)
implementation(libs.datetime)
implementation(libs.accompanist.flowlayout)
diff --git a/features/messages/src/androidTest/kotlin/io/element/android/x/features/messages/ExampleInstrumentedTest.kt b/features/messages/src/androidTest/kotlin/io/element/android/features/messages/ExampleInstrumentedTest.kt
similarity index 89%
rename from features/messages/src/androidTest/kotlin/io/element/android/x/features/messages/ExampleInstrumentedTest.kt
rename to features/messages/src/androidTest/kotlin/io/element/android/features/messages/ExampleInstrumentedTest.kt
index 86305659f1..97ef4f5a3b 100644
--- a/features/messages/src/androidTest/kotlin/io/element/android/x/features/messages/ExampleInstrumentedTest.kt
+++ b/features/messages/src/androidTest/kotlin/io/element/android/features/messages/ExampleInstrumentedTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages
+package io.element.android.features.messages
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
@@ -33,6 +33,6 @@ class ExampleInstrumentedTest {
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
- assertEquals("io.element.android.x.features.messages.test", appContext.packageName)
+ assertEquals("io.element.android.features.messages.test", appContext.packageName)
}
}
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesEvents.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesEvents.kt
similarity index 78%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesEvents.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/MessagesEvents.kt
index 88e8c52221..d8d5c0c795 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesEvents.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesEvents.kt
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages
+package io.element.android.features.messages
-import io.element.android.x.features.messages.actionlist.model.TimelineItemAction
-import io.element.android.x.features.messages.timeline.model.TimelineItem
+import io.element.android.features.messages.actionlist.model.TimelineItemAction
+import io.element.android.features.messages.timeline.model.TimelineItem
sealed interface MessagesEvents {
data class HandleAction(val action: TimelineItemAction, val messageEvent: TimelineItem.MessageEvent) : MessagesEvents
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesNode.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesNode.kt
similarity index 74%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesNode.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/MessagesNode.kt
index dd7b435ef0..0b3db020bf 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesNode.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesNode.kt
@@ -14,33 +14,28 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages
+package io.element.android.features.messages
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.collectAsState
-import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
-import io.element.android.x.anvilannotations.ContributesNode
-import io.element.android.x.architecture.presenterConnector
-import io.element.android.x.di.RoomScope
+import io.element.android.anvilannotations.ContributesNode
+import io.element.android.libraries.di.RoomScope
@ContributesNode(RoomScope::class)
class MessagesNode @AssistedInject constructor(
@Assisted buildContext: BuildContext,
@Assisted plugins: List,
- presenter: MessagesPresenter,
+ private val presenter: MessagesPresenter,
) : Node(buildContext, plugins = plugins) {
- private val connector = presenterConnector(presenter)
-
@Composable
override fun View(modifier: Modifier) {
- val state by connector.stateFlow.collectAsState()
+ val state = presenter.present()
MessagesView(
state = state,
onBackPressed = this::navigateUp,
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesPresenter.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesPresenter.kt
similarity index 76%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesPresenter.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/MessagesPresenter.kt
index 8324dc806b..44d6f0b7a1 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesPresenter.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesPresenter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages
+package io.element.android.features.messages
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@@ -24,37 +24,32 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.designsystem.components.avatar.AvatarSize
-import io.element.android.x.features.messages.actionlist.ActionListPresenter
-import io.element.android.x.features.messages.actionlist.model.TimelineItemAction
-import io.element.android.x.features.messages.textcomposer.MessageComposerEvents
-import io.element.android.x.features.messages.textcomposer.MessageComposerPresenter
-import io.element.android.x.features.messages.textcomposer.MessageComposerState
-import io.element.android.x.features.messages.timeline.TimelineEvents
-import io.element.android.x.features.messages.timeline.TimelinePresenter
-import io.element.android.x.features.messages.timeline.model.TimelineItem
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemTextBasedContent
-import io.element.android.x.matrix.MatrixClient
-import io.element.android.x.matrix.room.MatrixRoom
-import io.element.android.x.matrix.ui.MatrixItemHelper
-import io.element.android.x.textcomposer.MessageComposerMode
+import io.element.android.features.messages.actionlist.ActionListPresenter
+import io.element.android.features.messages.actionlist.model.TimelineItemAction
+import io.element.android.features.messages.textcomposer.MessageComposerEvents
+import io.element.android.features.messages.textcomposer.MessageComposerPresenter
+import io.element.android.features.messages.textcomposer.MessageComposerState
+import io.element.android.features.messages.timeline.TimelineEvents
+import io.element.android.features.messages.timeline.TimelinePresenter
+import io.element.android.features.messages.timeline.model.TimelineItem
+import io.element.android.features.messages.timeline.model.content.TimelineItemTextBasedContent
+import io.element.android.libraries.architecture.Presenter
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.designsystem.components.avatar.AvatarSize
+import io.element.android.libraries.matrix.room.MatrixRoom
+import io.element.android.libraries.textcomposer.MessageComposerMode
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject
class MessagesPresenter @Inject constructor(
- private val matrixClient: MatrixClient,
private val room: MatrixRoom,
private val composerPresenter: MessageComposerPresenter,
private val timelinePresenter: TimelinePresenter,
private val actionListPresenter: ActionListPresenter,
) : Presenter {
- private val matrixItemHelper = MatrixItemHelper(matrixClient)
-
@Composable
override fun present(): MessagesState {
val localCoroutineScope = rememberCoroutineScope()
@@ -71,8 +66,9 @@ class MessagesPresenter @Inject constructor(
}
LaunchedEffect(syncUpdateFlow) {
roomAvatar.value =
- matrixItemHelper.loadAvatarData(
- room = room,
+ AvatarData(
+ name = room.bestName,
+ url = room.avatarUrl,
size = AvatarSize.SMALL
)
roomName.value = room.name
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesState.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesState.kt
similarity index 70%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesState.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/MessagesState.kt
index af3b0793b5..4270c9f2e6 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesState.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesState.kt
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages
+package io.element.android.features.messages
import androidx.compose.runtime.Immutable
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.features.messages.actionlist.ActionListState
-import io.element.android.x.features.messages.textcomposer.MessageComposerState
-import io.element.android.x.features.messages.timeline.TimelineState
-import io.element.android.x.matrix.core.RoomId
+import io.element.android.features.messages.actionlist.ActionListState
+import io.element.android.features.messages.textcomposer.MessageComposerState
+import io.element.android.features.messages.timeline.TimelineState
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.matrix.core.RoomId
@Immutable
data class MessagesState(
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesView.kt
similarity index 90%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesView.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/MessagesView.kt
index 7711233699..706dc48c43 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/MessagesView.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesView.kt
@@ -19,7 +19,7 @@
ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class,
)
-package io.element.android.x.features.messages
+package io.element.android.features.messages
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -56,15 +56,15 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import io.element.android.x.core.compose.LogCompositions
-import io.element.android.x.designsystem.components.avatar.Avatar
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.features.messages.actionlist.ActionListEvents
-import io.element.android.x.features.messages.actionlist.ActionListView
-import io.element.android.x.features.messages.actionlist.model.TimelineItemAction
-import io.element.android.x.features.messages.timeline.model.TimelineItem
-import io.element.android.x.features.messages.textcomposer.MessageComposerView
-import io.element.android.x.features.messages.timeline.TimelineView
+import io.element.android.features.messages.actionlist.ActionListEvents
+import io.element.android.features.messages.actionlist.ActionListView
+import io.element.android.features.messages.actionlist.model.TimelineItemAction
+import io.element.android.features.messages.textcomposer.MessageComposerView
+import io.element.android.features.messages.timeline.TimelineView
+import io.element.android.features.messages.timeline.model.TimelineItem
+import io.element.android.libraries.designsystem.components.avatar.Avatar
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.designsystem.utils.LogCompositions
import kotlinx.coroutines.launch
import timber.log.Timber
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListEvents.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListEvents.kt
similarity index 85%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListEvents.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListEvents.kt
index 65b26cf84a..f760f08640 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListEvents.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListEvents.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.actionlist
+package io.element.android.features.messages.actionlist
-import io.element.android.x.features.messages.timeline.model.TimelineItem
+import io.element.android.features.messages.timeline.model.TimelineItem
sealed interface ActionListEvents {
object Clear : ActionListEvents
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListPresenter.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListPresenter.kt
similarity index 87%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListPresenter.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListPresenter.kt
index cc894931c6..a0114f2420 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListPresenter.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListPresenter.kt
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.actionlist
+package io.element.android.features.messages.actionlist
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.features.messages.actionlist.model.TimelineItemAction
-import io.element.android.x.features.messages.timeline.model.TimelineItem
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemRedactedContent
+import io.element.android.features.messages.actionlist.model.TimelineItemAction
+import io.element.android.features.messages.timeline.model.TimelineItem
+import io.element.android.features.messages.timeline.model.content.TimelineItemRedactedContent
+import io.element.android.libraries.architecture.Presenter
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListState.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListState.kt
similarity index 84%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListState.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListState.kt
index 00c3ec59ab..6bc7630ec8 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListState.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListState.kt
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.actionlist
+package io.element.android.features.messages.actionlist
import androidx.compose.runtime.Immutable
-import io.element.android.x.features.messages.actionlist.model.TimelineItemAction
-import io.element.android.x.features.messages.timeline.model.TimelineItem
+import io.element.android.features.messages.actionlist.model.TimelineItemAction
+import io.element.android.features.messages.timeline.model.TimelineItem
import kotlinx.collections.immutable.ImmutableList
@Immutable
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListView.kt
similarity index 94%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListView.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListView.kt
index 7984577de4..53df8d4b40 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/ActionListView.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListView.kt
@@ -16,7 +16,7 @@
@file:OptIn(ExperimentalMaterialApi::class)
-package io.element.android.x.features.messages.actionlist
+package io.element.android.features.messages.actionlist
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
@@ -41,9 +41,9 @@ import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
-import io.element.android.x.designsystem.components.VectorIcon
-import io.element.android.x.features.messages.actionlist.model.TimelineItemAction
-import io.element.android.x.features.messages.timeline.model.TimelineItem
+import io.element.android.features.messages.actionlist.model.TimelineItemAction
+import io.element.android.features.messages.timeline.model.TimelineItem
+import io.element.android.libraries.designsystem.components.VectorIcon
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.launch
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/model/TimelineItemAction.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/model/TimelineItemAction.kt
similarity index 56%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/model/TimelineItemAction.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/model/TimelineItemAction.kt
index 4e23eb34f0..46d879b850 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/actionlist/model/TimelineItemAction.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/model/TimelineItemAction.kt
@@ -14,11 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.actionlist.model
+package io.element.android.features.messages.actionlist.model
import androidx.annotation.DrawableRes
import androidx.compose.runtime.Immutable
-import io.element.android.x.designsystem.VectorIcons
@Immutable
sealed class TimelineItemAction(
@@ -26,9 +25,9 @@ sealed class TimelineItemAction(
@DrawableRes val icon: Int,
val destructive: Boolean = false
) {
- object Forward : TimelineItemAction("Forward", VectorIcons.ArrowForward)
- object Copy : TimelineItemAction("Copy", VectorIcons.Copy)
- object Redact : TimelineItemAction("Redact", VectorIcons.Delete, destructive = true)
- object Reply : TimelineItemAction("Reply", VectorIcons.Reply)
- object Edit : TimelineItemAction("Edit", VectorIcons.Edit)
+ object Forward : TimelineItemAction("Forward", io.element.android.libraries.designsystem.VectorIcons.ArrowForward)
+ object Copy : TimelineItemAction("Copy", io.element.android.libraries.designsystem.VectorIcons.Copy)
+ object Redact : TimelineItemAction("Redact", io.element.android.libraries.designsystem.VectorIcons.Delete, destructive = true)
+ object Reply : TimelineItemAction("Reply", io.element.android.libraries.designsystem.VectorIcons.Reply)
+ object Edit : TimelineItemAction("Edit", io.element.android.libraries.designsystem.VectorIcons.Edit)
}
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerEvents.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerEvents.kt
similarity index 88%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerEvents.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerEvents.kt
index 8e4e3ffddd..656229555b 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerEvents.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerEvents.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.textcomposer
+package io.element.android.features.messages.textcomposer
-import io.element.android.x.textcomposer.MessageComposerMode
+import io.element.android.libraries.textcomposer.MessageComposerMode
sealed interface MessageComposerEvents {
object ToggleFullScreenState : MessageComposerEvents
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerPresenter.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerPresenter.kt
similarity index 88%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerPresenter.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerPresenter.kt
index aba47ec90b..29d5030b4e 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerPresenter.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerPresenter.kt
@@ -14,18 +14,19 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.textcomposer
+package io.element.android.features.messages.textcomposer
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.core.data.StableCharSequence
-import io.element.android.x.core.data.toStableCharSequence
-import io.element.android.x.matrix.room.MatrixRoom
-import io.element.android.x.textcomposer.MessageComposerMode
+import io.element.android.libraries.architecture.Presenter
+import io.element.android.libraries.core.data.StableCharSequence
+import io.element.android.libraries.core.data.toStableCharSequence
+import io.element.android.libraries.matrix.room.MatrixRoom
+import io.element.android.libraries.textcomposer.MessageComposerMode
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import javax.inject.Inject
@@ -40,7 +41,7 @@ class MessageComposerPresenter @Inject constructor(
val isFullScreen = rememberSaveable {
mutableStateOf(false)
}
- val text: MutableState = rememberSaveable {
+ val text: MutableState = remember {
mutableStateOf(StableCharSequence(""))
}
val composerMode: MutableState = rememberSaveable {
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerState.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerState.kt
similarity index 82%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerState.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerState.kt
index 44c8e73d7e..2b5396cb9e 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerState.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerState.kt
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.textcomposer
+package io.element.android.features.messages.textcomposer
import androidx.compose.runtime.Immutable
-import io.element.android.x.core.data.StableCharSequence
-import io.element.android.x.textcomposer.MessageComposerMode
+import io.element.android.libraries.core.data.StableCharSequence
+import io.element.android.libraries.textcomposer.MessageComposerMode
@Immutable
data class MessageComposerState(
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerView.kt
similarity index 90%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerView.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerView.kt
index e5555bf477..e3b674d32a 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/textcomposer/MessageComposerView.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/textcomposer/MessageComposerView.kt
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.textcomposer
+package io.element.android.features.messages.textcomposer
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import io.element.android.x.designsystem.LocalIsDarkTheme
-import io.element.android.x.textcomposer.TextComposer
+import io.element.android.libraries.designsystem.LocalIsDarkTheme
+import io.element.android.libraries.textcomposer.TextComposer
@Composable
fun MessageComposerView(
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineEvents.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineEvents.kt
similarity index 87%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineEvents.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineEvents.kt
index 733a082d73..c59b99fe3f 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineEvents.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineEvents.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline
+package io.element.android.features.messages.timeline
-import io.element.android.x.matrix.core.EventId
+import io.element.android.libraries.matrix.core.EventId
sealed interface TimelineEvents {
object LoadMore : TimelineEvents
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineItemsFactory.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineItemsFactory.kt
similarity index 82%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineItemsFactory.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineItemsFactory.kt
index 0b8a3bfc48..ce945f1e88 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineItemsFactory.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineItemsFactory.kt
@@ -14,30 +14,31 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline
+package io.element.android.features.messages.timeline
import androidx.recyclerview.widget.DiffUtil
-import io.element.android.x.designsystem.components.avatar.AvatarSize
-import io.element.android.x.features.messages.timeline.diff.CacheInvalidator
-import io.element.android.x.features.messages.timeline.diff.MatrixTimelineItemsDiffCallback
-import io.element.android.x.features.messages.timeline.model.AggregatedReaction
-import io.element.android.x.features.messages.timeline.model.MessagesItemGroupPosition
-import io.element.android.x.features.messages.timeline.model.TimelineItem
-import io.element.android.x.features.messages.timeline.model.TimelineItemReactions
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemContent
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemEmoteContent
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemEncryptedContent
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemImageContent
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemNoticeContent
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemRedactedContent
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemTextContent
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemUnknownContent
-import io.element.android.x.features.messages.timeline.util.invalidateLast
-import io.element.android.x.matrix.core.EventId
-import io.element.android.x.matrix.media.MediaResolver
-import io.element.android.x.matrix.room.MatrixRoom
-import io.element.android.x.matrix.timeline.MatrixTimelineItem
-import io.element.android.x.matrix.ui.MatrixItemHelper
+import io.element.android.features.messages.timeline.diff.CacheInvalidator
+import io.element.android.features.messages.timeline.diff.MatrixTimelineItemsDiffCallback
+import io.element.android.features.messages.timeline.model.AggregatedReaction
+import io.element.android.features.messages.timeline.model.MessagesItemGroupPosition
+import io.element.android.features.messages.timeline.model.TimelineItem
+import io.element.android.features.messages.timeline.model.TimelineItemReactions
+import io.element.android.features.messages.timeline.model.content.TimelineItemContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemEmoteContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemEncryptedContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemImageContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemNoticeContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemRedactedContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemTextContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemUnknownContent
+import io.element.android.features.messages.timeline.util.invalidateLast
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.designsystem.components.avatar.AvatarSize
+import io.element.android.libraries.matrix.core.EventId
+import io.element.android.libraries.matrix.media.MediaResolver
+import io.element.android.libraries.matrix.room.MatrixRoom
+import io.element.android.libraries.matrix.timeline.MatrixTimelineItem
+import io.element.android.libraries.matrix.ui.MatrixItemHelper
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.MutableStateFlow
@@ -154,12 +155,11 @@ class TimelineItemsFactory @Inject constructor(
computeGroupPosition(currentTimelineItem, timelineItems, index)
val senderDisplayName = room.userDisplayName(currentSender).getOrNull()
val senderAvatarUrl = room.userAvatarUrl(currentSender).getOrNull()
- val senderAvatarData =
- matrixItemHelper.loadAvatarData(
- name = senderDisplayName ?: currentSender,
- url = senderAvatarUrl,
- size = AvatarSize.SMALL
- )
+ val senderAvatarData = AvatarData(
+ name = senderDisplayName ?: currentSender,
+ url = senderAvatarUrl,
+ size = AvatarSize.SMALL
+ )
return TimelineItem.MessageEvent(
id = EventId(currentTimelineItem.uniqueId),
senderId = currentSender,
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelinePresenter.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelinePresenter.kt
similarity index 87%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelinePresenter.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelinePresenter.kt
index 9cbd2a4acf..18ce07896e 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelinePresenter.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelinePresenter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline
+package io.element.android.features.messages.timeline
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
@@ -24,14 +24,14 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.core.coroutine.CoroutineDispatchers
-import io.element.android.x.matrix.MatrixClient
-import io.element.android.x.matrix.core.EventId
-import io.element.android.x.matrix.room.MatrixRoom
-import io.element.android.x.matrix.timeline.MatrixTimeline
-import io.element.android.x.matrix.timeline.MatrixTimelineItem
-import io.element.android.x.matrix.ui.MatrixItemHelper
+import io.element.android.libraries.architecture.Presenter
+import io.element.android.libraries.core.coroutine.CoroutineDispatchers
+import io.element.android.libraries.matrix.MatrixClient
+import io.element.android.libraries.matrix.core.EventId
+import io.element.android.libraries.matrix.room.MatrixRoom
+import io.element.android.libraries.matrix.timeline.MatrixTimeline
+import io.element.android.libraries.matrix.timeline.MatrixTimelineItem
+import io.element.android.libraries.matrix.ui.MatrixItemHelper
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.launchIn
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineState.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineState.kt
similarity index 83%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineState.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineState.kt
index c4ea612334..6b8c715f5d 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineState.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineState.kt
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline
+package io.element.android.features.messages.timeline
import androidx.compose.runtime.Immutable
-import io.element.android.x.features.messages.timeline.model.TimelineItem
-import io.element.android.x.matrix.core.EventId
+import io.element.android.features.messages.timeline.model.TimelineItem
+import io.element.android.libraries.matrix.core.EventId
import kotlinx.collections.immutable.ImmutableList
@Immutable
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineView.kt
similarity index 87%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineView.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineView.kt
index b2ecc490b3..a73c724448 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/TimelineView.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/TimelineView.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline
+package io.element.android.features.messages.timeline
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
@@ -58,29 +58,29 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
-import io.element.android.x.core.compose.PairCombinedPreviewParameter
-import io.element.android.x.designsystem.components.avatar.Avatar
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.features.messages.timeline.model.AggregatedReaction
-import io.element.android.x.features.messages.timeline.model.MessagesItemGroupPosition
-import io.element.android.x.features.messages.timeline.model.TimelineItemGroupPositionProvider
-import io.element.android.x.features.messages.timeline.model.TimelineItemReactions
-import io.element.android.x.features.messages.timeline.model.TimelineItem
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemContent
-import io.element.android.x.features.messages.timeline.model.content.MessagesTimelineItemContentProvider
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemEncryptedContent
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemImageContent
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemRedactedContent
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemTextBasedContent
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemUnknownContent
-import io.element.android.x.features.messages.timeline.components.MessageEventBubble
-import io.element.android.x.features.messages.timeline.components.TimelineItemReactionsView
-import io.element.android.x.features.messages.timeline.components.TimelineItemEncryptedView
-import io.element.android.x.features.messages.timeline.components.TimelineItemImageView
-import io.element.android.x.features.messages.timeline.components.TimelineItemRedactedView
-import io.element.android.x.features.messages.timeline.components.TimelineItemTextView
-import io.element.android.x.features.messages.timeline.components.TimelineItemUnknownView
-import io.element.android.x.matrix.core.EventId
+import io.element.android.features.messages.timeline.components.MessageEventBubble
+import io.element.android.features.messages.timeline.components.TimelineItemEncryptedView
+import io.element.android.features.messages.timeline.components.TimelineItemImageView
+import io.element.android.features.messages.timeline.components.TimelineItemReactionsView
+import io.element.android.features.messages.timeline.components.TimelineItemRedactedView
+import io.element.android.features.messages.timeline.components.TimelineItemTextView
+import io.element.android.features.messages.timeline.components.TimelineItemUnknownView
+import io.element.android.features.messages.timeline.model.AggregatedReaction
+import io.element.android.features.messages.timeline.model.MessagesItemGroupPosition
+import io.element.android.features.messages.timeline.model.TimelineItem
+import io.element.android.features.messages.timeline.model.TimelineItemGroupPositionProvider
+import io.element.android.features.messages.timeline.model.TimelineItemReactions
+import io.element.android.features.messages.timeline.model.content.MessagesTimelineItemContentProvider
+import io.element.android.features.messages.timeline.model.content.TimelineItemContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemEncryptedContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemImageContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemRedactedContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemTextBasedContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemUnknownContent
+import io.element.android.libraries.designsystem.components.avatar.Avatar
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.designsystem.utils.PairCombinedPreviewParameter
+import io.element.android.libraries.matrix.core.EventId
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.flow.distinctUntilChanged
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/MessageEventBubble.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/MessageEventBubble.kt
similarity index 86%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/MessageEventBubble.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/MessageEventBubble.kt
index 7466d38e1a..9f6c1eb28d 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/MessageEventBubble.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/MessageEventBubble.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.components
+package io.element.android.features.messages.timeline.components
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.combinedClickable
@@ -29,14 +29,14 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.unit.dp
-import io.element.android.x.designsystem.LocalIsDarkTheme
-import io.element.android.x.designsystem.MessageHighlightDark
-import io.element.android.x.designsystem.MessageHighlightLight
-import io.element.android.x.designsystem.SystemGrey5Dark
-import io.element.android.x.designsystem.SystemGrey5Light
-import io.element.android.x.designsystem.SystemGrey6Dark
-import io.element.android.x.designsystem.SystemGrey6Light
-import io.element.android.x.features.messages.timeline.model.MessagesItemGroupPosition
+import io.element.android.features.messages.timeline.model.MessagesItemGroupPosition
+import io.element.android.libraries.designsystem.LocalIsDarkTheme
+import io.element.android.libraries.designsystem.MessageHighlightDark
+import io.element.android.libraries.designsystem.MessageHighlightLight
+import io.element.android.libraries.designsystem.SystemGrey5Dark
+import io.element.android.libraries.designsystem.SystemGrey5Light
+import io.element.android.libraries.designsystem.SystemGrey6Dark
+import io.element.android.libraries.designsystem.SystemGrey6Light
private val BUBBLE_RADIUS = 16.dp
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemEncryptedView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemEncryptedView.kt
similarity index 86%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemEncryptedView.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemEncryptedView.kt
index 0b037c6f1f..9b2be79685 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemEncryptedView.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemEncryptedView.kt
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.components
+package io.element.android.features.messages.timeline.components
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Warning
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemEncryptedContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemEncryptedContent
@Composable
fun TimelineItemEncryptedView(
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemImageView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemImageView.kt
similarity index 93%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemImageView.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemImageView.kt
index a630959bcb..e6548a71e8 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemImageView.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemImageView.kt
@@ -16,7 +16,7 @@
@file:OptIn(ExperimentalFoundationApi::class)
-package io.element.android.x.features.messages.timeline.components
+package io.element.android.features.messages.timeline.components
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Box
@@ -33,7 +33,7 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import coil.compose.AsyncImage
import coil.request.ImageRequest
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemImageContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemImageContent
@Composable
fun TimelineItemImageView(
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemInformativeView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemInformativeView.kt
similarity index 96%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemInformativeView.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemInformativeView.kt
index 6c876f9103..9806bc05c8 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemInformativeView.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemInformativeView.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.components
+package io.element.android.features.messages.timeline.components
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemReactionsView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemReactionsView.kt
similarity index 91%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemReactionsView.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemReactionsView.kt
index 8cc75befea..b061f02f3d 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemReactionsView.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemReactionsView.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.components
+package io.element.android.features.messages.timeline.components
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.Row
@@ -32,8 +32,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.google.accompanist.flowlayout.FlowRow
-import io.element.android.x.features.messages.timeline.model.AggregatedReaction
-import io.element.android.x.features.messages.timeline.model.TimelineItemReactions
+import io.element.android.features.messages.timeline.model.AggregatedReaction
+import io.element.android.features.messages.timeline.model.TimelineItemReactions
@Composable
fun TimelineItemReactionsView(
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemRedactedView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemRedactedView.kt
similarity index 86%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemRedactedView.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemRedactedView.kt
index 183b44de74..f752f88c4a 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemRedactedView.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemRedactedView.kt
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.components
+package io.element.android.features.messages.timeline.components
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemRedactedContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemRedactedContent
@Composable
fun TimelineItemRedactedView(
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemTextView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemTextView.kt
similarity index 88%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemTextView.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemTextView.kt
index 4751f2ae0d..ad1bb5edb9 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemTextView.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemTextView.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.components
+package io.element.android.features.messages.timeline.components
import android.text.SpannableString
import android.text.style.URLSpan
@@ -28,10 +28,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.core.text.util.LinkifyCompat
-import io.element.android.x.designsystem.LinkColor
-import io.element.android.x.designsystem.components.ClickableLinkText
-import io.element.android.x.features.messages.timeline.components.html.HtmlDocument
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemTextBasedContent
+import io.element.android.features.messages.timeline.components.html.HtmlDocument
+import io.element.android.features.messages.timeline.model.content.TimelineItemTextBasedContent
+import io.element.android.libraries.designsystem.LinkColor
+import io.element.android.libraries.designsystem.components.ClickableLinkText
@Composable
fun TimelineItemTextView(
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemUnknownView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemUnknownView.kt
similarity index 86%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemUnknownView.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemUnknownView.kt
index 88355abd90..396bb19cb6 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/TimelineItemUnknownView.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/TimelineItemUnknownView.kt
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.components
+package io.element.android.features.messages.timeline.components
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Info
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemUnknownContent
+import io.element.android.features.messages.timeline.model.content.TimelineItemUnknownContent
@Composable
fun TimelineItemUnknownView(
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/html/HtmlDocument.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/html/HtmlDocument.kt
similarity index 98%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/html/HtmlDocument.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/html/HtmlDocument.kt
index e5dcfc1112..21a7cac714 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/components/html/HtmlDocument.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/components/html/HtmlDocument.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.components.html
+package io.element.android.features.messages.timeline.components.html
import androidx.compose.foundation.background
import androidx.compose.foundation.interaction.MutableInteractionSource
@@ -47,10 +47,10 @@ import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.google.accompanist.flowlayout.FlowRow
-import io.element.android.x.designsystem.LinkColor
-import io.element.android.x.designsystem.components.ClickableLinkText
-import io.element.android.x.matrix.permalink.PermalinkData
-import io.element.android.x.matrix.permalink.PermalinkParser
+import io.element.android.libraries.designsystem.LinkColor
+import io.element.android.libraries.designsystem.components.ClickableLinkText
+import io.element.android.libraries.matrix.permalink.PermalinkData
+import io.element.android.libraries.matrix.permalink.PermalinkParser
import kotlinx.collections.immutable.persistentMapOf
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/diff/CacheInvalidator.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/diff/CacheInvalidator.kt
similarity index 89%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/diff/CacheInvalidator.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/diff/CacheInvalidator.kt
index 031d871033..c71fa7bcd1 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/diff/CacheInvalidator.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/diff/CacheInvalidator.kt
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.diff
+package io.element.android.features.messages.timeline.diff
import androidx.recyclerview.widget.ListUpdateCallback
-import io.element.android.x.features.messages.timeline.model.TimelineItem
-import io.element.android.x.features.messages.timeline.util.invalidateLast
+import io.element.android.features.messages.timeline.model.TimelineItem
+import io.element.android.features.messages.timeline.util.invalidateLast
import timber.log.Timber
internal class CacheInvalidator(private val itemStatesCache: MutableList) :
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt
similarity index 92%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt
index 45b754043a..fd5119cc2a 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/diff/MatrixTimelineItemsDiffCallback.kt
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.diff
+package io.element.android.features.messages.timeline.diff
import androidx.recyclerview.widget.DiffUtil
-import io.element.android.x.matrix.timeline.MatrixTimelineItem
+import io.element.android.libraries.matrix.timeline.MatrixTimelineItem
internal class MatrixTimelineItemsDiffCallback(
private val oldList: List,
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItem.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItem.kt
similarity index 82%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItem.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItem.kt
index ef93d38aa2..1216765ee8 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItem.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItem.kt
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model
+package io.element.android.features.messages.timeline.model
import androidx.compose.runtime.Immutable
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.features.messages.timeline.model.content.TimelineItemContent
-import io.element.android.x.matrix.core.EventId
+import io.element.android.features.messages.timeline.model.content.TimelineItemContent
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.matrix.core.EventId
@Immutable
sealed interface TimelineItem {
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItemGroupPosition.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemGroupPosition.kt
similarity index 95%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItemGroupPosition.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemGroupPosition.kt
index 977c498bfc..9a1ebb9362 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItemGroupPosition.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemGroupPosition.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model
+package io.element.android.features.messages.timeline.model
import androidx.compose.runtime.Immutable
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItemReactions.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemReactions.kt
similarity index 93%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItemReactions.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemReactions.kt
index ff0fd549bc..a6470a3784 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/TimelineItemReactions.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/TimelineItemReactions.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model
+package io.element.android.features.messages.timeline.model
import kotlinx.collections.immutable.ImmutableList
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemContent.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemContent.kt
similarity index 95%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemContent.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemContent.kt
index 9d7b8c3868..973a4343a3 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemContent.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemContent.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model.content
+package io.element.android.features.messages.timeline.model.content
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import org.matrix.rustcomponents.sdk.EncryptedMessage
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemEmoteContent.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemEmoteContent.kt
similarity index 91%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemEmoteContent.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemEmoteContent.kt
index c5c0a8a330..c307b70edb 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemEmoteContent.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemEmoteContent.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model.content
+package io.element.android.features.messages.timeline.model.content
import org.jsoup.nodes.Document
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemEncryptedContent.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemEncryptedContent.kt
similarity index 91%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemEncryptedContent.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemEncryptedContent.kt
index 62fd231191..937b4d32f6 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemEncryptedContent.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemEncryptedContent.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model.content
+package io.element.android.features.messages.timeline.model.content
import org.matrix.rustcomponents.sdk.EncryptedMessage
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemImageContent.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemImageContent.kt
similarity index 85%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemImageContent.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemImageContent.kt
index 25e983d6a4..ef1c8d85d5 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemImageContent.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemImageContent.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model.content
+package io.element.android.features.messages.timeline.model.content
-import io.element.android.x.matrix.media.MediaResolver
+import io.element.android.libraries.matrix.media.MediaResolver
data class TimelineItemImageContent(
val body: String,
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemNoticeContent.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemNoticeContent.kt
similarity index 91%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemNoticeContent.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemNoticeContent.kt
index 1bb8df5673..330ef1ff95 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemNoticeContent.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemNoticeContent.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model.content
+package io.element.android.features.messages.timeline.model.content
import org.jsoup.nodes.Document
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemRedactedContent.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemRedactedContent.kt
similarity index 90%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemRedactedContent.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemRedactedContent.kt
index 8de2088052..6dd395f338 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemRedactedContent.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemRedactedContent.kt
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model.content
+package io.element.android.features.messages.timeline.model.content
object TimelineItemRedactedContent : TimelineItemContent
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextBasedContent.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemTextBasedContent.kt
similarity index 91%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextBasedContent.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemTextBasedContent.kt
index 15f757bf6e..6146a5493f 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextBasedContent.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemTextBasedContent.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model.content
+package io.element.android.features.messages.timeline.model.content
import org.jsoup.nodes.Document
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextContent.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemTextContent.kt
similarity index 91%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextContent.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemTextContent.kt
index a3a887df66..abb3140b71 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemTextContent.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemTextContent.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model.content
+package io.element.android.features.messages.timeline.model.content
import org.jsoup.nodes.Document
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemUnknownContent.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemUnknownContent.kt
similarity index 90%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemUnknownContent.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemUnknownContent.kt
index 44f6cb9af4..e2e0c5a14a 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/model/content/TimelineItemUnknownContent.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/model/content/TimelineItemUnknownContent.kt
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.model.content
+package io.element.android.features.messages.timeline.model.content
object TimelineItemUnknownContent : TimelineItemContent
diff --git a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/util/MutableListExt.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/util/MutableListExt.kt
similarity index 92%
rename from features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/util/MutableListExt.kt
rename to features/messages/src/main/kotlin/io/element/android/features/messages/timeline/util/MutableListExt.kt
index d487af0cdc..555cb4cb01 100644
--- a/features/messages/src/main/kotlin/io/element/android/x/features/messages/timeline/util/MutableListExt.kt
+++ b/features/messages/src/main/kotlin/io/element/android/features/messages/timeline/util/MutableListExt.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages.timeline.util
+package io.element.android.features.messages.timeline.util
internal inline fun MutableList.invalidateLast() {
val indexOfLast = size
diff --git a/features/logout/src/test/kotlin/io/element/android/x/features/logout/ExampleUnitTest.kt b/features/messages/src/test/kotlin/io/element/android/features/messages/ExampleUnitTest.kt
similarity index 95%
rename from features/logout/src/test/kotlin/io/element/android/x/features/logout/ExampleUnitTest.kt
rename to features/messages/src/test/kotlin/io/element/android/features/messages/ExampleUnitTest.kt
index b2b9726114..83296930a7 100644
--- a/features/logout/src/test/kotlin/io/element/android/x/features/logout/ExampleUnitTest.kt
+++ b/features/messages/src/test/kotlin/io/element/android/features/messages/ExampleUnitTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.logout
+package io.element.android.features.messages
import org.junit.Assert.assertEquals
import org.junit.Test
diff --git a/features/onboarding/build.gradle.kts b/features/onboarding/build.gradle.kts
index cdb646417a..fcefcb0068 100644
--- a/features/onboarding/build.gradle.kts
+++ b/features/onboarding/build.gradle.kts
@@ -22,18 +22,19 @@ plugins {
}
android {
- namespace = "io.element.android.x.features.onboarding"
+ namespace = "io.element.android.features.onboarding"
}
dependencies {
- implementation(project(":libraries:core"))
- implementation(project(":libraries:elementresources"))
- implementation(project(":libraries:ui-strings"))
- implementation(project(":libraries:designsystem"))
- implementation(project(":libraries:architecture"))
+ implementation(projects.libraries.core)
+ implementation(projects.libraries.elementresources)
+ implementation(projects.libraries.uiStrings)
+ implementation(projects.libraries.designsystem)
+ implementation(projects.libraries.architecture)
+ implementation(projects.libraries.testtags)
+ implementation(projects.libraries.androidutils)
implementation(libs.accompanist.pager)
implementation(libs.accompanist.pagerindicator)
- implementation(libs.appyx.core)
testImplementation(libs.test.junit)
androidTestImplementation(libs.test.junitext)
ksp(libs.showkase.processor)
diff --git a/features/logout/src/androidTest/kotlin/io/element/android/x/features/logout/ExampleInstrumentedTest.kt b/features/onboarding/src/androidTest/kotlin/io/element/android/features/login/ExampleInstrumentedTest.kt
similarity index 89%
rename from features/logout/src/androidTest/kotlin/io/element/android/x/features/logout/ExampleInstrumentedTest.kt
rename to features/onboarding/src/androidTest/kotlin/io/element/android/features/login/ExampleInstrumentedTest.kt
index ada1dafdcb..4ad31d222f 100644
--- a/features/logout/src/androidTest/kotlin/io/element/android/x/features/logout/ExampleInstrumentedTest.kt
+++ b/features/onboarding/src/androidTest/kotlin/io/element/android/features/login/ExampleInstrumentedTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.logout
+package io.element.android.features.login
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
@@ -33,6 +33,6 @@ class ExampleInstrumentedTest {
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
- assertEquals("io.element.android.x.features.login.test", appContext.packageName)
+ assertEquals("io.element.android.features.login.test", appContext.packageName)
}
}
diff --git a/features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/OnBoardingScreen.kt b/features/onboarding/src/main/kotlin/io/element/android/features/onboarding/OnBoardingScreen.kt
similarity index 94%
rename from features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/OnBoardingScreen.kt
rename to features/onboarding/src/main/kotlin/io/element/android/features/onboarding/OnBoardingScreen.kt
index fb88a76db0..f0f524cddf 100644
--- a/features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/OnBoardingScreen.kt
+++ b/features/onboarding/src/main/kotlin/io/element/android/features/onboarding/OnBoardingScreen.kt
@@ -16,7 +16,7 @@
@file:OptIn(ExperimentalMaterial3Api::class)
-package io.element.android.x.features.onboarding
+package io.element.android.features.onboarding
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Box
@@ -49,10 +49,12 @@ import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.HorizontalPager
import com.google.accompanist.pager.HorizontalPagerIndicator
import com.google.accompanist.pager.rememberPagerState
-import io.element.android.x.designsystem.components.VectorButton
+import io.element.android.libraries.designsystem.components.VectorButton
+import io.element.android.libraries.testtags.TestTags
+import io.element.android.libraries.testtags.testTag
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.libraries.ui.strings.R as StringR
@OptIn(ExperimentalPagerApi::class)
@Composable
@@ -127,6 +129,7 @@ fun OnBoardingScreen(
enabled = true,
modifier = Modifier
.align(CenterHorizontally)
+ .testTag(TestTags.onBoardingSignIn)
.padding(top = 16.dp)
)
}
diff --git a/features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/SplashCarouselState.kt b/features/onboarding/src/main/kotlin/io/element/android/features/onboarding/SplashCarouselState.kt
similarity index 94%
rename from features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/SplashCarouselState.kt
rename to features/onboarding/src/main/kotlin/io/element/android/features/onboarding/SplashCarouselState.kt
index 0d491bb236..f6523da7a6 100644
--- a/features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/SplashCarouselState.kt
+++ b/features/onboarding/src/main/kotlin/io/element/android/features/onboarding/SplashCarouselState.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.onboarding
+package io.element.android.features.onboarding
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
diff --git a/features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt b/features/onboarding/src/main/kotlin/io/element/android/features/onboarding/SplashCarouselStateFactory.kt
similarity index 96%
rename from features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt
rename to features/onboarding/src/main/kotlin/io/element/android/features/onboarding/SplashCarouselStateFactory.kt
index c25fb89815..fc06ba49b6 100644
--- a/features/onboarding/src/main/kotlin/io/element/android/x/features/onboarding/SplashCarouselStateFactory.kt
+++ b/features/onboarding/src/main/kotlin/io/element/android/features/onboarding/SplashCarouselStateFactory.kt
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.features.onboarding
+package io.element.android.features.onboarding
import androidx.annotation.DrawableRes
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.libraries.ui.strings.R as StringR
class SplashCarouselStateFactory {
fun create(): SplashCarouselState {
diff --git a/features/rageshake/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt b/features/onboarding/src/test/kotlin/io/element/android/features/login/ExampleUnitTest.kt
similarity index 95%
rename from features/rageshake/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt
rename to features/onboarding/src/test/kotlin/io/element/android/features/login/ExampleUnitTest.kt
index 39a03196df..ee6363e624 100644
--- a/features/rageshake/src/test/kotlin/io/element/android/x/features/login/ExampleUnitTest.kt
+++ b/features/onboarding/src/test/kotlin/io/element/android/features/login/ExampleUnitTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.login
+package io.element.android.features.login
import org.junit.Assert.assertEquals
import org.junit.Test
diff --git a/features/preferences/build.gradle.kts b/features/preferences/build.gradle.kts
index e8f5147642..92dcb5b13d 100644
--- a/features/preferences/build.gradle.kts
+++ b/features/preferences/build.gradle.kts
@@ -24,7 +24,7 @@ plugins {
}
android {
- namespace = "io.element.android.x.features.preferences"
+ namespace = "io.element.android.features.preferences"
}
anvil {
@@ -32,17 +32,16 @@ anvil {
}
dependencies {
- implementation(project(":anvilannotations"))
- anvil(project(":anvilcodegen"))
- implementation(project(":libraries:di"))
- implementation(project(":libraries:architecture"))
- implementation(project(":libraries:core"))
- implementation(project(":libraries:matrixui"))
- implementation(project(":features:rageshake"))
- implementation(project(":features:logout"))
- implementation(project(":libraries:designsystem"))
- implementation(project(":libraries:elementresources"))
- implementation(project(":libraries:ui-strings"))
+ implementation(projects.anvilannotations)
+ anvil(projects.anvilcodegen)
+ implementation(projects.libraries.architecture)
+ implementation(projects.libraries.core)
+ implementation(projects.libraries.matrixui)
+ implementation(projects.features.rageshake)
+ implementation(projects.features.logout)
+ implementation(projects.libraries.designsystem)
+ implementation(projects.libraries.elementresources)
+ implementation(projects.libraries.uiStrings)
implementation(libs.datetime)
implementation(libs.accompanist.placeholder)
testImplementation(libs.test.junit)
diff --git a/features/preferences/src/androidTest/kotlin/io/element/android/features/preferences/ExampleInstrumentedTest.kt b/features/preferences/src/androidTest/kotlin/io/element/android/features/preferences/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000000..3b0a6ee9ae
--- /dev/null
+++ b/features/preferences/src/androidTest/kotlin/io/element/android/features/preferences/ExampleInstrumentedTest.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.features.preferences
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.platform.app.InstrumentationRegistry
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("io.element.android.features.preferences.test", appContext.packageName)
+ }
+}
diff --git a/features/preferences/src/androidTest/kotlin/io/element/android/x/features/preferences/ExampleInstrumentedTest.kt b/features/preferences/src/androidTest/kotlin/io/element/android/x/features/preferences/ExampleInstrumentedTest.kt
deleted file mode 100644
index 6492607f4a..0000000000
--- a/features/preferences/src/androidTest/kotlin/io/element/android/x/features/preferences/ExampleInstrumentedTest.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2022 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.element.android.x.features.preferences
-
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.platform.app.InstrumentationRegistry
-import org.junit.Assert.assertEquals
-import org.junit.Test
-import org.junit.runner.RunWith
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * See [testing documentation](http://d.android.com/tools/testing).
- */
-@RunWith(AndroidJUnit4::class)
-class ExampleInstrumentedTest {
- @Test
- fun useAppContext() {
- // Context of the app under test.
- val appContext = InstrumentationRegistry.getInstrumentation().targetContext
- assertEquals("io.element.android.x.features.preferences.test", appContext.packageName)
- }
-}
diff --git a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/PreferencesFlowNode.kt b/features/preferences/src/main/kotlin/io/element/android/features/preferences/PreferencesFlowNode.kt
similarity index 81%
rename from features/preferences/src/main/kotlin/io/element/android/x/features/preferences/PreferencesFlowNode.kt
rename to features/preferences/src/main/kotlin/io/element/android/features/preferences/PreferencesFlowNode.kt
index 6a5397074f..5407072398 100644
--- a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/PreferencesFlowNode.kt
+++ b/features/preferences/src/main/kotlin/io/element/android/features/preferences/PreferencesFlowNode.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.preferences
+package io.element.android.features.preferences
import android.os.Parcelable
import androidx.compose.runtime.Composable
@@ -24,8 +24,9 @@ import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.navmodel.backstack.BackStack
-import io.element.android.x.architecture.createNode
-import io.element.android.x.features.preferences.root.PreferencesRootNode
+import io.element.android.features.preferences.root.PreferencesRootNode
+import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler
+import io.element.android.libraries.architecture.createNode
import kotlinx.parcelize.Parcelize
class PreferencesFlowNode(
@@ -59,6 +60,10 @@ class PreferencesFlowNode(
@Composable
override fun View(modifier: Modifier) {
- Children(navModel = backstack)
+ Children(
+ navModel = backstack,
+ modifier = modifier,
+ transitionHandler = rememberDefaultTransitionHandler()
+ )
}
}
diff --git a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootNode.kt b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootNode.kt
similarity index 78%
rename from features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootNode.kt
rename to features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootNode.kt
index 429609e207..cd9ed99302 100644
--- a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootNode.kt
+++ b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootNode.kt
@@ -14,11 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.preferences.root
+package io.element.android.features.preferences.root
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.collectAsState
-import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
@@ -26,9 +24,8 @@ import com.bumble.appyx.core.plugin.Plugin
import com.bumble.appyx.core.plugin.plugins
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
-import io.element.android.x.anvilannotations.ContributesNode
-import io.element.android.x.architecture.presenterConnector
-import io.element.android.x.di.SessionScope
+import io.element.android.anvilannotations.ContributesNode
+import io.element.android.libraries.di.SessionScope
@ContributesNode(SessionScope::class)
class PreferencesRootNode @AssistedInject constructor(
@@ -41,17 +38,16 @@ class PreferencesRootNode @AssistedInject constructor(
fun onOpenBugReport()
}
- private val presenterConnector = presenterConnector(presenter)
-
private fun onOpenBugReport() {
plugins().forEach { it.onOpenBugReport() }
}
@Composable
override fun View(modifier: Modifier) {
- val state by presenterConnector.stateFlow.collectAsState()
+ val state = presenter.present()
PreferencesRootView(
state = state,
+ modifier = modifier,
onBackPressed = this::navigateUp,
onOpenRageShake = this::onOpenBugReport
)
diff --git a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootPresenter.kt b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootPresenter.kt
similarity index 79%
rename from features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootPresenter.kt
rename to features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootPresenter.kt
index dbc233b805..b9df73853c 100644
--- a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootPresenter.kt
+++ b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootPresenter.kt
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package io.element.android.x.features.preferences.root
+package io.element.android.features.preferences.root
import androidx.compose.runtime.Composable
-import io.element.android.x.architecture.Async
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.features.logout.LogoutPreferencePresenter
-import io.element.android.x.features.rageshake.preferences.RageshakePreferencesPresenter
+import io.element.android.features.logout.LogoutPreferencePresenter
+import io.element.android.features.rageshake.preferences.RageshakePreferencesPresenter
+import io.element.android.libraries.architecture.Async
+import io.element.android.libraries.architecture.Presenter
import javax.inject.Inject
class PreferencesRootPresenter @Inject constructor(
diff --git a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootState.kt b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootState.kt
similarity index 70%
rename from features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootState.kt
rename to features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootState.kt
index 9339f00464..2bcc9fc549 100644
--- a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootState.kt
+++ b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootState.kt
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package io.element.android.x.features.preferences.root
+package io.element.android.features.preferences.root
-import io.element.android.x.architecture.Async
-import io.element.android.x.features.logout.LogoutPreferenceState
-import io.element.android.x.features.rageshake.preferences.RageshakePreferencesState
-import io.element.android.x.matrix.ui.model.MatrixUser
+import io.element.android.features.logout.LogoutPreferenceState
+import io.element.android.features.rageshake.preferences.RageshakePreferencesState
+import io.element.android.libraries.architecture.Async
+import io.element.android.libraries.matrix.ui.model.MatrixUser
data class PreferencesRootState(
val logoutState: LogoutPreferenceState,
diff --git a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootView.kt b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootView.kt
similarity index 73%
rename from features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootView.kt
rename to features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootView.kt
index 5d3e1dab7b..bab68974fb 100644
--- a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/root/PreferencesRootView.kt
+++ b/features/preferences/src/main/kotlin/io/element/android/features/preferences/root/PreferencesRootView.kt
@@ -14,20 +14,20 @@
* limitations under the License.
*/
-package io.element.android.x.features.preferences.root
+package io.element.android.features.preferences.root
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
-import io.element.android.x.architecture.Async
-import io.element.android.x.designsystem.components.preferences.PreferenceView
-import io.element.android.x.features.logout.LogoutPreferenceState
-import io.element.android.x.features.logout.LogoutPreferenceView
-import io.element.android.x.features.preferences.user.UserPreferences
-import io.element.android.x.features.rageshake.preferences.RageshakePreferencesState
-import io.element.android.x.features.rageshake.preferences.RageshakePreferencesView
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.features.logout.LogoutPreferenceState
+import io.element.android.features.logout.LogoutPreferenceView
+import io.element.android.features.preferences.user.UserPreferences
+import io.element.android.features.rageshake.preferences.RageshakePreferencesState
+import io.element.android.features.rageshake.preferences.RageshakePreferencesView
+import io.element.android.libraries.architecture.Async
+import io.element.android.libraries.designsystem.components.preferences.PreferenceView
+import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun PreferencesRootView(
diff --git a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/user/UserPreferences.kt b/features/preferences/src/main/kotlin/io/element/android/features/preferences/user/UserPreferences.kt
similarity index 82%
rename from features/preferences/src/main/kotlin/io/element/android/x/features/preferences/user/UserPreferences.kt
rename to features/preferences/src/main/kotlin/io/element/android/features/preferences/user/UserPreferences.kt
index 5422a3f3f5..f068e71f3b 100644
--- a/features/preferences/src/main/kotlin/io/element/android/x/features/preferences/user/UserPreferences.kt
+++ b/features/preferences/src/main/kotlin/io/element/android/features/preferences/user/UserPreferences.kt
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package io.element.android.x.features.preferences.user
+package io.element.android.features.preferences.user
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
-import io.element.android.x.architecture.Async
-import io.element.android.x.matrix.ui.components.MatrixUserHeader
-import io.element.android.x.matrix.ui.model.MatrixUser
+import io.element.android.libraries.architecture.Async
+import io.element.android.libraries.matrix.ui.components.MatrixUserHeader
+import io.element.android.libraries.matrix.ui.model.MatrixUser
@Composable
fun UserPreferences(
diff --git a/features/messages/src/test/kotlin/io/element/android/x/features/messages/ExampleUnitTest.kt b/features/preferences/src/test/kotlin/io/element/android/features/preferences/ExampleUnitTest.kt
similarity index 95%
rename from features/messages/src/test/kotlin/io/element/android/x/features/messages/ExampleUnitTest.kt
rename to features/preferences/src/test/kotlin/io/element/android/features/preferences/ExampleUnitTest.kt
index 87aedb9588..3b615c83e9 100644
--- a/features/messages/src/test/kotlin/io/element/android/x/features/messages/ExampleUnitTest.kt
+++ b/features/preferences/src/test/kotlin/io/element/android/features/preferences/ExampleUnitTest.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.messages
+package io.element.android.features.preferences
import org.junit.Assert.assertEquals
import org.junit.Test
diff --git a/features/preferences/src/test/kotlin/io/element/android/x/features/preferences/ExampleUnitTest.kt b/features/preferences/src/test/kotlin/io/element/android/x/features/preferences/ExampleUnitTest.kt
deleted file mode 100644
index fda74bd660..0000000000
--- a/features/preferences/src/test/kotlin/io/element/android/x/features/preferences/ExampleUnitTest.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2022 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.element.android.x.features.preferences
-
-import org.junit.Assert.assertEquals
-import org.junit.Test
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * See [testing documentation](http://d.android.com/tools/testing).
- */
-class ExampleUnitTest {
- @Test
- fun addition_isCorrect() {
- assertEquals(4, 2 + 2)
- }
-}
diff --git a/features/rageshake/build.gradle.kts b/features/rageshake/build.gradle.kts
index b3f8b14ded..ecb333289b 100644
--- a/features/rageshake/build.gradle.kts
+++ b/features/rageshake/build.gradle.kts
@@ -24,7 +24,7 @@ plugins {
}
android {
- namespace = "io.element.android.x.features.rageshake"
+ namespace = "io.element.android.features.rageshake"
}
anvil {
@@ -32,14 +32,14 @@ anvil {
}
dependencies {
- implementation(project(":libraries:core"))
- anvil(project(":anvilcodegen"))
- implementation(project(":libraries:di"))
- implementation(project(":libraries:architecture"))
- implementation(project(":anvilannotations"))
- implementation(project(":libraries:designsystem"))
- implementation(project(":libraries:elementresources"))
- implementation(project(":libraries:ui-strings"))
+ anvil(projects.anvilcodegen)
+ implementation(projects.anvilannotations)
+ implementation(projects.libraries.androidutils)
+ implementation(projects.libraries.core)
+ implementation(projects.libraries.architecture)
+ implementation(projects.libraries.designsystem)
+ implementation(projects.libraries.elementresources)
+ implementation(projects.libraries.uiStrings)
implementation(libs.squareup.seismic)
implementation(libs.androidx.datastore.preferences)
implementation(libs.coil)
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/BugReporterMultipartBody.java b/features/rageshake/src/main/java/io/element/android/features/rageshake/reporter/BugReporterMultipartBody.java
similarity index 99%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/BugReporterMultipartBody.java
rename to features/rageshake/src/main/java/io/element/android/features/rageshake/reporter/BugReporterMultipartBody.java
index 275ea89298..fdd858abfd 100755
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/BugReporterMultipartBody.java
+++ b/features/rageshake/src/main/java/io/element/android/features/rageshake/reporter/BugReporterMultipartBody.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.reporter;
+package io.element.android.features.rageshake.reporter;
import java.io.IOException;
import java.util.ArrayList;
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportEvents.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportEvents.kt
similarity index 94%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportEvents.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportEvents.kt
index c8bbfe2741..0045f29a2c 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportEvents.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportEvents.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.bugreport
+package io.element.android.features.rageshake.bugreport
sealed interface BugReportEvents {
object SendBugReport : BugReportEvents
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportNode.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportNode.kt
similarity index 75%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportNode.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportNode.kt
index c01f153ddd..8c0ffceee8 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportNode.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportNode.kt
@@ -14,11 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.bugreport
+package io.element.android.features.rageshake.bugreport
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.collectAsState
-import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
@@ -26,26 +24,23 @@ import com.bumble.appyx.core.plugin.Plugin
import com.bumble.appyx.core.plugin.plugins
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
-import io.element.android.x.anvilannotations.ContributesNode
-import io.element.android.x.architecture.presenterConnector
-import io.element.android.x.di.AppScope
+import io.element.android.anvilannotations.ContributesNode
+import io.element.android.libraries.di.AppScope
@ContributesNode(AppScope::class)
class BugReportNode @AssistedInject constructor(
@Assisted buildContext: BuildContext,
@Assisted plugins: List,
- presenter: BugReportPresenter,
+ private val presenter: BugReportPresenter,
) : Node(buildContext, plugins = plugins) {
- private val presenterConnector = presenterConnector(presenter)
-
interface Callback : Plugin {
fun onBugReportSent()
}
@Composable
override fun View(modifier: Modifier) {
- val state by presenterConnector.stateFlow.collectAsState()
+ val state = presenter.present()
BugReportView(
state = state,
modifier = modifier,
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportPresenter.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportPresenter.kt
similarity index 91%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportPresenter.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportPresenter.kt
index c6f2f473e3..cd555e375a 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportPresenter.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportPresenter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.bugreport
+package io.element.android.features.rageshake.bugreport
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
@@ -24,13 +24,13 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.core.net.toUri
-import io.element.android.x.architecture.Async
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.features.rageshake.crash.CrashDataStore
-import io.element.android.x.features.rageshake.logs.VectorFileLogger
-import io.element.android.x.features.rageshake.reporter.BugReporter
-import io.element.android.x.features.rageshake.reporter.ReportType
-import io.element.android.x.features.rageshake.screenshot.ScreenshotHolder
+import io.element.android.features.rageshake.crash.CrashDataStore
+import io.element.android.features.rageshake.logs.VectorFileLogger
+import io.element.android.features.rageshake.reporter.BugReporter
+import io.element.android.features.rageshake.reporter.ReportType
+import io.element.android.features.rageshake.screenshot.ScreenshotHolder
+import io.element.android.libraries.architecture.Async
+import io.element.android.libraries.architecture.Presenter
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import javax.inject.Inject
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportState.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportState.kt
similarity index 93%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportState.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportState.kt
index 80912a7923..1f66bb58eb 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportState.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportState.kt
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.bugreport
+package io.element.android.features.rageshake.bugreport
import android.os.Parcelable
-import io.element.android.x.architecture.Async
+import io.element.android.libraries.architecture.Async
import kotlinx.parcelize.Parcelize
data class BugReportState(
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportView.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportView.kt
similarity index 93%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportView.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportView.kt
index 009ca812ef..8a32f1ac7a 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/bugreport/BugReportView.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/bugreport/BugReportView.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.bugreport
+package io.element.android.features.rageshake.bugreport
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -50,12 +50,12 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.AsyncImage
import coil.request.ImageRequest
-import io.element.android.x.architecture.Async
-import io.element.android.x.core.compose.LogCompositions
-import io.element.android.x.core.compose.textFieldState
-import io.element.android.x.designsystem.components.LabelledCheckbox
-import io.element.android.x.designsystem.components.dialogs.ErrorDialog
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.libraries.architecture.Async
+import io.element.android.libraries.designsystem.components.LabelledCheckbox
+import io.element.android.libraries.designsystem.components.dialogs.ErrorDialog
+import io.element.android.libraries.designsystem.components.form.textFieldState
+import io.element.android.libraries.designsystem.utils.LogCompositions
+import io.element.android.libraries.ui.strings.R as StringR
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -111,7 +111,9 @@ fun BugReportView(
.padding(horizontal = 16.dp, vertical = 16.dp),
fontSize = 16.sp,
)
- var descriptionFieldState by textFieldState(stateValue = state.formState.description)
+ var descriptionFieldState by textFieldState(
+ stateValue = state.formState.description
+ )
Column(
// modifier = Modifier.weight(1f),
) {
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/CrashDataStore.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/CrashDataStore.kt
similarity index 93%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/CrashDataStore.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/CrashDataStore.kt
index 07783f3e0b..5038d520b2 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/CrashDataStore.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/CrashDataStore.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.crash
+package io.element.android.features.rageshake.crash
import android.content.Context
import androidx.datastore.core.DataStore
@@ -23,12 +23,12 @@ import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
-import io.element.android.x.core.bool.orFalse
-import io.element.android.x.di.ApplicationContext
-import javax.inject.Inject
+import io.element.android.libraries.core.bool.orFalse
+import io.element.android.libraries.di.ApplicationContext
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.runBlocking
+import javax.inject.Inject
private val Context.dataStore: DataStore by preferencesDataStore(name = "elementx_crash")
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/VectorUncaughtExceptionHandler.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/VectorUncaughtExceptionHandler.kt
similarity index 96%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/VectorUncaughtExceptionHandler.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/VectorUncaughtExceptionHandler.kt
index 08a23da860..dfd09a203e 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/VectorUncaughtExceptionHandler.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/VectorUncaughtExceptionHandler.kt
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.crash
+package io.element.android.features.rageshake.crash
import android.content.Context
import android.os.Build
-import io.element.android.x.core.data.tryOrNull
+import io.element.android.libraries.core.data.tryOrNull
+import timber.log.Timber
import java.io.PrintWriter
import java.io.StringWriter
-import timber.log.Timber
class VectorUncaughtExceptionHandler(
context: Context
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionEvents.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionEvents.kt
similarity index 92%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionEvents.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionEvents.kt
index 93330b4513..0175e1fde2 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionEvents.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionEvents.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.crash.ui
+package io.element.android.features.rageshake.crash.ui
sealed interface CrashDetectionEvents {
object ResetAllCrashData : CrashDetectionEvents
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionPresenter.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionPresenter.kt
similarity index 87%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionPresenter.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionPresenter.kt
index 3549bf3cb7..1f6300a5ac 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionPresenter.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionPresenter.kt
@@ -14,18 +14,19 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.crash.ui
+package io.element.android.features.rageshake.crash.ui
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.rememberCoroutineScope
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.features.rageshake.crash.CrashDataStore
+import io.element.android.features.rageshake.crash.CrashDataStore
+import io.element.android.libraries.architecture.Presenter
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import javax.inject.Inject
-class CrashDetectionPresenter @Inject constructor(private val crashDataStore: CrashDataStore) : Presenter {
+class CrashDetectionPresenter @Inject constructor(private val crashDataStore: CrashDataStore) :
+ Presenter {
@Composable
override fun present(): CrashDetectionState {
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionScreen.kt
similarity index 84%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionScreen.kt
index 494cc0d843..e3c58ab515 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionScreen.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionScreen.kt
@@ -14,21 +14,24 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.crash.ui
+package io.element.android.features.rageshake.crash.ui
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
-import io.element.android.x.core.compose.LogCompositions
-import io.element.android.x.designsystem.components.dialogs.ConfirmationDialog
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
+import io.element.android.libraries.designsystem.utils.LogCompositions
+import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun CrashDetectionView(
state: CrashDetectionState,
onOpenBugReport: () -> Unit = { },
) {
- LogCompositions(tag = "Crash", msg = "CrashDetectionScreen")
+ LogCompositions(
+ tag = "Crash",
+ msg = "CrashDetectionScreen"
+ )
fun onPopupDismissed() {
state.eventSink(CrashDetectionEvents.ResetAllCrashData)
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionState.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionState.kt
similarity index 92%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionState.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionState.kt
index 52774c4cc9..bff17b246a 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/crash/ui/CrashDetectionState.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/crash/ui/CrashDetectionState.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.crash.ui
+package io.element.android.features.rageshake.crash.ui
data class CrashDetectionState(
val crashDetected: Boolean = false,
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionEvents.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionEvents.kt
similarity index 88%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionEvents.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionEvents.kt
index 0ba2a26bae..9bc787d4ac 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionEvents.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionEvents.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.detection
+package io.element.android.features.rageshake.detection
-import io.element.android.x.core.screenshot.ImageResult
+import io.element.android.features.rageshake.screenshot.ImageResult
sealed interface RageshakeDetectionEvents {
object Dismiss : RageshakeDetectionEvents
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionPresenter.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionPresenter.kt
similarity index 89%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionPresenter.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionPresenter.kt
index 62e974703d..c91d584021 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionPresenter.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionPresenter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.detection
+package io.element.android.features.rageshake.detection
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@@ -23,12 +23,12 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.core.screenshot.ImageResult
-import io.element.android.x.features.rageshake.preferences.RageshakePreferencesEvents
-import io.element.android.x.features.rageshake.preferences.RageshakePreferencesPresenter
-import io.element.android.x.features.rageshake.rageshake.RageShake
-import io.element.android.x.features.rageshake.screenshot.ScreenshotHolder
+import io.element.android.features.rageshake.preferences.RageshakePreferencesEvents
+import io.element.android.features.rageshake.preferences.RageshakePreferencesPresenter
+import io.element.android.features.rageshake.rageshake.RageShake
+import io.element.android.features.rageshake.screenshot.ImageResult
+import io.element.android.features.rageshake.screenshot.ScreenshotHolder
+import io.element.android.libraries.architecture.Presenter
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import timber.log.Timber
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionState.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionState.kt
similarity index 86%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionState.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionState.kt
index d32b326dd3..4c99ef264b 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionState.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionState.kt
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.detection
+package io.element.android.features.rageshake.detection
import androidx.compose.runtime.Stable
-import io.element.android.x.features.rageshake.preferences.RageshakePreferencesState
+import io.element.android.features.rageshake.preferences.RageshakePreferencesState
@Stable
data class RageshakeDetectionState(
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionView.kt
similarity index 82%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionView.kt
index c438c0a600..de99427763 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/detection/RageshakeDetectionView.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/detection/RageshakeDetectionView.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.detection
+package io.element.android.features.rageshake.detection
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@@ -23,20 +23,23 @@ import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.Lifecycle
-import io.element.android.x.core.compose.LogCompositions
-import io.element.android.x.core.compose.OnLifecycleEvent
-import io.element.android.x.core.hardware.vibrate
-import io.element.android.x.core.screenshot.ImageResult
-import io.element.android.x.core.screenshot.screenshot
-import io.element.android.x.designsystem.components.dialogs.ConfirmationDialog
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.features.rageshake.screenshot.ImageResult
+import io.element.android.features.rageshake.screenshot.screenshot
+import io.element.android.libraries.androidutils.hardware.vibrate
+import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
+import io.element.android.libraries.designsystem.utils.LogCompositions
+import io.element.android.libraries.designsystem.utils.OnLifecycleEvent
+import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun RageshakeDetectionView(
state: RageshakeDetectionState,
onOpenBugReport: () -> Unit = { },
) {
- LogCompositions(tag = "Rageshake", msg = "RageshakeDetectionScreen")
+ LogCompositions(
+ tag = "Rageshake",
+ msg = "RageshakeDetectionScreen"
+ )
val eventSink = state.eventSink
val context = LocalContext.current
OnLifecycleEvent { _, event ->
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/logs/LogFormatter.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/logs/LogFormatter.kt
similarity index 97%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/logs/LogFormatter.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/logs/LogFormatter.kt
index 007c87f3e1..2f6a50c077 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/logs/LogFormatter.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/logs/LogFormatter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.logs
+package io.element.android.features.rageshake.logs
import java.io.PrintWriter
import java.io.StringWriter
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/logs/VectorFileLogger.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/logs/VectorFileLogger.kt
similarity index 88%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/logs/VectorFileLogger.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/logs/VectorFileLogger.kt
index 5b39b79cf5..1d8d0b349b 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/logs/VectorFileLogger.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/logs/VectorFileLogger.kt
@@ -14,22 +14,24 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.logs
+package io.element.android.features.rageshake.logs
import android.content.Context
import android.util.Log
-import io.element.android.x.core.data.tryOrNull
+import io.element.android.libraries.androidutils.file.safeDelete
+import io.element.android.libraries.core.data.tryOrNull
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
+import timber.log.Timber
import java.io.File
import java.io.PrintWriter
import java.io.StringWriter
import java.util.logging.FileHandler
import java.util.logging.Level
import java.util.logging.Logger
-import kotlinx.coroutines.DelicateCoroutinesApi
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.launch
-import timber.log.Timber
/**
* Will be planted in Timber.
@@ -37,6 +39,7 @@ import timber.log.Timber
class VectorFileLogger(
context: Context,
// private val vectorPreferences: VectorPreferences
+ private val dispatcher: CoroutineDispatcher = Dispatchers.IO,
) : Timber.Tree() {
companion object {
@@ -82,10 +85,12 @@ class VectorFileLogger(
for (i in 0..15) {
val file = File(cacheDirectory, "elementLogs.${i}.txt")
- tryOrNull { file.delete() }
+ file.safeDelete()
}
- fileHandler = tryOrNull("Failed to initialize FileLogger") {
+ fileHandler = tryOrNull(
+ onError = { Timber.e(it, "Failed to initialize FileLogger") }
+ ) {
FileHandler(
cacheDirectory.absolutePath + "/" + fileNamePrefix + ".%g.txt",
maxLogSizeByte,
@@ -99,14 +104,14 @@ class VectorFileLogger(
fun reset() {
// Delete all files
getLogFiles().map {
- tryOrNull { it.delete() }
+ it.safeDelete()
}
}
@OptIn(DelicateCoroutinesApi::class)
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
fileHandler ?: return
- GlobalScope.launch(Dispatchers.IO) {
+ GlobalScope.launch(dispatcher) {
if (skipLog(priority)) return@launch
if (t != null) {
logToFile(t)
@@ -134,7 +139,9 @@ class VectorFileLogger(
* @return The list of files with logs.
*/
fun getLogFiles(): List {
- return tryOrNull("## getLogFiles() failed") {
+ return tryOrNull(
+ onError = { Timber.e(it, "## getLogFiles() failed") }
+ ) {
fileHandler
?.flush()
?.let { 0 until logRotationCount }
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesEvents.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesEvents.kt
similarity index 93%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesEvents.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesEvents.kt
index ae178e9f2f..39b788e003 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesEvents.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesEvents.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.preferences
+package io.element.android.features.rageshake.preferences
sealed interface RageshakePreferencesEvents {
data class SetSensitivity(val sensitivity: Float) : RageshakePreferencesEvents
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesPresenter.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesPresenter.kt
similarity index 90%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesPresenter.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesPresenter.kt
index e435a1a756..119e37d5e5 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesPresenter.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesPresenter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.preferences
+package io.element.android.features.rageshake.preferences
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
@@ -22,9 +22,9 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.features.rageshake.rageshake.RageShake
-import io.element.android.x.features.rageshake.rageshake.RageshakeDataStore
+import io.element.android.features.rageshake.rageshake.RageShake
+import io.element.android.features.rageshake.rageshake.RageshakeDataStore
+import io.element.android.libraries.architecture.Presenter
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import javax.inject.Inject
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesState.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesState.kt
similarity index 93%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesState.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesState.kt
index 5a71b2a42f..e6c45ddf83 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesState.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesState.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.preferences
+package io.element.android.features.rageshake.preferences
data class RageshakePreferencesState(
val isEnabled: Boolean = false,
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesView.kt
similarity index 86%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesView.kt
index 43f7f94d03..ce5d9bcab8 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/preferences/RageshakePreferencesView.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesView.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.preferences
+package io.element.android.features.rageshake.preferences
import androidx.compose.foundation.layout.Column
import androidx.compose.material.icons.Icons
@@ -23,11 +23,11 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
-import io.element.android.x.designsystem.components.preferences.PreferenceCategory
-import io.element.android.x.designsystem.components.preferences.PreferenceSlide
-import io.element.android.x.designsystem.components.preferences.PreferenceSwitch
-import io.element.android.x.designsystem.components.preferences.PreferenceText
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
+import io.element.android.libraries.designsystem.components.preferences.PreferenceSlide
+import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
+import io.element.android.libraries.designsystem.components.preferences.PreferenceText
+import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun RageshakePreferencesView(
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/rageshake/RageShake.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/rageshake/RageShake.kt
similarity index 90%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/rageshake/RageShake.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/rageshake/RageShake.kt
index ae9c3531c5..691da5dbe2 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/rageshake/RageShake.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/rageshake/RageShake.kt
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.rageshake
+package io.element.android.features.rageshake.rageshake
import android.content.Context
import android.hardware.Sensor
import android.hardware.SensorManager
import androidx.core.content.getSystemService
import com.squareup.seismic.ShakeDetector
-import io.element.android.x.di.AppScope
-import io.element.android.x.di.ApplicationContext
-import io.element.android.x.di.SingleIn
+import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.di.ApplicationContext
+import io.element.android.libraries.di.SingleIn
import javax.inject.Inject
@SingleIn(AppScope::class)
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/rageshake/RageshakeDataStore.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/rageshake/RageshakeDataStore.kt
similarity index 92%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/rageshake/RageshakeDataStore.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/rageshake/RageshakeDataStore.kt
index 35d0198b9e..1bf133d42f 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/rageshake/RageshakeDataStore.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/rageshake/RageshakeDataStore.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.rageshake
+package io.element.android.features.rageshake.rageshake
import android.content.Context
import androidx.datastore.core.DataStore
@@ -23,11 +23,11 @@ import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.floatPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
-import io.element.android.x.core.bool.orTrue
-import io.element.android.x.di.ApplicationContext
-import javax.inject.Inject
+import io.element.android.libraries.core.bool.orTrue
+import io.element.android.libraries.di.ApplicationContext
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
+import javax.inject.Inject
private val Context.dataStore: DataStore by preferencesDataStore(name = "elementx_rageshake")
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/BugReporter.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/reporter/BugReporter.kt
similarity index 94%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/BugReporter.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/reporter/BugReporter.kt
index fe3ca71720..6cf888a44e 100755
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/BugReporter.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/reporter/BugReporter.kt
@@ -14,26 +14,21 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.reporter
+package io.element.android.features.rageshake.reporter
import android.content.Context
import android.os.Build
-import io.element.android.x.core.extensions.toOnOff
-import io.element.android.x.core.file.compressFile
-import io.element.android.x.core.mimetype.MimeTypes
-import io.element.android.x.di.ApplicationContext
-import io.element.android.x.features.rageshake.R
-import io.element.android.x.features.rageshake.crash.CrashDataStore
-import io.element.android.x.features.rageshake.logs.VectorFileLogger
-import io.element.android.x.features.rageshake.screenshot.ScreenshotHolder
-import java.io.File
-import java.io.IOException
-import java.io.OutputStreamWriter
-import java.net.HttpURLConnection
-import java.util.Locale
-import javax.inject.Inject
+import io.element.android.features.rageshake.R
+import io.element.android.features.rageshake.crash.CrashDataStore
+import io.element.android.features.rageshake.logs.VectorFileLogger
+import io.element.android.features.rageshake.screenshot.ScreenshotHolder
+import io.element.android.libraries.androidutils.file.compressFile
+import io.element.android.libraries.androidutils.file.safeDelete
+import io.element.android.libraries.core.coroutine.CoroutineDispatchers
+import io.element.android.libraries.core.extensions.toOnOff
+import io.element.android.libraries.core.mimetype.MimeTypes
+import io.element.android.libraries.di.ApplicationContext
import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -46,6 +41,12 @@ import okhttp3.Response
import org.json.JSONException
import org.json.JSONObject
import timber.log.Timber
+import java.io.File
+import java.io.IOException
+import java.io.OutputStreamWriter
+import java.net.HttpURLConnection
+import java.util.Locale
+import javax.inject.Inject
/**
* BugReporter creates and sends the bug reports.
@@ -54,6 +55,7 @@ class BugReporter @Inject constructor(
@ApplicationContext private val context: Context,
private val screenshotHolder: ScreenshotHolder,
private val crashDataStore: CrashDataStore,
+ private val coroutineDispatchers: CoroutineDispatchers,
/*
private val activeSessionHolder: ActiveSessionHolder,
private val versionProvider: VersionProvider,
@@ -168,7 +170,7 @@ class BugReporter @Inject constructor(
coroutineScope.launch {
var serverError: String? = null
var reportURL: String? = null
- withContext(Dispatchers.IO) {
+ withContext(coroutineDispatchers.io) {
var bugDescription = theBugDescription
val crashCallStack = crashDataStore.crashInfo().first()
@@ -235,10 +237,10 @@ class BugReporter @Inject constructor(
if (!mIsCancelled) {
val text = when (reportType) {
- ReportType.BUG_REPORT -> "[ElementX] $bugDescription"
- ReportType.SUGGESTION -> "[ElementX] [Suggestion] $bugDescription"
- ReportType.SPACE_BETA_FEEDBACK -> "[ElementX] [spaces-feedback] $bugDescription"
- ReportType.THREADS_BETA_FEEDBACK -> "[ElementX] [threads-feedback] $bugDescription"
+ ReportType.BUG_REPORT -> bugDescription
+ ReportType.SUGGESTION -> "[Suggestion] $bugDescription"
+ ReportType.SPACE_BETA_FEEDBACK -> "[spaces-feedback] $bugDescription"
+ ReportType.THREADS_BETA_FEEDBACK -> "[threads-feedback] $bugDescription"
ReportType.AUTO_UISI_SENDER,
ReportType.AUTO_UISI -> bugDescription
}
@@ -298,9 +300,6 @@ class BugReporter @Inject constructor(
// builder.addFormDataPart("label", buildMeta.flavorDescription)
// builder.addFormDataPart("label", buildMeta.gitBranchName)
- // Special for ElementX
- builder.addFormDataPart("label", "[ElementX]")
-
// Possible values for BuildConfig.BUILD_TYPE: "debug", "nightly", "release".
// builder.addFormDataPart("label", BuildConfig.BUILD_TYPE)
@@ -421,12 +420,12 @@ class BugReporter @Inject constructor(
}
}
- withContext(Dispatchers.Main) {
+ withContext(coroutineDispatchers.main) {
mBugReportCall = null
// delete when the bug report has been successfully sent
for (file in mBugReportFiles) {
- file.delete()
+ file.safeDelete()
}
if (null != listener) {
@@ -501,7 +500,7 @@ class BugReporter @Inject constructor(
val logCatErrFile = File(context.cacheDir.absolutePath, if (isErrorLogcat) LOG_CAT_ERROR_FILENAME else LOG_CAT_FILENAME)
if (logCatErrFile.exists()) {
- logCatErrFile.delete()
+ logCatErrFile.safeDelete()
}
try {
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/ReportType.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/reporter/ReportType.kt
similarity index 92%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/ReportType.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/reporter/ReportType.kt
index 6523f99e2b..a29d29e702 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/reporter/ReportType.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/reporter/ReportType.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.reporter
+package io.element.android.features.rageshake.reporter
enum class ReportType {
BUG_REPORT,
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/screenshot/Screenshot.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/screenshot/Screenshot.kt
similarity index 96%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/screenshot/Screenshot.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/screenshot/Screenshot.kt
index 26a2e57c9e..803c51f2da 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/screenshot/Screenshot.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/screenshot/Screenshot.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.screenshot
+package io.element.android.features.rageshake.screenshot
import android.app.Activity
import android.graphics.Bitmap
diff --git a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/screenshot/ScreenshotHolder.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/screenshot/ScreenshotHolder.kt
similarity index 74%
rename from features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/screenshot/ScreenshotHolder.kt
rename to features/rageshake/src/main/kotlin/io/element/android/features/rageshake/screenshot/ScreenshotHolder.kt
index 00f9d74e96..33674c07fb 100644
--- a/features/rageshake/src/main/kotlin/io/element/android/x/features/rageshake/screenshot/ScreenshotHolder.kt
+++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/screenshot/ScreenshotHolder.kt
@@ -14,14 +14,15 @@
* limitations under the License.
*/
-package io.element.android.x.features.rageshake.screenshot
+package io.element.android.features.rageshake.screenshot
import android.content.Context
import android.graphics.Bitmap
-import io.element.android.x.core.bitmap.writeBitmap
-import io.element.android.x.di.AppScope
-import io.element.android.x.di.ApplicationContext
-import io.element.android.x.di.SingleIn
+import io.element.android.libraries.androidutils.bitmap.writeBitmap
+import io.element.android.libraries.androidutils.file.safeDelete
+import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.di.ApplicationContext
+import io.element.android.libraries.di.SingleIn
import java.io.File
import javax.inject.Inject
@@ -38,6 +39,6 @@ class ScreenshotHolder @Inject constructor(
fun getFile() = file.takeIf { it.exists() && it.length() > 0 }
fun reset() {
- file.delete()
+ file.safeDelete()
}
}
diff --git a/features/rageshake/src/main/res/values/strings.xml b/features/rageshake/src/main/res/values/strings.xml
index 846f0ca048..48eff44d57 100644
--- a/features/rageshake/src/main/res/values/strings.xml
+++ b/features/rageshake/src/main/res/values/strings.xml
@@ -19,7 +19,7 @@
https://riot.im/bugreports/submit
- riot-android
+ element-x-android
element-auto-uisi
diff --git a/features/rageshake/src/test/kotlin/io/element/android/features/login/ExampleUnitTest.kt b/features/rageshake/src/test/kotlin/io/element/android/features/login/ExampleUnitTest.kt
new file mode 100644
index 0000000000..ee6363e624
--- /dev/null
+++ b/features/rageshake/src/test/kotlin/io/element/android/features/login/ExampleUnitTest.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.features.login
+
+import org.junit.Assert.assertEquals
+import org.junit.Test
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
diff --git a/features/roomlist/build.gradle.kts b/features/roomlist/build.gradle.kts
index fe2fd050fe..fc0402eafc 100644
--- a/features/roomlist/build.gradle.kts
+++ b/features/roomlist/build.gradle.kts
@@ -23,7 +23,7 @@ plugins {
}
android {
- namespace = "io.element.android.x.features.roomlist"
+ namespace = "io.element.android.features.roomlist"
}
anvil {
@@ -31,18 +31,16 @@ anvil {
}
dependencies {
- anvil(project(":anvilcodegen"))
- implementation(project(":anvilannotations"))
+ anvil(projects.anvilcodegen)
+ implementation(projects.anvilannotations)
- implementation(project(":libraries:di"))
- implementation(project(":libraries:core"))
- implementation(project(":libraries:architecture"))
- implementation(project(":libraries:matrix"))
- implementation(project(":libraries:matrixui"))
- implementation(project(":libraries:designsystem"))
- implementation(libs.appyx.core)
- implementation(project(":libraries:elementresources"))
- implementation(project(":libraries:ui-strings"))
+ implementation(projects.libraries.core)
+ implementation(projects.libraries.architecture)
+ implementation(projects.libraries.matrix)
+ implementation(projects.libraries.matrixui)
+ implementation(projects.libraries.designsystem)
+ implementation(projects.libraries.elementresources)
+ implementation(projects.libraries.uiStrings)
implementation(libs.datetime)
implementation(libs.accompanist.placeholder)
@@ -51,7 +49,7 @@ dependencies {
testImplementation(libs.molecule.runtime)
testImplementation(libs.test.truth)
testImplementation(libs.test.turbine)
- testImplementation(project(":libraries:matrixtest"))
+ testImplementation(projects.libraries.matrixtest)
androidTestImplementation(libs.test.junitext)
diff --git a/features/roomlist/src/androidTest/kotlin/io/element/android/features/roomlist/ExampleInstrumentedTest.kt b/features/roomlist/src/androidTest/kotlin/io/element/android/features/roomlist/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000000..e66201078b
--- /dev/null
+++ b/features/roomlist/src/androidTest/kotlin/io/element/android/features/roomlist/ExampleInstrumentedTest.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.features.roomlist
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.platform.app.InstrumentationRegistry
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("io.element.android.features.roomlist.test", appContext.packageName)
+ }
+}
diff --git a/features/roomlist/src/androidTest/kotlin/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt b/features/roomlist/src/androidTest/kotlin/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt
deleted file mode 100644
index 487d999142..0000000000
--- a/features/roomlist/src/androidTest/kotlin/io/element/android/x/features/roomlist/ExampleInstrumentedTest.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2022 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.element.android.x.features.roomlist
-
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.platform.app.InstrumentationRegistry
-import org.junit.Assert.assertEquals
-import org.junit.Test
-import org.junit.runner.RunWith
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * See [testing documentation](http://d.android.com/tools/testing).
- */
-@RunWith(AndroidJUnit4::class)
-class ExampleInstrumentedTest {
- @Test
- fun useAppContext() {
- // Context of the app under test.
- val appContext = InstrumentationRegistry.getInstrumentation().targetContext
- assertEquals("io.element.android.x.features.roomlist.test", appContext.packageName)
- }
-}
diff --git a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/LastMessageFormatter.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/LastMessageFormatter.kt
similarity index 98%
rename from features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/LastMessageFormatter.kt
rename to features/roomlist/src/main/kotlin/io/element/android/features/roomlist/LastMessageFormatter.kt
index 5e90a52898..037ba5200d 100644
--- a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/LastMessageFormatter.kt
+++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/LastMessageFormatter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.roomlist
+package io.element.android.features.roomlist
import android.text.format.DateFormat
import android.text.format.DateUtils
diff --git a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListNode.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListNode.kt
similarity index 77%
rename from features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListNode.kt
rename to features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListNode.kt
index 246545588f..ecf6dc3c98 100644
--- a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListNode.kt
+++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListNode.kt
@@ -14,11 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.roomlist
+package io.element.android.features.roomlist
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.collectAsState
-import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
@@ -26,16 +24,15 @@ import com.bumble.appyx.core.plugin.Plugin
import com.bumble.appyx.core.plugin.plugins
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
-import io.element.android.x.anvilannotations.ContributesNode
-import io.element.android.x.architecture.presenterConnector
-import io.element.android.x.di.SessionScope
-import io.element.android.x.matrix.core.RoomId
+import io.element.android.anvilannotations.ContributesNode
+import io.element.android.libraries.di.SessionScope
+import io.element.android.libraries.matrix.core.RoomId
@ContributesNode(SessionScope::class)
class RoomListNode @AssistedInject constructor(
@Assisted buildContext: BuildContext,
@Assisted plugins: List,
- presenter: RoomListPresenter,
+ private val presenter: RoomListPresenter,
) : Node(buildContext, plugins = plugins) {
interface Callback : Plugin {
@@ -43,8 +40,6 @@ class RoomListNode @AssistedInject constructor(
fun onSettingsClicked()
}
- private val connector = presenterConnector(presenter)
-
private fun onRoomClicked(roomId: RoomId) {
plugins().forEach { it.onRoomClicked(roomId) }
}
@@ -55,9 +50,10 @@ class RoomListNode @AssistedInject constructor(
@Composable
override fun View(modifier: Modifier) {
- val state by connector.stateFlow.collectAsState()
+ val state = presenter.present()
RoomListView(
state = state,
+ modifier = modifier,
onRoomClicked = this::onRoomClicked,
onOpenSettings = this::onOpenSettings
)
diff --git a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListPresenter.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListPresenter.kt
similarity index 77%
rename from features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListPresenter.kt
rename to features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListPresenter.kt
index 991239ba59..b28504eee1 100644
--- a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListPresenter.kt
+++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListPresenter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.roomlist
+package io.element.android.features.roomlist
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@@ -25,23 +25,23 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
-import io.element.android.x.architecture.Presenter
-import io.element.android.x.core.coroutine.parallelMap
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.designsystem.components.avatar.AvatarSize
-import io.element.android.x.features.roomlist.model.RoomListEvents
-import io.element.android.x.features.roomlist.model.RoomListRoomSummary
-import io.element.android.x.features.roomlist.model.RoomListRoomSummaryPlaceholders
-import io.element.android.x.features.roomlist.model.RoomListState
-import io.element.android.x.matrix.MatrixClient
-import io.element.android.x.matrix.media.MediaResolver
-import io.element.android.x.matrix.room.RoomSummary
-import io.element.android.x.matrix.ui.model.MatrixUser
+import io.element.android.features.roomlist.model.RoomListEvents
+import io.element.android.features.roomlist.model.RoomListRoomSummary
+import io.element.android.features.roomlist.model.RoomListRoomSummaryPlaceholders
+import io.element.android.features.roomlist.model.RoomListState
+import io.element.android.libraries.architecture.Presenter
+import io.element.android.libraries.core.coroutine.parallelMap
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.designsystem.components.avatar.AvatarSize
+import io.element.android.libraries.matrix.MatrixClient
+import io.element.android.libraries.matrix.room.RoomSummary
+import io.element.android.libraries.matrix.ui.model.MatrixUser
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
+import timber.log.Timber
import javax.inject.Inject
private const val extendedRangeSize = 40
@@ -61,7 +61,9 @@ class RoomListPresenter @Inject constructor(
val roomSummaries by client
.roomSummaryDataSource()
.roomSummaries()
- .collectAsState(initial = null)
+ .collectAsState()
+
+ Timber.v("RoomSummaries size = ${roomSummaries.size}")
val filteredRoomSummaries: MutableState> = remember {
mutableStateOf(persistentListOf())
@@ -105,15 +107,14 @@ class RoomListPresenter @Inject constructor(
val userAvatarUrl = client.loadUserAvatarURLString().getOrNull()
val userDisplayName = client.loadUserDisplayName().getOrNull()
val avatarData =
- loadAvatarData(
- userDisplayName ?: client.userId().value,
- userAvatarUrl,
- AvatarSize.SMALL
+ AvatarData(
+ name = userDisplayName ?: client.userId().value,
+ url = userAvatarUrl,
+ size = AvatarSize.SMALL
)
matrixUser.value = MatrixUser(
id = client.userId(),
username = userDisplayName ?: client.userId().value,
- avatarUrl = userAvatarUrl,
avatarData = avatarData,
)
}
@@ -135,9 +136,9 @@ class RoomListPresenter @Inject constructor(
when (roomSummary) {
is RoomSummary.Empty -> RoomListRoomSummaryPlaceholders.create(roomSummary.identifier)
is RoomSummary.Filled -> {
- val avatarData = loadAvatarData(
- roomSummary.details.name,
- roomSummary.details.avatarURLString
+ val avatarData = AvatarData(
+ name = roomSummary.details.name,
+ url = roomSummary.details.avatarURLString
)
RoomListRoomSummary(
id = roomSummary.identifier(),
@@ -151,14 +152,4 @@ class RoomListPresenter @Inject constructor(
}
}
}
-
- private suspend fun loadAvatarData(
- name: String,
- url: String?,
- size: AvatarSize = AvatarSize.MEDIUM
- ): AvatarData {
- val model = client.mediaResolver()
- .resolve(url, kind = MediaResolver.Kind.Thumbnail(size.value))
- return AvatarData(name, model, size)
- }
}
diff --git a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListView.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListView.kt
similarity index 85%
rename from features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListView.kt
rename to features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListView.kt
index d5c51b1ea3..8a67b649e3 100644
--- a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/RoomListView.kt
+++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListView.kt
@@ -16,7 +16,7 @@
@file:OptIn(ExperimentalMaterial3Api::class)
-package io.element.android.x.features.roomlist
+package io.element.android.features.roomlist
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
@@ -36,17 +36,17 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Velocity
-import io.element.android.x.core.compose.LogCompositions
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.features.roomlist.components.RoomListTopBar
-import io.element.android.x.features.roomlist.components.RoomSummaryRow
-import io.element.android.x.features.roomlist.model.RoomListEvents
-import io.element.android.x.features.roomlist.model.RoomListRoomSummary
-import io.element.android.x.features.roomlist.model.RoomListState
-import io.element.android.x.features.roomlist.model.stubbedRoomSummaries
-import io.element.android.x.matrix.core.RoomId
-import io.element.android.x.matrix.core.UserId
-import io.element.android.x.matrix.ui.model.MatrixUser
+import io.element.android.features.roomlist.components.RoomListTopBar
+import io.element.android.features.roomlist.components.RoomSummaryRow
+import io.element.android.features.roomlist.model.RoomListEvents
+import io.element.android.features.roomlist.model.RoomListRoomSummary
+import io.element.android.features.roomlist.model.RoomListState
+import io.element.android.features.roomlist.model.stubbedRoomSummaries
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.designsystem.utils.LogCompositions
+import io.element.android.libraries.matrix.core.RoomId
+import io.element.android.libraries.matrix.core.UserId
+import io.element.android.libraries.matrix.ui.model.MatrixUser
import kotlinx.collections.immutable.ImmutableList
@Composable
@@ -103,7 +103,10 @@ fun RoomListView(
}
}
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(appBarState)
- LogCompositions(tag = "RoomListScreen", msg = "Content")
+ LogCompositions(
+ tag = "RoomListScreen",
+ msg = "Content"
+ )
val nestedScrollConnection = remember {
object : NestedScrollConnection {
diff --git a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/components/RoomListTopBar.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/components/RoomListTopBar.kt
similarity index 93%
rename from features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/components/RoomListTopBar.kt
rename to features/roomlist/src/main/kotlin/io/element/android/features/roomlist/components/RoomListTopBar.kt
index d8fe56142b..c7f077374f 100644
--- a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/components/RoomListTopBar.kt
+++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/components/RoomListTopBar.kt
@@ -16,7 +16,7 @@
@file:OptIn(ExperimentalMaterial3Api::class)
-package io.element.android.x.features.roomlist.components
+package io.element.android.features.roomlist.components
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.layout.fillMaxWidth
@@ -52,11 +52,11 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
-import io.element.android.x.core.compose.LogCompositions
-import io.element.android.x.core.compose.textFieldState
-import io.element.android.x.designsystem.components.avatar.Avatar
-import io.element.android.x.matrix.ui.model.MatrixUser
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.libraries.designsystem.components.avatar.Avatar
+import io.element.android.libraries.designsystem.components.form.textFieldState
+import io.element.android.libraries.designsystem.utils.LogCompositions
+import io.element.android.libraries.matrix.ui.model.MatrixUser
+import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun RoomListTopBar(
@@ -66,7 +66,10 @@ fun RoomListTopBar(
onOpenSettings: () -> Unit,
scrollBehavior: TopAppBarScrollBehavior
) {
- LogCompositions(tag = "RoomListScreen", msg = "TopBar")
+ LogCompositions(
+ tag = "RoomListScreen",
+ msg = "TopBar"
+ )
var searchWidgetStateIsOpened by rememberSaveable { mutableStateOf(false) }
fun closeFilter() {
diff --git a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/components/RoomSummaryRow.kt
similarity index 96%
rename from features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt
rename to features/roomlist/src/main/kotlin/io/element/android/features/roomlist/components/RoomSummaryRow.kt
index ef8b4ac341..7b561d9054 100644
--- a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/components/RoomSummaryRow.kt
+++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/components/RoomSummaryRow.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.roomlist.components
+package io.element.android.features.roomlist.components
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@@ -52,8 +52,8 @@ import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.google.accompanist.placeholder.material.placeholder
-import io.element.android.x.designsystem.components.avatar.Avatar
-import io.element.android.x.features.roomlist.model.RoomListRoomSummary
+import io.element.android.features.roomlist.model.RoomListRoomSummary
+import io.element.android.libraries.designsystem.components.avatar.Avatar
private val minHeight = 72.dp
diff --git a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListEvents.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListEvents.kt
similarity index 93%
rename from features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListEvents.kt
rename to features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListEvents.kt
index e4cbf4430b..4349c93341 100644
--- a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListEvents.kt
+++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListEvents.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.features.roomlist.model
+package io.element.android.features.roomlist.model
sealed interface RoomListEvents {
data class UpdateFilter(val newFilter: String) : RoomListEvents
diff --git a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListRoomSummary.kt
similarity index 84%
rename from features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt
rename to features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListRoomSummary.kt
index 4bac53544c..f88b3da31f 100644
--- a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListRoomSummary.kt
+++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListRoomSummary.kt
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package io.element.android.x.features.roomlist.model
+package io.element.android.features.roomlist.model
import androidx.compose.runtime.Immutable
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.matrix.core.RoomId
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.matrix.core.RoomId
@Immutable
data class RoomListRoomSummary(
diff --git a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt
similarity index 90%
rename from features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt
rename to features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt
index c714baf3d3..5e6176bcb2 100644
--- a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt
+++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListRoomSummaryPlaceholders.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.roomlist.model
+package io.element.android.features.roomlist.model
-import io.element.android.x.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
object RoomListRoomSummaryPlaceholders {
diff --git a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListState.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListState.kt
similarity index 88%
rename from features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListState.kt
rename to features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListState.kt
index ce2e679fa0..f2d873654b 100644
--- a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/RoomListState.kt
+++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListState.kt
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.features.roomlist.model
+package io.element.android.features.roomlist.model
import androidx.compose.runtime.Immutable
-import io.element.android.x.matrix.ui.model.MatrixUser
+import io.element.android.libraries.matrix.ui.model.MatrixUser
import kotlinx.collections.immutable.ImmutableList
@Immutable
diff --git a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/stubbed.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/stubbed.kt
similarity index 91%
rename from features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/stubbed.kt
rename to features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/stubbed.kt
index 71ba70829f..c122752d4d 100644
--- a/features/roomlist/src/main/kotlin/io/element/android/x/features/roomlist/model/stubbed.kt
+++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/stubbed.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.features.roomlist.model
+package io.element.android.features.roomlist.model
-import io.element.android.x.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
diff --git a/features/roomlist/src/test/kotlin/io/element/android/x/features/roomlist/RoomListPresenterTests.kt b/features/roomlist/src/test/kotlin/io/element/android/features/roomlist/RoomListPresenterTests.kt
similarity index 86%
rename from features/roomlist/src/test/kotlin/io/element/android/x/features/roomlist/RoomListPresenterTests.kt
rename to features/roomlist/src/test/kotlin/io/element/android/features/roomlist/RoomListPresenterTests.kt
index cd1b148ce5..615353b7e8 100644
--- a/features/roomlist/src/test/kotlin/io/element/android/x/features/roomlist/RoomListPresenterTests.kt
+++ b/features/roomlist/src/test/kotlin/io/element/android/features/roomlist/RoomListPresenterTests.kt
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package io.element.android.x.features.roomlist
+package io.element.android.features.roomlist
import app.cash.molecule.RecompositionClock
import app.cash.molecule.moleculeFlow
import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat
-import io.element.android.x.libraries.matrixtest.FakeMatrixClient
-import io.element.android.x.matrix.core.SessionId
+import io.element.android.libraries.matrix.core.SessionId
+import io.element.android.libraries.matrixtest.FakeMatrixClient
import kotlinx.coroutines.test.runTest
import org.junit.Test
@@ -33,7 +33,8 @@ class RoomListPresenterTests {
val presenter = RoomListPresenter(
FakeMatrixClient(
SessionId("sessionId")
- ), LastMessageFormatter())
+ ), LastMessageFormatter()
+ )
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
}.test {
diff --git a/features/template/.gitignore b/features/template/.gitignore
new file mode 100644
index 0000000000..42afabfd2a
--- /dev/null
+++ b/features/template/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/features/template/build.gradle.kts b/features/template/build.gradle.kts
new file mode 100644
index 0000000000..47cf8f490c
--- /dev/null
+++ b/features/template/build.gradle.kts
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// TODO: Remove once https://youtrack.jetbrains.com/issue/KTIJ-19369 is fixed
+@Suppress("DSL_SCOPE_VIOLATION")
+plugins {
+ id("io.element.android-compose-library")
+ alias(libs.plugins.ksp)
+ alias(libs.plugins.anvil)
+}
+
+android {
+ // TODO change the namespace (and your classes package)
+ namespace = "io.element.android.features.template"
+}
+
+anvil {
+ generateDaggerFactories.set(true)
+}
+
+dependencies {
+ anvil(projects.anvilcodegen)
+ implementation(projects.anvilannotations)
+
+ implementation(projects.libraries.core)
+ implementation(projects.libraries.architecture)
+ implementation(projects.libraries.matrix)
+ implementation(projects.libraries.matrixui)
+ implementation(projects.libraries.designsystem)
+ implementation(projects.libraries.elementresources)
+ implementation(projects.libraries.uiStrings)
+
+ testImplementation(libs.test.junit)
+ testImplementation(libs.coroutines.test)
+ testImplementation(libs.molecule.runtime)
+ testImplementation(libs.test.truth)
+ testImplementation(libs.test.turbine)
+ testImplementation(projects.libraries.matrixtest)
+
+ androidTestImplementation(libs.test.junitext)
+
+ ksp(libs.showkase.processor)
+}
diff --git a/features/template/consumer-rules.pro b/features/template/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/features/template/proguard-rules.pro b/features/template/proguard-rules.pro
new file mode 100644
index 0000000000..481bb43481
--- /dev/null
+++ b/features/template/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/features/template/src/main/AndroidManifest.xml b/features/template/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..86d497f107
--- /dev/null
+++ b/features/template/src/main/AndroidManifest.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
diff --git a/features/template/src/main/kotlin/io/element/android/features/template/TemplateEvents.kt b/features/template/src/main/kotlin/io/element/android/features/template/TemplateEvents.kt
new file mode 100644
index 0000000000..57d0b0cc25
--- /dev/null
+++ b/features/template/src/main/kotlin/io/element/android/features/template/TemplateEvents.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.features.template
+
+// TODO Add your events or remove the file completely if no events
+sealed interface TemplateEvents {
+ object MyEvent: TemplateEvents
+}
diff --git a/features/template/src/main/kotlin/io/element/android/features/template/TemplateNode.kt b/features/template/src/main/kotlin/io/element/android/features/template/TemplateNode.kt
new file mode 100644
index 0000000000..4be5178ede
--- /dev/null
+++ b/features/template/src/main/kotlin/io/element/android/features/template/TemplateNode.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.features.template
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import com.bumble.appyx.core.modality.BuildContext
+import com.bumble.appyx.core.node.Node
+import com.bumble.appyx.core.plugin.Plugin
+import dagger.assisted.Assisted
+import dagger.assisted.AssistedInject
+import io.element.android.anvilannotations.ContributesNode
+import io.element.android.libraries.di.AppScope
+
+// TODO Change to use the right Scope for your feature. For now it can be AppScope, SessionScope or RoomScope
+@ContributesNode(AppScope::class)
+class TemplateNode @AssistedInject constructor(
+ @Assisted buildContext: BuildContext,
+ @Assisted plugins: List,
+ private val presenter: TemplatePresenter,
+) : Node(buildContext, plugins = plugins) {
+
+ @Composable
+ override fun View(modifier: Modifier) {
+ val state = presenter.present()
+ TemplateView(
+ state = state,
+ modifier = modifier
+ )
+ }
+}
diff --git a/features/template/src/main/kotlin/io/element/android/features/template/TemplatePresenter.kt b/features/template/src/main/kotlin/io/element/android/features/template/TemplatePresenter.kt
new file mode 100644
index 0000000000..254a5fc048
--- /dev/null
+++ b/features/template/src/main/kotlin/io/element/android/features/template/TemplatePresenter.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.features.template
+
+import androidx.compose.runtime.Composable
+import io.element.android.libraries.architecture.Presenter
+import javax.inject.Inject
+
+class TemplatePresenter @Inject constructor() : Presenter {
+
+ @Composable
+ override fun present(): TemplateState {
+
+ fun handleEvents(event: TemplateEvents) {
+ when (event) {
+ TemplateEvents.MyEvent -> Unit
+ }
+ }
+
+ return TemplateState(
+ eventSink = ::handleEvents
+ )
+ }
+}
diff --git a/features/template/src/main/kotlin/io/element/android/features/template/TemplateState.kt b/features/template/src/main/kotlin/io/element/android/features/template/TemplateState.kt
new file mode 100644
index 0000000000..8bb7f91ae3
--- /dev/null
+++ b/features/template/src/main/kotlin/io/element/android/features/template/TemplateState.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.features.template
+
+// TODO add your ui models. Remove the eventSink if you don't have events.
+data class TemplateState(
+ val eventSink: (TemplateEvents) -> Unit = {}
+)
diff --git a/features/template/src/main/kotlin/io/element/android/features/template/TemplateView.kt b/features/template/src/main/kotlin/io/element/android/features/template/TemplateView.kt
new file mode 100644
index 0000000000..0de5a4df96
--- /dev/null
+++ b/features/template/src/main/kotlin/io/element/android/features/template/TemplateView.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.features.template
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.tooling.preview.Preview
+
+@Composable
+fun TemplateView(
+ state: TemplateState,
+ modifier: Modifier = Modifier,
+) {
+ Box(modifier, contentAlignment = Alignment.Center) {
+ Text("Template feature view")
+ }
+}
+
+@Composable
+@Preview
+fun TemplateViewPreview() {
+ TemplateView(
+ state = TemplateState(),
+ )
+}
diff --git a/features/template/src/test/kotlin/io/element/android/features/template/TemplatePresenterTests.kt b/features/template/src/test/kotlin/io/element/android/features/template/TemplatePresenterTests.kt
new file mode 100644
index 0000000000..39b7e32ea8
--- /dev/null
+++ b/features/template/src/test/kotlin/io/element/android/features/template/TemplatePresenterTests.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.features.template
+
+import app.cash.molecule.RecompositionClock
+import app.cash.molecule.moleculeFlow
+import app.cash.turbine.test
+import com.google.common.truth.Truth
+import kotlinx.coroutines.test.runTest
+import org.junit.Test
+
+class TemplatePresenterTests {
+
+ @Test
+ fun `present - `() = runTest {
+
+ val presenter = TemplatePresenter()
+ moleculeFlow(RecompositionClock.Immediate) {
+ presenter.present()
+ }.test {
+ val initialState = awaitItem()
+ Truth.assertThat(initialState)
+ }
+
+ }
+}
diff --git a/gradle.properties b/gradle.properties
index 0585362237..6902acf2bd 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -23,10 +23,7 @@
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
-# When configured, Gradle will run in incubating parallel mode.
-# This option should only be used with decoupled projects. More details, visit
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
+
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app"s APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
@@ -37,6 +34,11 @@ kotlin.code.style=official
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
+
+org.gradle.caching=true
+org.gradle.configureondemand=true
+org.gradle.parallel=true
+
# Dummy values for signing secrets / nightly
signing.element.nightly.storePassword=Secret
signing.element.nightly.keyId=Secret
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 8a6d27811e..c3b00a39a9 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -37,7 +37,7 @@ datetime = "0.4.0"
serialization_json = "1.4.1"
showkase = "1.0.0-beta14"
jsoup = "1.15.3"
-appyx = "1.0.1"
+appyx = "1.0.3"
dependencycheck = "7.4.4"
stem = "2.2.3"
@@ -66,6 +66,7 @@ androidx_recyclerview = { module = "androidx.recyclerview:recyclerview", version
androidx_lifecycle_runtime = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle" }
androidx_lifecycle_compose = { module = "androidx.lifecycle:compose", version.ref = "lifecycle" }
androidx_lifecycle_process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "lifecycle" }
+androidx_splash = "androidx.core:core-splashscreen:1.0.0"
androidx_activity_compose = { module = "androidx.activity:activity-compose", version.ref = "activity_compose" }
androidx_startup = { module = "androidx.startup:startup-runtime", version.ref = "startup" }
@@ -114,6 +115,7 @@ showkase_processor = { module = "com.airbnb.android:showkase-processor", version
jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }
appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" }
molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" }
+timber = "com.jakewharton.timber:timber:5.0.1"
# Di
inject = "javax.inject:javax.inject:1"
@@ -142,3 +144,5 @@ dependencycheck = { id = "org.owasp.dependencycheck", version.ref = "dependencyc
stem = { id = "com.likethesalad.stem", version.ref = "stem" }
stemlibrary = { id = "com.likethesalad.stem-library", version.ref = "stem" }
paparazzi = "app.cash.paparazzi:1.2.0"
+sonarqube = "org.sonarqube:3.5.0.2730"
+kover = "org.jetbrains.kotlinx.kover:0.6.1"
diff --git a/libraries/androidutils/.gitignore b/libraries/androidutils/.gitignore
new file mode 100644
index 0000000000..42afabfd2a
--- /dev/null
+++ b/libraries/androidutils/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/libraries/androidutils/build.gradle.kts b/libraries/androidutils/build.gradle.kts
new file mode 100644
index 0000000000..13da553bbf
--- /dev/null
+++ b/libraries/androidutils/build.gradle.kts
@@ -0,0 +1,30 @@
+
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+plugins {
+ id("io.element.android-library")
+}
+
+android {
+ namespace = "io.element.android.libraries.androidutils"
+}
+
+dependencies {
+ implementation(libs.timber)
+ implementation(libs.androidx.corektx)
+ implementation(projects.libraries.core)
+}
diff --git a/libraries/androidutils/consumer-rules.pro b/libraries/androidutils/consumer-rules.pro
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/libraries/androidutils/proguard-rules.pro b/libraries/androidutils/proguard-rules.pro
new file mode 100644
index 0000000000..481bb43481
--- /dev/null
+++ b/libraries/androidutils/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/libraries/core/src/main/AndroidManifest.xml b/libraries/androidutils/src/main/AndroidManifest.xml
similarity index 95%
rename from libraries/core/src/main/AndroidManifest.xml
rename to libraries/androidutils/src/main/AndroidManifest.xml
index c7c3fad8ff..5a19e495ae 100644
--- a/libraries/core/src/main/AndroidManifest.xml
+++ b/libraries/androidutils/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
-
-
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/bitmap/Bitmap.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/bitmap/Bitmap.kt
similarity index 93%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/bitmap/Bitmap.kt
rename to libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/bitmap/Bitmap.kt
index 028c871041..f71fb1535e 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/bitmap/Bitmap.kt
+++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/bitmap/Bitmap.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.bitmap
+package io.element.android.libraries.androidutils.bitmap
import android.graphics.Bitmap
import java.io.File
diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/extensions/isEmail.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/extensions/isEmail.kt
new file mode 100644
index 0000000000..b47033286d
--- /dev/null
+++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/extensions/isEmail.kt
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.libraries.androidutils.extensions
+
+import android.util.Patterns
+
+/**
+ * Check if a CharSequence is an email.
+ */
+fun CharSequence.isEmail() = Patterns.EMAIL_ADDRESS.matcher(this).matches()
diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/File.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/File.kt
new file mode 100644
index 0000000000..b12e4d9986
--- /dev/null
+++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/File.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.libraries.androidutils.file
+
+import io.element.android.libraries.core.data.tryOrNull
+import timber.log.Timber
+import java.io.File
+
+fun File.safeDelete() {
+ tryOrNull(
+ onError = {
+ Timber.e(it, "Error, unable to delete file $path")
+ },
+ operation = {
+ if (delete().not()) {
+ Timber.w("Warning, unable to delete file $path")
+ }
+ }
+ )
+}
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/file/compressFile.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/compressFile.kt
similarity index 92%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/file/compressFile.kt
rename to libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/compressFile.kt
index aade7bf8e3..7e55e5e62d 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/file/compressFile.kt
+++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/compressFile.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package io.element.android.x.core.file
+package io.element.android.libraries.androidutils.file
+import timber.log.Timber
import java.io.File
import java.util.zip.GZIPOutputStream
-import timber.log.Timber
/**
* GZip a file.
@@ -32,7 +32,7 @@ fun compressFile(file: File): File? {
val dstFile = file.resolveSibling(file.name + ".gz")
if (dstFile.exists()) {
- dstFile.delete()
+ dstFile.safeDelete()
}
return try {
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/hardware/vibrator.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/hardware/vibrator.kt
similarity index 95%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/hardware/vibrator.kt
rename to libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/hardware/vibrator.kt
index de22f9c463..3e717ef6bf 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/hardware/vibrator.kt
+++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/hardware/vibrator.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.hardware
+package io.element.android.libraries.androidutils.hardware
import android.content.Context
import android.os.Build
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/ui/DimensionConverter.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/ui/DimensionConverter.kt
similarity index 91%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/ui/DimensionConverter.kt
rename to libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/ui/DimensionConverter.kt
index f0395b1d3d..beead850b3 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/ui/DimensionConverter.kt
+++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/ui/DimensionConverter.kt
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package io.element.android.x.core.ui
+package io.element.android.libraries.androidutils.ui
import android.content.res.Resources
import android.util.TypedValue
import androidx.annotation.Px
-class DimensionConverter(val resources: Resources) {
+class DimensionConverter(private val resources: Resources) {
@Px
fun dpToPx(dp: Int): Int {
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/ui/View.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/ui/View.kt
similarity index 95%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/ui/View.kt
rename to libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/ui/View.kt
index 99147d76a6..0639f29d1f 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/ui/View.kt
+++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/ui/View.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.ui
+package io.element.android.libraries.androidutils.ui
import android.view.View
import android.view.inputmethod.InputMethodManager
diff --git a/libraries/core/src/main/res/values-ldrtl/integers.xml b/libraries/androidutils/src/main/res/values-ldrtl/integers.xml
similarity index 100%
rename from libraries/core/src/main/res/values-ldrtl/integers.xml
rename to libraries/androidutils/src/main/res/values-ldrtl/integers.xml
diff --git a/libraries/core/src/main/res/values/integers.xml b/libraries/androidutils/src/main/res/values/integers.xml
similarity index 100%
rename from libraries/core/src/main/res/values/integers.xml
rename to libraries/androidutils/src/main/res/values/integers.xml
diff --git a/libraries/architecture/build.gradle.kts b/libraries/architecture/build.gradle.kts
index 2fad440e85..1d0c0417ca 100644
--- a/libraries/architecture/build.gradle.kts
+++ b/libraries/architecture/build.gradle.kts
@@ -21,13 +21,12 @@ plugins {
}
android {
- namespace = "io.element.android.x.libraries.architecture"
+ namespace = "io.element.android.libraries.architecture"
}
dependencies {
- api(project(":libraries:di"))
+ api(projects.libraries.di)
api(libs.dagger)
api(libs.appyx.core)
- api(libs.molecule.runtime)
api(libs.androidx.lifecycle.runtime)
}
diff --git a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/AssistedNodeFactory.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/AssistedNodeFactory.kt
similarity index 94%
rename from libraries/architecture/src/main/kotlin/io/element/android/x/architecture/AssistedNodeFactory.kt
rename to libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/AssistedNodeFactory.kt
index eb1d416fa7..6852bf9adb 100644
--- a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/AssistedNodeFactory.kt
+++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/AssistedNodeFactory.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.architecture
+package io.element.android.libraries.architecture
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
diff --git a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Async.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Async.kt
similarity index 97%
rename from libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Async.kt
rename to libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Async.kt
index 9428eda509..94d81a28e2 100644
--- a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Async.kt
+++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Async.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.architecture
+package io.element.android.libraries.architecture
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.Stable
diff --git a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Bindings.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Bindings.kt
similarity index 94%
rename from libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Bindings.kt
rename to libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Bindings.kt
index be09103db3..e4a6d7ae7d 100644
--- a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Bindings.kt
+++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Bindings.kt
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package io.element.android.x.architecture
+package io.element.android.libraries.architecture
import android.content.Context
import android.content.ContextWrapper
import com.bumble.appyx.core.node.Node
-import io.element.android.x.di.DaggerComponentOwner
+import io.element.android.libraries.di.DaggerComponentOwner
inline fun Node.bindings() = bindings(T::class.java)
inline fun Context.bindings() = bindings(T::class.java)
diff --git a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/NodeFactories.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt
similarity index 96%
rename from libraries/architecture/src/main/kotlin/io/element/android/x/architecture/NodeFactories.kt
rename to libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt
index c7a82bd481..6a4d52d20e 100644
--- a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/NodeFactories.kt
+++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.architecture
+package io.element.android.libraries.architecture
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
diff --git a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/NodeKey.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeKey.kt
similarity index 94%
rename from libraries/architecture/src/main/kotlin/io/element/android/x/architecture/NodeKey.kt
rename to libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeKey.kt
index 59150edf5f..b28d5a8145 100644
--- a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/NodeKey.kt
+++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeKey.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.architecture
+package io.element.android.libraries.architecture
import com.bumble.appyx.core.node.Node
import dagger.MapKey
diff --git a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Presenter.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Presenter.kt
similarity index 93%
rename from libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Presenter.kt
rename to libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Presenter.kt
index 6d5e7de444..9bfd089c27 100644
--- a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/Presenter.kt
+++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Presenter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.architecture
+package io.element.android.libraries.architecture
import androidx.compose.runtime.Composable
diff --git a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/animation/ScreenTransition.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/animation/ScreenTransition.kt
new file mode 100644
index 0000000000..faac896b85
--- /dev/null
+++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/animation/ScreenTransition.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.libraries.architecture.animation
+
+import androidx.compose.animation.core.Spring
+import androidx.compose.animation.core.spring
+import androidx.compose.runtime.Composable
+import com.bumble.appyx.core.navigation.transition.ModifierTransitionHandler
+import com.bumble.appyx.navmodel.backstack.BackStack
+import com.bumble.appyx.navmodel.backstack.transitionhandler.rememberBackstackSlider
+
+@Composable
+fun rememberDefaultTransitionHandler(): ModifierTransitionHandler {
+ return rememberBackstackSlider(
+ transitionSpec = { spring(stiffness = Spring.StiffnessMediumLow) },
+ )
+}
diff --git a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/PresenterConnector.kt b/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/PresenterConnector.kt
deleted file mode 100644
index 61659c7f80..0000000000
--- a/libraries/architecture/src/main/kotlin/io/element/android/x/architecture/PresenterConnector.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2023 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.element.android.x.architecture
-
-import androidx.lifecycle.LifecycleOwner
-import androidx.lifecycle.lifecycleScope
-import app.cash.molecule.AndroidUiDispatcher
-import app.cash.molecule.RecompositionClock
-import app.cash.molecule.launchMolecule
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.flow.StateFlow
-
-inline fun LifecycleOwner.presenterConnector(presenter: Presenter): LifecyclePresenterConnector =
- LifecyclePresenterConnector(lifecycleOwner = this, presenter = presenter)
-
-class LifecyclePresenterConnector(lifecycleOwner: LifecycleOwner, presenter: Presenter) {
-
- private val moleculeScope = CoroutineScope(lifecycleOwner.lifecycleScope.coroutineContext + AndroidUiDispatcher.Main)
-
- val stateFlow: StateFlow = moleculeScope.launchMolecule(RecompositionClock.Immediate) {
- presenter.present()
- }
-}
diff --git a/libraries/core/build.gradle.kts b/libraries/core/build.gradle.kts
index 4004ca1041..ef4a882cb3 100644
--- a/libraries/core/build.gradle.kts
+++ b/libraries/core/build.gradle.kts
@@ -1,3 +1,4 @@
+
/*
* Copyright (c) 2022 New Vector Ltd
*
@@ -14,10 +15,18 @@
* limitations under the License.
*/
+// TODO: Remove once https://youtrack.jetbrains.com/issue/KTIJ-19369 is fixed
+@Suppress("DSL_SCOPE_VIOLATION")
plugins {
- id("io.element.android-compose-library")
+ id("java-library")
+ alias(libs.plugins.kotlin.jvm)
}
-android {
- namespace = "io.element.android.x.core"
+java {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+dependencies {
+ implementation(libs.coroutines.core)
}
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/bool/Booleans.kt b/libraries/core/src/main/kotlin/io/element/android/libraries/core/bool/Booleans.kt
similarity index 93%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/bool/Booleans.kt
rename to libraries/core/src/main/kotlin/io/element/android/libraries/core/bool/Booleans.kt
index 46244de753..2613176643 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/bool/Booleans.kt
+++ b/libraries/core/src/main/kotlin/io/element/android/libraries/core/bool/Booleans.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.bool
+package io.element.android.libraries.core.bool
fun Boolean?.orTrue() = this ?: true
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/CoroutineDispatchers.kt b/libraries/core/src/main/kotlin/io/element/android/libraries/core/coroutine/CoroutineDispatchers.kt
similarity index 90%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/CoroutineDispatchers.kt
rename to libraries/core/src/main/kotlin/io/element/android/libraries/core/coroutine/CoroutineDispatchers.kt
index d36b9240dd..a3f1586070 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/CoroutineDispatchers.kt
+++ b/libraries/core/src/main/kotlin/io/element/android/libraries/core/coroutine/CoroutineDispatchers.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.coroutine
+package io.element.android.libraries.core.coroutine
import kotlinx.coroutines.CoroutineDispatcher
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/pmap.kt b/libraries/core/src/main/kotlin/io/element/android/libraries/core/coroutine/pmap.kt
similarity index 90%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/pmap.kt
rename to libraries/core/src/main/kotlin/io/element/android/libraries/core/coroutine/pmap.kt
index a952d74222..178a5eef3a 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/pmap.kt
+++ b/libraries/core/src/main/kotlin/io/element/android/libraries/core/coroutine/pmap.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.coroutine
+package io.element.android.libraries.core.coroutine
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/data/StableCharSequence.kt b/libraries/core/src/main/kotlin/io/element/android/libraries/core/data/StableCharSequence.kt
similarity index 95%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/data/StableCharSequence.kt
rename to libraries/core/src/main/kotlin/io/element/android/libraries/core/data/StableCharSequence.kt
index 92e9cae64a..25f68f2fea 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/data/StableCharSequence.kt
+++ b/libraries/core/src/main/kotlin/io/element/android/libraries/core/data/StableCharSequence.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.data
+package io.element.android.libraries.core.data
/**
* Wrapper for a CharSequence, which support mutation of the CharSequence.
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/data/Try.kt b/libraries/core/src/main/kotlin/io/element/android/libraries/core/data/Try.kt
similarity index 75%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/data/Try.kt
rename to libraries/core/src/main/kotlin/io/element/android/libraries/core/data/Try.kt
index ccaf5fb54b..b91d249547 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/data/Try.kt
+++ b/libraries/core/src/main/kotlin/io/element/android/libraries/core/data/Try.kt
@@ -14,17 +14,13 @@
* limitations under the License.
*/
-package io.element.android.x.core.data
+package io.element.android.libraries.core.data
-import timber.log.Timber
-
-inline fun tryOrNull(message: String? = null, operation: () -> A): A? {
+inline fun tryOrNull(noinline onError: ((Throwable) -> Unit)? = null, operation: () -> A): A? {
return try {
operation()
} catch (any: Throwable) {
- if (message != null) {
- Timber.e("TAG", message, any)
- }
+ onError?.invoke(any)
null
}
}
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/extensions/BasicExtensions.kt b/libraries/core/src/main/kotlin/io/element/android/libraries/core/extensions/BasicExtensions.kt
similarity index 86%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/extensions/BasicExtensions.kt
rename to libraries/core/src/main/kotlin/io/element/android/libraries/core/extensions/BasicExtensions.kt
index 5e77bb3b91..b845a5efeb 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/extensions/BasicExtensions.kt
+++ b/libraries/core/src/main/kotlin/io/element/android/libraries/core/extensions/BasicExtensions.kt
@@ -14,21 +14,12 @@
* limitations under the License.
*/
-package io.element.android.x.core.extensions
-
-import android.util.Patterns
+package io.element.android.libraries.core.extensions
fun Boolean.toOnOff() = if (this) "ON" else "OFF"
inline fun T.ooi(block: (T) -> Unit): T = also(block)
-/**
- * Check if a CharSequence is an email.
- */
-fun CharSequence.isEmail() = Patterns.EMAIL_ADDRESS.matcher(this).matches()
-
-// fun CharSequence.isMatrixId() = MatrixPatterns.isUserId(this.toString())
-
/**
* Return empty CharSequence if the CharSequence is null.
*/
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/mimetype/MimeTypes.kt b/libraries/core/src/main/kotlin/io/element/android/libraries/core/mimetype/MimeTypes.kt
similarity index 92%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/mimetype/MimeTypes.kt
rename to libraries/core/src/main/kotlin/io/element/android/libraries/core/mimetype/MimeTypes.kt
index fa21816cfd..082623b4de 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/mimetype/MimeTypes.kt
+++ b/libraries/core/src/main/kotlin/io/element/android/libraries/core/mimetype/MimeTypes.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.core.mimetype
+package io.element.android.libraries.core.mimetype
-import io.element.android.x.core.bool.orFalse
+import io.element.android.libraries.core.bool.orFalse
// The Android SDK does not provide constant for mime type, add some of them here
object MimeTypes {
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/uri/UrlUtils.kt b/libraries/core/src/main/kotlin/io/element/android/libraries/core/uri/UrlUtils.kt
similarity index 96%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/uri/UrlUtils.kt
rename to libraries/core/src/main/kotlin/io/element/android/libraries/core/uri/UrlUtils.kt
index 8574727e35..4fb5e986fd 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/uri/UrlUtils.kt
+++ b/libraries/core/src/main/kotlin/io/element/android/libraries/core/uri/UrlUtils.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.uri
+package io.element.android.libraries.core.uri
import java.net.URL
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/TimingOperators.kt b/libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/TimingOperators.kt
deleted file mode 100644
index 67405aeb9f..0000000000
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/coroutine/TimingOperators.kt
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2022 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.element.android.x.core.coroutine
-
-import android.os.SystemClock
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.channels.Channel
-import kotlinx.coroutines.channels.ClosedReceiveChannelException
-import kotlinx.coroutines.channels.ReceiveChannel
-import kotlinx.coroutines.channels.produce
-import kotlinx.coroutines.coroutineScope
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.consumeAsFlow
-import kotlinx.coroutines.flow.flow
-import kotlinx.coroutines.isActive
-import kotlinx.coroutines.selects.select
-
-@ExperimentalCoroutinesApi
-fun Flow.chunk(durationInMillis: Long): Flow> {
- require(durationInMillis > 0) { "Duration should be greater than 0" }
- return flow {
- coroutineScope {
- val events = ArrayList()
- val ticker = fixedPeriodTicker(durationInMillis)
- try {
- val upstreamValues = produce(capacity = Channel.CONFLATED) {
- collect { value -> send(value) }
- }
- while (isActive) {
- var hasTimedOut = false
- select {
- upstreamValues.onReceive {
- events.add(it)
- }
- ticker.onReceive {
- hasTimedOut = true
- }
- }
- if (hasTimedOut && events.isNotEmpty()) {
- emit(events.toList())
- events.clear()
- }
- }
- } catch (e: ClosedReceiveChannelException) {
- // drain remaining events
- if (events.isNotEmpty()) emit(events.toList())
- } finally {
- ticker.cancel()
- }
- }
- }
-}
-
-@ExperimentalCoroutinesApi
-fun Flow.throttleFirst(windowDuration: Long): Flow = flow {
- var windowStartTime = SystemClock.elapsedRealtime()
- var emitted = false
- collect { value ->
- val currentTime = SystemClock.elapsedRealtime()
- val delta = currentTime - windowStartTime
- if (delta >= windowDuration) {
- windowStartTime += delta / windowDuration * windowDuration
- emitted = false
- }
- if (!emitted) {
- emit(value)
- emitted = true
- }
- }
-}
-
-@ExperimentalCoroutinesApi
-fun tickerFlow(scope: CoroutineScope, delayMillis: Long, initialDelayMillis: Long = delayMillis): Flow {
- return scope.fixedPeriodTicker(delayMillis, initialDelayMillis).consumeAsFlow()
-}
-
-@ExperimentalCoroutinesApi
-private fun CoroutineScope.fixedPeriodTicker(delayMillis: Long, initialDelayMillis: Long = delayMillis): ReceiveChannel {
- require(delayMillis >= 0) { "Expected non-negative delay, but has $delayMillis ms" }
- require(initialDelayMillis >= 0) { "Expected non-negative initial delay, but has $initialDelayMillis ms" }
- return produce(capacity = 0) {
- delay(initialDelayMillis)
- while (true) {
- channel.send(Unit)
- delay(delayMillis)
- }
- }
-}
diff --git a/libraries/coroutines/.gitignore b/libraries/coroutines/.gitignore
new file mode 100644
index 0000000000..42afabfd2a
--- /dev/null
+++ b/libraries/coroutines/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/libraries/coroutines/build.gradle.kts b/libraries/coroutines/build.gradle.kts
new file mode 100644
index 0000000000..f9f12e0b09
--- /dev/null
+++ b/libraries/coroutines/build.gradle.kts
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// TODO: Remove once https://youtrack.jetbrains.com/issue/KTIJ-19369 is fixed
+@Suppress("DSL_SCOPE_VIOLATION")
+plugins {
+ id("java-library")
+ alias(libs.plugins.kotlin.jvm)
+}
+
+java {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+dependencies {
+ implementation(libs.coroutines.core)
+}
diff --git a/libraries/designsystem/build.gradle.kts b/libraries/designsystem/build.gradle.kts
index 597d8a4514..45430e5d82 100644
--- a/libraries/designsystem/build.gradle.kts
+++ b/libraries/designsystem/build.gradle.kts
@@ -22,14 +22,14 @@ plugins {
}
android {
- namespace = "io.element.android.x.libraries.designsystem"
+ namespace = "io.element.android.libraries.designsystem"
dependencies {
// Should not be there, but this is a POC
implementation(libs.coil.compose)
implementation(libs.accompanist.systemui)
- implementation(project(":libraries:elementresources"))
- implementation(project(":libraries:ui-strings"))
+ implementation(projects.libraries.elementresources)
+ implementation(projects.libraries.uiStrings)
ksp(libs.showkase.processor)
}
}
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Color.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/Color.kt
similarity index 95%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Color.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/Color.kt
index c2ce45f879..936f102a85 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Color.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/Color.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem
+package io.element.android.libraries.designsystem
import androidx.compose.ui.graphics.Color
import com.airbnb.android.showkase.annotation.ShowkaseColor
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/ColorUtil.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/ColorUtil.kt
similarity index 91%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/ColorUtil.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/ColorUtil.kt
index 7ecf7c428e..b15bfc49db 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/ColorUtil.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/ColorUtil.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem
+package io.element.android.libraries.designsystem
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Theme.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/Theme.kt
similarity index 97%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Theme.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/Theme.kt
index 34bda66a21..d2168f644e 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Theme.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/Theme.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem
+package io.element.android.libraries.designsystem
import android.os.Build
import androidx.compose.foundation.isSystemInDarkTheme
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Type.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/Type.kt
similarity index 98%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Type.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/Type.kt
index df87fba257..6e97bfa4fb 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/Type.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/Type.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem
+package io.element.android.libraries.designsystem
import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/VectorIcons.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/VectorIcons.kt
similarity index 86%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/VectorIcons.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/VectorIcons.kt
index d29ff12b9e..a11b0b96bb 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/VectorIcons.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/VectorIcons.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,9 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem
-
-import io.element.android.x.libraries.designsystem.R
+package io.element.android.libraries.designsystem
object VectorIcons {
val Copy = R.drawable.ic_content_copy
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/ClickableLinkText.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ClickableLinkText.kt
similarity index 98%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/ClickableLinkText.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ClickableLinkText.kt
index 1166a20f92..591baf1152 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/ClickableLinkText.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ClickableLinkText.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components
+package io.element.android.libraries.designsystem.components
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.interaction.MutableInteractionSource
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/LabelledCheckbox.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledCheckbox.kt
similarity index 96%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/LabelledCheckbox.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledCheckbox.kt
index fcbc6f8d02..f1ad5738ac 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/LabelledCheckbox.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LabelledCheckbox.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components
+package io.element.android.libraries.designsystem.components
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/ProgressDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ProgressDialog.kt
similarity index 97%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/ProgressDialog.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ProgressDialog.kt
index c374dec691..8bcc77226b 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/ProgressDialog.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/ProgressDialog.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components
+package io.element.android.libraries.designsystem.components
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/VectorButton.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/VectorButton.kt
similarity index 94%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/VectorButton.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/VectorButton.kt
index e728636d55..928e83cfa4 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/VectorButton.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/VectorButton.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components
+package io.element.android.libraries.designsystem.components
import androidx.compose.material3.Button
import androidx.compose.material3.Text
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/VectorIcon.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/VectorIcon.kt
similarity index 94%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/VectorIcon.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/VectorIcon.kt
index f0e93aefd0..60e7c644ad 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/VectorIcon.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/VectorIcon.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components
+package io.element.android.libraries.designsystem.components
import androidx.compose.material3.Icon
import androidx.compose.material3.LocalContentColor
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/Avatar.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt
similarity index 90%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/Avatar.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt
index e2465e3f13..1df00a7c50 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/Avatar.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components.avatar
+package io.element.android.libraries.designsystem.components.avatar
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
@@ -32,8 +32,8 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.sp
import coil.compose.AsyncImage
-import io.element.android.x.designsystem.AvatarGradientEnd
-import io.element.android.x.designsystem.AvatarGradientStart
+import io.element.android.libraries.designsystem.AvatarGradientEnd
+import io.element.android.libraries.designsystem.AvatarGradientStart
import timber.log.Timber
@Composable
@@ -41,7 +41,7 @@ fun Avatar(avatarData: AvatarData, modifier: Modifier = Modifier) {
val commonModifier = modifier
.size(avatarData.size.dp)
.clip(CircleShape)
- if (avatarData.model == null) {
+ if (avatarData.url == null) {
InitialsAvatar(
avatarData = avatarData,
modifier = commonModifier,
@@ -60,7 +60,7 @@ private fun ImageAvatar(
modifier: Modifier = Modifier,
) {
AsyncImage(
- model = avatarData.model,
+ model = avatarData,
onError = {
Timber.e("TAG", "Error $it\n${it.result}", it.result.throwable)
},
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarData.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarData.kt
new file mode 100644
index 0000000000..777ea701cc
--- /dev/null
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarData.kt
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.libraries.designsystem.components.avatar
+
+import androidx.compose.runtime.Immutable
+
+@Immutable
+data class AvatarData(
+ val name: String = "",
+ val url: String? = null,
+ val size: AvatarSize = AvatarSize.MEDIUM
+)
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/AvatarSize.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarSize.kt
similarity index 87%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/AvatarSize.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarSize.kt
index a0b4643191..35689817b0 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/AvatarSize.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarSize.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components.avatar
+package io.element.android.libraries.designsystem.components.avatar
import androidx.compose.ui.unit.dp
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ConfirmationDialog.kt
similarity index 95%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ConfirmationDialog.kt
index 9d74a2da87..6059b6b998 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/dialogs/ConfirmationDialog.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ConfirmationDialog.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components.dialogs
+package io.element.android.libraries.designsystem.components.dialogs
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@@ -29,7 +29,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun ConfirmationDialog(
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ErrorDialog.kt
similarity index 92%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ErrorDialog.kt
index 241d47fe9f..99e473fdbd 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/dialogs/ErrorDialog.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/dialogs/ErrorDialog.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components.dialogs
+package io.element.android.libraries.designsystem.components.dialogs
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
@@ -28,7 +28,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun ErrorDialog(
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/compose/TextFieldLocalState.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/form/TextFieldLocalState.kt
similarity index 89%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/compose/TextFieldLocalState.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/form/TextFieldLocalState.kt
index fa4b9eea85..c7366dcfb7 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/compose/TextFieldLocalState.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/form/TextFieldLocalState.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.compose
+package io.element.android.libraries.designsystem.components.form
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/compose/Keyboard.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/keyboard/Keyboard.kt
similarity index 93%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/compose/Keyboard.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/keyboard/Keyboard.kt
index b0b95fc2dc..1ebb67f75a 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/compose/Keyboard.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/keyboard/Keyboard.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.compose
+package io.element.android.libraries.designsystem.components.keyboard
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.WindowInsets
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/Config.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/Config.kt
similarity index 86%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/Config.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/Config.kt
index ffce99028d..1bae5df7cc 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/Config.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/Config.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components.preferences
+package io.element.android.libraries.designsystem.components.preferences
import androidx.compose.ui.unit.dp
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceCategory.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCategory.kt
similarity index 94%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceCategory.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCategory.kt
index e74645950c..c9e6ac6740 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceCategory.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceCategory.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components.preferences
+package io.element.android.libraries.designsystem.components.preferences
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceScreen.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceScreen.kt
similarity index 97%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceScreen.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceScreen.kt
index 2d2e42c9df..4b5f007506 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceScreen.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceScreen.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components.preferences
+package io.element.android.libraries.designsystem.components.preferences
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceSlide.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSlide.kt
similarity index 91%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceSlide.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSlide.kt
index af6641f13d..aadb0ab236 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceSlide.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSlide.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components.preferences
+package io.element.android.libraries.designsystem.components.preferences
import androidx.annotation.FloatRange
import androidx.compose.foundation.layout.Box
@@ -31,8 +31,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview
-import io.element.android.x.designsystem.components.preferences.components.PreferenceIcon
-import io.element.android.x.designsystem.toEnabledColor
+import io.element.android.libraries.designsystem.components.preferences.components.PreferenceIcon
+import io.element.android.libraries.designsystem.toEnabledColor
@Composable
fun PreferenceSlide(
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceSwitch.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSwitch.kt
similarity index 90%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceSwitch.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSwitch.kt
index 4dc6609a41..68a402296c 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceSwitch.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceSwitch.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components.preferences
+package io.element.android.libraries.designsystem.components.preferences
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
@@ -32,8 +32,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview
-import io.element.android.x.designsystem.components.preferences.components.PreferenceIcon
-import io.element.android.x.designsystem.toEnabledColor
+import io.element.android.libraries.designsystem.components.preferences.components.PreferenceIcon
+import io.element.android.libraries.designsystem.toEnabledColor
@Composable
fun PreferenceSwitch(
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceText.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceText.kt
similarity index 91%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceText.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceText.kt
index 5922a1a92c..bef45830e2 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/PreferenceText.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/PreferenceText.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components.preferences
+package io.element.android.libraries.designsystem.components.preferences
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
@@ -31,7 +31,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview
-import io.element.android.x.designsystem.components.preferences.components.PreferenceIcon
+import io.element.android.libraries.designsystem.components.preferences.components.PreferenceIcon
@Composable
fun PreferenceText(
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/components/PreferenceIcon.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/components/PreferenceIcon.kt
similarity index 88%
rename from libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/components/PreferenceIcon.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/components/PreferenceIcon.kt
index 9dc5fe0e8f..6a821333cc 100644
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/preferences/components/PreferenceIcon.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/preferences/components/PreferenceIcon.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.designsystem.components.preferences.components
+package io.element.android.libraries.designsystem.components.preferences.components
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding
@@ -24,7 +24,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.dp
-import io.element.android.x.designsystem.toEnabledColor
+import io.element.android.libraries.designsystem.toEnabledColor
@Composable
fun PreferenceIcon(
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/compose/LogCompositions.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/LogCompositions.kt
similarity index 88%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/compose/LogCompositions.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/LogCompositions.kt
index ec88d4433a..f6edd1a8fb 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/compose/LogCompositions.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/LogCompositions.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package io.element.android.x.core.compose
+package io.element.android.libraries.designsystem.utils
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.remember
-import io.element.android.x.core.BuildConfig
+import io.element.android.libraries.designsystem.BuildConfig
import timber.log.Timber
// Note the inline function below which ensures that this function is essentially
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/compose/OnLifecycleEvent.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/OnLifecycleEvent.kt
similarity index 94%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/compose/OnLifecycleEvent.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/OnLifecycleEvent.kt
index 499ab20bbe..630434e060 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/compose/OnLifecycleEvent.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/OnLifecycleEvent.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.compose
+package io.element.android.libraries.designsystem.utils
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
diff --git a/libraries/core/src/main/kotlin/io/element/android/x/core/compose/PairCombinedPreviewParameter.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameter.kt
similarity index 91%
rename from libraries/core/src/main/kotlin/io/element/android/x/core/compose/PairCombinedPreviewParameter.kt
rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameter.kt
index 74c04cdded..bf0a282f72 100644
--- a/libraries/core/src/main/kotlin/io/element/android/x/core/compose/PairCombinedPreviewParameter.kt
+++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameter.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.core.compose
+package io.element.android.libraries.designsystem.utils
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/AvatarData.kt b/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/AvatarData.kt
deleted file mode 100644
index d4fb492901..0000000000
--- a/libraries/designsystem/src/main/kotlin/io/element/android/x/designsystem/components/avatar/AvatarData.kt
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2022 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.element.android.x.designsystem.components.avatar
-
-import androidx.compose.runtime.Immutable
-
-@Immutable
-data class AvatarData(
- val name: String = "",
- val model: ByteArray? = null,
- val size: AvatarSize = AvatarSize.MEDIUM
-) {
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (javaClass != other?.javaClass) return false
-
- other as AvatarData
-
- if (name != other.name) return false
- if (model != null) {
- if (other.model == null) return false
- if (!model.contentEquals(other.model)) return false
- } else if (other.model != null) return false
- if (size != other.size) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- var result = name.hashCode()
- result = 31 * result + (model?.contentHashCode() ?: 0)
- result = 31 * result + size.value
- return result
- }
-}
diff --git a/libraries/di/src/main/kotlin/io/element/android/x/di/AppScope.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/AppScope.kt
similarity index 94%
rename from libraries/di/src/main/kotlin/io/element/android/x/di/AppScope.kt
rename to libraries/di/src/main/kotlin/io/element/android/libraries/di/AppScope.kt
index 79782c60d9..2b40d59894 100644
--- a/libraries/di/src/main/kotlin/io/element/android/x/di/AppScope.kt
+++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/AppScope.kt
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package io.element.android.x.di
+package io.element.android.libraries.di
abstract class AppScope private constructor()
diff --git a/libraries/di/src/main/kotlin/io/element/android/x/di/ApplicationContext.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/ApplicationContext.kt
similarity index 94%
rename from libraries/di/src/main/kotlin/io/element/android/x/di/ApplicationContext.kt
rename to libraries/di/src/main/kotlin/io/element/android/libraries/di/ApplicationContext.kt
index 7ed9251cee..2108678097 100644
--- a/libraries/di/src/main/kotlin/io/element/android/x/di/ApplicationContext.kt
+++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/ApplicationContext.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.di
+package io.element.android.libraries.di
import javax.inject.Qualifier
diff --git a/libraries/di/src/main/kotlin/io/element/android/x/di/DaggerComponentOwner.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/DaggerComponentOwner.kt
similarity index 95%
rename from libraries/di/src/main/kotlin/io/element/android/x/di/DaggerComponentOwner.kt
rename to libraries/di/src/main/kotlin/io/element/android/libraries/di/DaggerComponentOwner.kt
index eaf3371be3..57f5540c16 100644
--- a/libraries/di/src/main/kotlin/io/element/android/x/di/DaggerComponentOwner.kt
+++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/DaggerComponentOwner.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.di
+package io.element.android.libraries.di
/**
* A [DaggerComponentOwner] is anything that "owns" a Dagger Component.
diff --git a/libraries/di/src/main/kotlin/io/element/android/x/di/RoomScope.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/RoomScope.kt
similarity index 94%
rename from libraries/di/src/main/kotlin/io/element/android/x/di/RoomScope.kt
rename to libraries/di/src/main/kotlin/io/element/android/libraries/di/RoomScope.kt
index bcdb76c31d..af25c4cda5 100644
--- a/libraries/di/src/main/kotlin/io/element/android/x/di/RoomScope.kt
+++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/RoomScope.kt
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package io.element.android.x.di
+package io.element.android.libraries.di
abstract class RoomScope private constructor()
diff --git a/libraries/di/src/main/kotlin/io/element/android/x/di/SessionScope.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/SessionScope.kt
similarity index 94%
rename from libraries/di/src/main/kotlin/io/element/android/x/di/SessionScope.kt
rename to libraries/di/src/main/kotlin/io/element/android/libraries/di/SessionScope.kt
index 55fbb71a8e..8ebd6ecaee 100644
--- a/libraries/di/src/main/kotlin/io/element/android/x/di/SessionScope.kt
+++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/SessionScope.kt
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package io.element.android.x.di
+package io.element.android.libraries.di
abstract class SessionScope private constructor()
diff --git a/libraries/di/src/main/kotlin/io/element/android/x/di/SingleIn.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/SingleIn.kt
similarity index 94%
rename from libraries/di/src/main/kotlin/io/element/android/x/di/SingleIn.kt
rename to libraries/di/src/main/kotlin/io/element/android/libraries/di/SingleIn.kt
index 9e9fb7e24e..42a6b860ca 100644
--- a/libraries/di/src/main/kotlin/io/element/android/x/di/SingleIn.kt
+++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/SingleIn.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.di
+package io.element.android.libraries.di
import javax.inject.Scope
import kotlin.reflect.KClass
diff --git a/libraries/elementresources/build.gradle.kts b/libraries/elementresources/build.gradle.kts
index 3202b47a8d..3451be5c38 100644
--- a/libraries/elementresources/build.gradle.kts
+++ b/libraries/elementresources/build.gradle.kts
@@ -19,7 +19,7 @@ plugins {
}
android {
- namespace = "io.element.android.x.element.resources"
+ namespace = "io.element.android.libraries.resources"
}
dependencies {
diff --git a/libraries/matrix/build.gradle.kts b/libraries/matrix/build.gradle.kts
index 56f33523a7..c331eab4ee 100644
--- a/libraries/matrix/build.gradle.kts
+++ b/libraries/matrix/build.gradle.kts
@@ -19,11 +19,11 @@
plugins {
id("io.element.android-library")
alias(libs.plugins.anvil)
- kotlin("plugin.serialization") version "1.8.0"
+ kotlin("plugin.serialization") version "1.8.10"
}
android {
- namespace = "io.element.android.x.matrix"
+ namespace = "io.element.android.libraries.matrix"
}
anvil {
@@ -31,10 +31,10 @@ anvil {
}
dependencies {
- api(project(":libraries:rustsdk"))
- implementation(project(":libraries:di"))
+ api(projects.libraries.rustsdk)
+ implementation(projects.libraries.di)
implementation(libs.dagger)
- implementation(project(":libraries:core"))
+ implementation(projects.libraries.core)
implementation("net.java.dev.jna:jna:5.13.0@aar")
implementation(libs.androidx.datastore.preferences)
implementation(libs.serialization.json)
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/LogTag.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/LogTag.kt
similarity index 93%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/LogTag.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/LogTag.kt
index b48137013e..85c1e6010e 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/LogTag.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/LogTag.kt
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package io.element.android.x.matrix
+package io.element.android.libraries.matrix
internal const val LOG_TAG = "Matrix"
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/MatrixClient.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/MatrixClient.kt
similarity index 76%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/MatrixClient.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/MatrixClient.kt
index d0d446909b..1d3fc62ff7 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/MatrixClient.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/MatrixClient.kt
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package io.element.android.x.matrix
+package io.element.android.libraries.matrix
-import io.element.android.x.matrix.core.RoomId
-import io.element.android.x.matrix.core.SessionId
-import io.element.android.x.matrix.core.UserId
-import io.element.android.x.matrix.media.MediaResolver
-import io.element.android.x.matrix.room.MatrixRoom
-import io.element.android.x.matrix.room.RoomSummaryDataSource
+import io.element.android.libraries.matrix.core.RoomId
+import io.element.android.libraries.matrix.core.SessionId
+import io.element.android.libraries.matrix.core.UserId
+import io.element.android.libraries.matrix.media.MediaResolver
+import io.element.android.libraries.matrix.room.MatrixRoom
+import io.element.android.libraries.matrix.room.RoomSummaryDataSource
import org.matrix.rustcomponents.sdk.MediaSource
import java.io.Closeable
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/RustMatrixClient.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/RustMatrixClient.kt
similarity index 87%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/RustMatrixClient.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/RustMatrixClient.kt
index b96b1e87fb..c6b9bef6e0 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/RustMatrixClient.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/RustMatrixClient.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,22 +14,21 @@
* limitations under the License.
*/
-package io.element.android.x.matrix
+package io.element.android.libraries.matrix
-import io.element.android.x.core.coroutine.CoroutineDispatchers
-import io.element.android.x.matrix.core.RoomId
-import io.element.android.x.matrix.core.SessionId
-import io.element.android.x.matrix.core.UserId
-import io.element.android.x.matrix.media.MediaResolver
-import io.element.android.x.matrix.media.RustMediaResolver
-import io.element.android.x.matrix.room.MatrixRoom
-import io.element.android.x.matrix.room.RoomSummaryDataSource
-import io.element.android.x.matrix.room.RustMatrixRoom
-import io.element.android.x.matrix.room.RustRoomSummaryDataSource
-import io.element.android.x.matrix.session.PreferencesSessionStore
-import io.element.android.x.matrix.session.SessionStore
-import io.element.android.x.matrix.session.sessionId
-import io.element.android.x.matrix.sync.SlidingSyncObserverProxy
+import io.element.android.libraries.core.coroutine.CoroutineDispatchers
+import io.element.android.libraries.matrix.core.RoomId
+import io.element.android.libraries.matrix.core.SessionId
+import io.element.android.libraries.matrix.core.UserId
+import io.element.android.libraries.matrix.media.MediaResolver
+import io.element.android.libraries.matrix.media.RustMediaResolver
+import io.element.android.libraries.matrix.room.MatrixRoom
+import io.element.android.libraries.matrix.room.RoomSummaryDataSource
+import io.element.android.libraries.matrix.room.RustMatrixRoom
+import io.element.android.libraries.matrix.room.RustRoomSummaryDataSource
+import io.element.android.libraries.matrix.session.SessionStore
+import io.element.android.libraries.matrix.session.sessionId
+import io.element.android.libraries.matrix.sync.SlidingSyncObserverProxy
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.withContext
import org.matrix.rustcomponents.sdk.Client
@@ -88,7 +87,7 @@ internal class RustMatrixClient internal constructor(
.addView(slidingSyncView)
.build()
- private val slidingSyncObserverProxy = SlidingSyncObserverProxy(coroutineScope, dispatchers)
+ private val slidingSyncObserverProxy = SlidingSyncObserverProxy(coroutineScope)
private val roomSummaryDataSource: RustRoomSummaryDataSource =
RustRoomSummaryDataSource(
slidingSyncObserverProxy.updateSummaryFlow,
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/auth/MatrixAuthenticationService.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/auth/MatrixAuthenticationService.kt
similarity index 80%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/auth/MatrixAuthenticationService.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/auth/MatrixAuthenticationService.kt
index f353a4d789..4323e3f79b 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/auth/MatrixAuthenticationService.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/auth/MatrixAuthenticationService.kt
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.auth
+package io.element.android.libraries.matrix.auth
-import io.element.android.x.matrix.MatrixClient
-import io.element.android.x.matrix.core.SessionId
+import io.element.android.libraries.matrix.MatrixClient
+import io.element.android.libraries.matrix.core.SessionId
import kotlinx.coroutines.flow.Flow
interface MatrixAuthenticationService {
fun isLoggedIn(): Flow
suspend fun getLatestSessionId(): SessionId?
- suspend fun restoreSession(): MatrixClient?
+ suspend fun restoreSession(sessionId: SessionId): MatrixClient?
fun getHomeserver(): String?
fun getHomeserverOrDefault(): String
suspend fun setHomeserver(homeserver: String)
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/auth/RustMatrixAuthenticationService.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/auth/RustMatrixAuthenticationService.kt
similarity index 83%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/auth/RustMatrixAuthenticationService.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/auth/RustMatrixAuthenticationService.kt
index 3efb6d82c8..82bd9391b1 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/auth/RustMatrixAuthenticationService.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/auth/RustMatrixAuthenticationService.kt
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.auth
+package io.element.android.libraries.matrix.auth
import com.squareup.anvil.annotations.ContributesBinding
-import io.element.android.x.core.coroutine.CoroutineDispatchers
-import io.element.android.x.di.AppScope
-import io.element.android.x.matrix.MatrixClient
-import io.element.android.x.matrix.RustMatrixClient
-import io.element.android.x.matrix.core.SessionId
-import io.element.android.x.matrix.session.SessionStore
-import io.element.android.x.matrix.session.sessionId
-import io.element.android.x.matrix.util.logError
+import io.element.android.libraries.core.coroutine.CoroutineDispatchers
+import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.matrix.MatrixClient
+import io.element.android.libraries.matrix.RustMatrixClient
+import io.element.android.libraries.matrix.core.SessionId
+import io.element.android.libraries.matrix.session.SessionStore
+import io.element.android.libraries.matrix.session.sessionId
+import io.element.android.libraries.matrix.util.logError
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.withContext
@@ -52,8 +52,8 @@ class RustMatrixAuthenticationService @Inject constructor(
sessionStore.getLatestSession()?.sessionId()
}
- override suspend fun restoreSession() = withContext(coroutineDispatchers.io) {
- sessionStore.getLatestSession()
+ override suspend fun restoreSession(sessionId: SessionId) = withContext(coroutineDispatchers.io) {
+ sessionStore.getSession(sessionId)
?.let { session ->
try {
ClientBuilder()
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/EventId.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/EventId.kt
similarity index 93%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/EventId.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/EventId.kt
index 77460d5b86..7ad4235e5e 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/EventId.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/EventId.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.core
+package io.element.android.libraries.matrix.core
import java.io.Serializable
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/MatrixPatterns.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/MatrixPatterns.kt
similarity index 98%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/MatrixPatterns.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/MatrixPatterns.kt
index c6a4ae4dcd..b2043d216b 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/MatrixPatterns.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/MatrixPatterns.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.core
+package io.element.android.libraries.matrix.core
-import io.element.android.x.matrix.BuildConfig
+import io.element.android.libraries.matrix.BuildConfig
import timber.log.Timber
/**
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/RoomId.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/RoomId.kt
similarity index 93%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/RoomId.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/RoomId.kt
index db166d57a0..1a50c6a83a 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/RoomId.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/RoomId.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.core
+package io.element.android.libraries.matrix.core
import java.io.Serializable
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/SessionId.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/SessionId.kt
similarity index 93%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/SessionId.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/SessionId.kt
index d75f4c15a7..bf1ce0c04b 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/SessionId.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/SessionId.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.core
+package io.element.android.libraries.matrix.core
import java.io.Serializable
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/UserId.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/UserId.kt
similarity index 93%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/UserId.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/UserId.kt
index 685d4627ef..63f2c85216 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/core/UserId.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/core/UserId.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.core
+package io.element.android.libraries.matrix.core
import java.io.Serializable
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/di/MatrixModule.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/di/MatrixModule.kt
similarity index 88%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/di/MatrixModule.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/di/MatrixModule.kt
index 2808c3667b..9b0583d2d1 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/di/MatrixModule.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/di/MatrixModule.kt
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.di
+package io.element.android.libraries.matrix.di
import com.squareup.anvil.annotations.ContributesTo
import dagger.Module
import dagger.Provides
-import io.element.android.x.di.AppScope
-import io.element.android.x.di.SingleIn
+import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.di.SingleIn
import org.matrix.rustcomponents.sdk.AuthenticationService
import java.io.File
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/media/MediaResolver.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/media/MediaResolver.kt
similarity index 92%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/media/MediaResolver.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/media/MediaResolver.kt
index 0fb796a421..7adf22ccfc 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/media/MediaResolver.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/media/MediaResolver.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.media
+package io.element.android.libraries.matrix.media
import org.matrix.rustcomponents.sdk.MediaSource
@@ -29,7 +29,7 @@ interface MediaResolver {
}
data class Meta(
- val source: MediaSource,
+ val source: MediaSource?,
val kind: Kind
)
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/media/RustMediaResolver.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/media/RustMediaResolver.kt
similarity index 90%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/media/RustMediaResolver.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/media/RustMediaResolver.kt
index f8c1ca3868..bdc5b85203 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/media/RustMediaResolver.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/media/RustMediaResolver.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.media
+package io.element.android.libraries.matrix.media
-import io.element.android.x.matrix.MatrixClient
+import io.element.android.libraries.matrix.MatrixClient
import org.matrix.rustcomponents.sdk.mediaSourceFromUrl
internal class RustMediaResolver(private val client: MatrixClient) : MediaResolver {
@@ -28,6 +28,7 @@ internal class RustMediaResolver(private val client: MatrixClient) : MediaResolv
}
override suspend fun resolve(meta: MediaResolver.Meta): ByteArray? {
+ if (meta.source == null) return null
return when (meta.kind) {
is MediaResolver.Kind.Content -> client.loadMediaContentForSource(meta.source)
is MediaResolver.Kind.Thumbnail -> client.loadMediaThumbnailForSource(
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/MatrixToConverter.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/permalink/MatrixToConverter.kt
similarity index 97%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/MatrixToConverter.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/permalink/MatrixToConverter.kt
index 8b0468277e..8ef0bbcd08 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/MatrixToConverter.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/permalink/MatrixToConverter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.permalink
+package io.element.android.libraries.matrix.permalink
import android.net.Uri
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/PermalinkData.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/permalink/PermalinkData.kt
similarity index 96%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/PermalinkData.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/permalink/PermalinkData.kt
index e1c489331e..b5f8b7fd92 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/PermalinkData.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/permalink/PermalinkData.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.permalink
+package io.element.android.libraries.matrix.permalink
import android.net.Uri
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/PermalinkParser.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/permalink/PermalinkParser.kt
similarity index 97%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/PermalinkParser.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/permalink/PermalinkParser.kt
index a69d71516c..71509850a1 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/permalink/PermalinkParser.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/permalink/PermalinkParser.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.permalink
+package io.element.android.libraries.matrix.permalink
import android.net.Uri
import android.net.UrlQuerySanitizer
-import io.element.android.x.matrix.core.MatrixPatterns
-import java.net.URLDecoder
+import io.element.android.libraries.matrix.core.MatrixPatterns
import timber.log.Timber
+import java.net.URLDecoder
/**
* This class turns a uri to a [PermalinkData].
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/MatrixRoom.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/MatrixRoom.kt
similarity index 85%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/MatrixRoom.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/MatrixRoom.kt
index f2ecdb2b70..06c1fa0f76 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/MatrixRoom.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/MatrixRoom.kt
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.room
+package io.element.android.libraries.matrix.room
-import io.element.android.x.matrix.core.EventId
-import io.element.android.x.matrix.core.RoomId
-import io.element.android.x.matrix.timeline.MatrixTimeline
+import io.element.android.libraries.matrix.core.EventId
+import io.element.android.libraries.matrix.core.RoomId
+import io.element.android.libraries.matrix.timeline.MatrixTimeline
import kotlinx.coroutines.flow.Flow
interface MatrixRoom {
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomListenerFlows.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomListenerFlows.kt
similarity index 96%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomListenerFlows.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomListenerFlows.kt
index 2fc0a23a21..e307bf0dad 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomListenerFlows.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomListenerFlows.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.room
+package io.element.android.libraries.matrix.room
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.awaitClose
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummary.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummary.kt
similarity index 88%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummary.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummary.kt
index 56e479e1d5..8b922b322d 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummary.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummary.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.room
+package io.element.android.libraries.matrix.room
-import io.element.android.x.matrix.core.RoomId
+import io.element.android.libraries.matrix.core.RoomId
sealed interface RoomSummary {
data class Empty(val identifier: String) : RoomSummary
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummaryDataSource.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummaryDataSource.kt
similarity index 93%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummaryDataSource.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummaryDataSource.kt
index 81b9f20af1..11ae71795d 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummaryDataSource.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummaryDataSource.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,14 +14,11 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.room
+package io.element.android.libraries.matrix.room
-import io.element.android.x.core.coroutine.CoroutineDispatchers
-import io.element.android.x.matrix.sync.roomListDiff
-import io.element.android.x.matrix.sync.state
-import java.io.Closeable
-import java.util.Collections
-import java.util.UUID
+import io.element.android.libraries.core.coroutine.CoroutineDispatchers
+import io.element.android.libraries.matrix.sync.roomListDiff
+import io.element.android.libraries.matrix.sync.state
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.SupervisorJob
@@ -29,6 +26,7 @@ import kotlinx.coroutines.cancel
import kotlinx.coroutines.cancelChildren
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.sample
@@ -41,9 +39,12 @@ import org.matrix.rustcomponents.sdk.SlidingSyncView
import org.matrix.rustcomponents.sdk.SlidingSyncViewRoomsListDiff
import org.matrix.rustcomponents.sdk.UpdateSummary
import timber.log.Timber
+import java.io.Closeable
+import java.util.Collections
+import java.util.UUID
interface RoomSummaryDataSource {
- fun roomSummaries(): Flow>
+ fun roomSummaries(): StateFlow>
fun setSlidingSyncRange(range: IntRange)
}
@@ -98,9 +99,9 @@ internal class RustRoomSummaryDataSource(
coroutineScope.cancel()
}
- @OptIn(FlowPreview::class)
- override fun roomSummaries(): Flow> {
- return roomSummaries.sample(50)
+ //@OptIn(FlowPreview::class)
+ override fun roomSummaries(): StateFlow> {
+ return roomSummaries
}
override fun setSlidingSyncRange(range: IntRange) {
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummaryDetailsFactory.kt
similarity index 88%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummaryDetailsFactory.kt
index 93202ef742..d295f9848e 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RoomSummaryDetailsFactory.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RoomSummaryDetailsFactory.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.room
+package io.element.android.libraries.matrix.room
-import io.element.android.x.matrix.core.RoomId
-import io.element.android.x.matrix.room.message.RoomMessageFactory
+import io.element.android.libraries.matrix.core.RoomId
+import io.element.android.libraries.matrix.room.message.RoomMessageFactory
import org.matrix.rustcomponents.sdk.Room
import org.matrix.rustcomponents.sdk.SlidingSyncRoom
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RustMatrixRoom.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RustMatrixRoom.kt
similarity index 91%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RustMatrixRoom.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RustMatrixRoom.kt
index 7d7c2414fb..c481b7c3d5 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/RustMatrixRoom.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/RustMatrixRoom.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.room
+package io.element.android.libraries.matrix.room
-import io.element.android.x.core.coroutine.CoroutineDispatchers
-import io.element.android.x.matrix.core.EventId
-import io.element.android.x.matrix.core.RoomId
-import io.element.android.x.matrix.timeline.MatrixTimeline
-import io.element.android.x.matrix.timeline.RustMatrixTimeline
+import io.element.android.libraries.core.coroutine.CoroutineDispatchers
+import io.element.android.libraries.matrix.core.EventId
+import io.element.android.libraries.matrix.core.RoomId
+import io.element.android.libraries.matrix.timeline.MatrixTimeline
+import io.element.android.libraries.matrix.timeline.RustMatrixTimeline
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filter
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/message/RoomMessage.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/message/RoomMessage.kt
similarity index 77%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/message/RoomMessage.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/message/RoomMessage.kt
index da9e097540..3bfe5b5edb 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/message/RoomMessage.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/message/RoomMessage.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.room.message
+package io.element.android.libraries.matrix.room.message
-import io.element.android.x.matrix.core.EventId
-import io.element.android.x.matrix.core.UserId
+import io.element.android.libraries.matrix.core.EventId
+import io.element.android.libraries.matrix.core.UserId
data class RoomMessage(
val eventId: EventId,
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/message/RoomMessageFactory.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/message/RoomMessageFactory.kt
similarity index 84%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/message/RoomMessageFactory.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/message/RoomMessageFactory.kt
index 318e429070..348551835d 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/room/message/RoomMessageFactory.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/room/message/RoomMessageFactory.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.room.message
+package io.element.android.libraries.matrix.room.message
-import io.element.android.x.matrix.core.EventId
-import io.element.android.x.matrix.core.UserId
+import io.element.android.libraries.matrix.core.EventId
+import io.element.android.libraries.matrix.core.UserId
import org.matrix.rustcomponents.sdk.EventTimelineItem
class RoomMessageFactory {
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/PreferencesSessionStore.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/session/PreferencesSessionStore.kt
similarity index 88%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/PreferencesSessionStore.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/session/PreferencesSessionStore.kt
index 6c8f6498e3..c1ad49c90a 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/PreferencesSessionStore.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/session/PreferencesSessionStore.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.session
+package io.element.android.libraries.matrix.session
import android.content.Context
import androidx.datastore.core.DataStore
@@ -23,9 +23,10 @@ import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
import com.squareup.anvil.annotations.ContributesBinding
-import io.element.android.x.di.AppScope
-import io.element.android.x.di.ApplicationContext
-import io.element.android.x.di.SingleIn
+import io.element.android.libraries.di.AppScope
+import io.element.android.libraries.di.ApplicationContext
+import io.element.android.libraries.di.SingleIn
+import io.element.android.libraries.matrix.core.SessionId
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.map
@@ -94,6 +95,11 @@ class PreferencesSessionStore @Inject constructor(
}
}
+ override suspend fun getSession(sessionId: SessionId): Session? {
+ //TODO we should have a proper session management
+ return getLatestSession()
+ }
+
override suspend fun reset() {
store.edit { it.clear() }
}
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/Session.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/session/Session.kt
similarity index 86%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/Session.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/session/Session.kt
index 53b69ce975..a1943f273c 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/Session.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/session/Session.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.session
+package io.element.android.libraries.matrix.session
-import io.element.android.x.matrix.core.SessionId
+import io.element.android.libraries.matrix.core.SessionId
import org.matrix.rustcomponents.sdk.Session
fun Session.sessionId() = SessionId("${userId}_${deviceId}")
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/SessionStore.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/session/SessionStore.kt
similarity index 83%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/SessionStore.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/session/SessionStore.kt
index 4380518ce9..3ca806acee 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/session/SessionStore.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/session/SessionStore.kt
@@ -14,14 +14,16 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.session
+package io.element.android.libraries.matrix.session
+import io.element.android.libraries.matrix.core.SessionId
import kotlinx.coroutines.flow.Flow
import org.matrix.rustcomponents.sdk.Session
interface SessionStore {
fun isLoggedIn(): Flow
suspend fun storeData(session: Session)
+ suspend fun getSession(sessionId: SessionId): Session?
suspend fun getLatestSession(): Session?
suspend fun reset()
}
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/sync/SlidingSyncObserverProxy.kt
similarity index 87%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/sync/SlidingSyncObserverProxy.kt
index 014d9c64c8..1922eb985f 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/sync/SlidingSyncObserverProxy.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/sync/SlidingSyncObserverProxy.kt
@@ -14,9 +14,8 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.sync
+package io.element.android.libraries.matrix.sync
-import io.element.android.x.core.coroutine.CoroutineDispatchers
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
@@ -30,7 +29,6 @@ private const val BUFFER_SIZE = 64
class SlidingSyncObserverProxy(
private val coroutineScope: CoroutineScope,
- private val coroutineDispatchers: CoroutineDispatchers
) : SlidingSyncObserver {
private val updateSummaryMutableFlow =
@@ -39,7 +37,7 @@ class SlidingSyncObserverProxy(
override fun didReceiveSyncUpdate(summary: UpdateSummary) {
if (summary.rooms.isEmpty()) return
- coroutineScope.launch(coroutineDispatchers.io) {
+ coroutineScope.launch {
updateSummaryMutableFlow.emit(summary)
}
}
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/sync/SlidingSyncViewFlows.kt
similarity index 93%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/sync/SlidingSyncViewFlows.kt
index 0fed5ee936..a3d323b8d0 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/sync/SlidingSyncViewFlows.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/sync/SlidingSyncViewFlows.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.sync
+package io.element.android.libraries.matrix.sync
-import io.element.android.x.matrix.util.mxCallbackFlow
+import io.element.android.libraries.matrix.util.mxCallbackFlow
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/MatrixTimeline.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/timeline/MatrixTimeline.kt
similarity index 93%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/MatrixTimeline.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/timeline/MatrixTimeline.kt
index 2f383cebf2..67ab8969b3 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/MatrixTimeline.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/timeline/MatrixTimeline.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.timeline
+package io.element.android.libraries.matrix.timeline
-import io.element.android.x.matrix.core.EventId
+import io.element.android.libraries.matrix.core.EventId
import kotlinx.coroutines.flow.Flow
import org.matrix.rustcomponents.sdk.TimelineListener
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/MatrixTimelineItem.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/timeline/MatrixTimelineItem.kt
similarity index 96%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/MatrixTimelineItem.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/timeline/MatrixTimelineItem.kt
index 365319d803..022988fd4f 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/MatrixTimelineItem.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/timeline/MatrixTimelineItem.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.timeline
+package io.element.android.libraries.matrix.timeline
import org.matrix.rustcomponents.sdk.EventTimelineItem
import org.matrix.rustcomponents.sdk.TimelineItem
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/RustMatrixTimeline.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/timeline/RustMatrixTimeline.kt
similarity index 95%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/RustMatrixTimeline.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/timeline/RustMatrixTimeline.kt
index ecfce4af7a..1f6722d823 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/timeline/RustMatrixTimeline.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/timeline/RustMatrixTimeline.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.timeline
+package io.element.android.libraries.matrix.timeline
-import io.element.android.x.core.coroutine.CoroutineDispatchers
-import io.element.android.x.matrix.core.EventId
-import io.element.android.x.matrix.room.RustMatrixRoom
+import io.element.android.libraries.core.coroutine.CoroutineDispatchers
+import io.element.android.libraries.matrix.core.EventId
+import io.element.android.libraries.matrix.room.RustMatrixRoom
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.Flow
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/tracing/TracingConfiguration.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/tracing/TracingConfiguration.kt
similarity index 97%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/tracing/TracingConfiguration.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/tracing/TracingConfiguration.kt
index e73449c43f..9c7dc1632d 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/tracing/TracingConfiguration.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/tracing/TracingConfiguration.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.tracing
+package io.element.android.libraries.matrix.tracing
data class TracingConfiguration(
val common: LogLevel = LogLevel.Warn,
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/util/CallbackFlow.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/util/CallbackFlow.kt
similarity index 95%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/util/CallbackFlow.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/util/CallbackFlow.kt
index 8625325cab..3b82cc2489 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/util/CallbackFlow.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/util/CallbackFlow.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.util
+package io.element.android.libraries.matrix.util
import kotlinx.coroutines.channels.ProducerScope
import kotlinx.coroutines.channels.awaitClose
diff --git a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/util/Error.kt b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/util/Error.kt
similarity index 94%
rename from libraries/matrix/src/main/kotlin/io/element/android/x/matrix/util/Error.kt
rename to libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/util/Error.kt
index a2d1720041..d480262f81 100644
--- a/libraries/matrix/src/main/kotlin/io/element/android/x/matrix/util/Error.kt
+++ b/libraries/matrix/src/main/kotlin/io/element/android/libraries/matrix/util/Error.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.util
+package io.element.android.libraries.matrix.util
import org.matrix.rustcomponents.sdk.ClientException
import timber.log.Timber
diff --git a/libraries/matrixtest/build.gradle.kts b/libraries/matrixtest/build.gradle.kts
index f4ba43aaac..39641e7eed 100644
--- a/libraries/matrixtest/build.gradle.kts
+++ b/libraries/matrixtest/build.gradle.kts
@@ -21,10 +21,10 @@ plugins {
}
android {
- namespace = "io.element.android.x.libraries.matrix.test"
+ namespace = "io.element.android.libraries.matrix.test"
}
dependencies {
- api(project(":libraries:matrix"))
+ api(projects.libraries.matrix)
api(libs.coroutines.core)
}
diff --git a/libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/FakeMatrixClient.kt b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/FakeMatrixClient.kt
similarity index 72%
rename from libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/FakeMatrixClient.kt
rename to libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/FakeMatrixClient.kt
index 5e55b6dc79..4593fe252a 100644
--- a/libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/FakeMatrixClient.kt
+++ b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/FakeMatrixClient.kt
@@ -14,18 +14,18 @@
* limitations under the License.
*/
-package io.element.android.x.libraries.matrixtest
+package io.element.android.libraries.matrixtest
-import io.element.android.x.matrix.MatrixClient
-import io.element.android.x.matrix.core.RoomId
-import io.element.android.x.matrix.core.SessionId
-import io.element.android.x.matrix.core.UserId
-import io.element.android.x.libraries.matrixtest.media.FakeMediaResolver
-import io.element.android.x.matrix.media.MediaResolver
-import io.element.android.x.libraries.matrixtest.room.FakeMatrixRoom
-import io.element.android.x.libraries.matrixtest.room.InMemoryRoomSummaryDataSource
-import io.element.android.x.matrix.room.MatrixRoom
-import io.element.android.x.matrix.room.RoomSummaryDataSource
+import io.element.android.libraries.matrix.MatrixClient
+import io.element.android.libraries.matrix.core.RoomId
+import io.element.android.libraries.matrix.core.SessionId
+import io.element.android.libraries.matrix.core.UserId
+import io.element.android.libraries.matrix.media.MediaResolver
+import io.element.android.libraries.matrix.room.MatrixRoom
+import io.element.android.libraries.matrix.room.RoomSummaryDataSource
+import io.element.android.libraries.matrixtest.media.FakeMediaResolver
+import io.element.android.libraries.matrixtest.room.FakeMatrixRoom
+import io.element.android.libraries.matrixtest.room.InMemoryRoomSummaryDataSource
import org.matrix.rustcomponents.sdk.MediaSource
class FakeMatrixClient(override val sessionId: SessionId) : MatrixClient {
diff --git a/libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/media/FakeMediaResolver.kt b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/media/FakeMediaResolver.kt
similarity index 88%
rename from libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/media/FakeMediaResolver.kt
rename to libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/media/FakeMediaResolver.kt
index 07fc24c468..ef171e5a09 100644
--- a/libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/media/FakeMediaResolver.kt
+++ b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/media/FakeMediaResolver.kt
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package io.element.android.x.libraries.matrixtest.media
+package io.element.android.libraries.matrixtest.media
-import io.element.android.x.matrix.media.MediaResolver
+import io.element.android.libraries.matrix.media.MediaResolver
class FakeMediaResolver : MediaResolver {
override suspend fun resolve(url: String?, kind: MediaResolver.Kind): ByteArray? {
diff --git a/libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/room/FakeMatrixRoom.kt b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/room/FakeMatrixRoom.kt
similarity index 83%
rename from libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/room/FakeMatrixRoom.kt
rename to libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/room/FakeMatrixRoom.kt
index fca74a59d9..76da14418d 100644
--- a/libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/room/FakeMatrixRoom.kt
+++ b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/room/FakeMatrixRoom.kt
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package io.element.android.x.libraries.matrixtest.room
+package io.element.android.libraries.matrixtest.room
-import io.element.android.x.matrix.core.EventId
-import io.element.android.x.matrix.core.RoomId
-import io.element.android.x.matrix.room.MatrixRoom
-import io.element.android.x.libraries.matrixtest.timeline.FakeMatrixTimeline
-import io.element.android.x.matrix.timeline.MatrixTimeline
+import io.element.android.libraries.matrix.core.EventId
+import io.element.android.libraries.matrix.core.RoomId
+import io.element.android.libraries.matrix.room.MatrixRoom
+import io.element.android.libraries.matrix.timeline.MatrixTimeline
+import io.element.android.libraries.matrixtest.timeline.FakeMatrixTimeline
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.emptyFlow
diff --git a/libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/room/InMemoryRoomSummaryDataSource.kt b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/room/InMemoryRoomSummaryDataSource.kt
similarity index 65%
rename from libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/room/InMemoryRoomSummaryDataSource.kt
rename to libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/room/InMemoryRoomSummaryDataSource.kt
index eaa75e1448..5179e911ab 100644
--- a/libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/room/InMemoryRoomSummaryDataSource.kt
+++ b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/room/InMemoryRoomSummaryDataSource.kt
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package io.element.android.x.libraries.matrixtest.room
+package io.element.android.libraries.matrixtest.room
-import io.element.android.x.matrix.room.RoomSummary
-import io.element.android.x.matrix.room.RoomSummaryDataSource
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.emptyFlow
+import io.element.android.libraries.matrix.room.RoomSummary
+import io.element.android.libraries.matrix.room.RoomSummaryDataSource
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
class InMemoryRoomSummaryDataSource : RoomSummaryDataSource {
- override fun roomSummaries(): Flow> {
- return emptyFlow()
+ override fun roomSummaries(): StateFlow> {
+ return MutableStateFlow(emptyList())
}
override fun setSlidingSyncRange(range: IntRange) = Unit
diff --git a/libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/timeline/FakeMatrixTimeline.kt b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/timeline/FakeMatrixTimeline.kt
similarity index 87%
rename from libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/timeline/FakeMatrixTimeline.kt
rename to libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/timeline/FakeMatrixTimeline.kt
index 27443bde6f..60fa211b1d 100644
--- a/libraries/matrixtest/src/main/kotlin/io/element/android/x/libraries/matrixtest/timeline/FakeMatrixTimeline.kt
+++ b/libraries/matrixtest/src/main/kotlin/io/element/android/libraries/matrixtest/timeline/FakeMatrixTimeline.kt
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package io.element.android.x.libraries.matrixtest.timeline
+package io.element.android.libraries.matrixtest.timeline
-import io.element.android.x.matrix.core.EventId
-import io.element.android.x.matrix.timeline.MatrixTimeline
-import io.element.android.x.matrix.timeline.MatrixTimelineItem
+import io.element.android.libraries.matrix.core.EventId
+import io.element.android.libraries.matrix.timeline.MatrixTimeline
+import io.element.android.libraries.matrix.timeline.MatrixTimelineItem
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.emptyFlow
import org.matrix.rustcomponents.sdk.TimelineListener
diff --git a/libraries/matrixui/build.gradle.kts b/libraries/matrixui/build.gradle.kts
index 9e32aea0a8..38004098ca 100644
--- a/libraries/matrixui/build.gradle.kts
+++ b/libraries/matrixui/build.gradle.kts
@@ -22,7 +22,7 @@ plugins {
}
android {
- namespace = "io.element.android.x.matrix.ui"
+ namespace = "io.element.android.libraries.matrix.ui"
}
anvil {
@@ -30,12 +30,12 @@ anvil {
}
dependencies {
- implementation(project(":anvilannotations"))
- anvil(project(":anvilcodegen"))
- implementation(project(":libraries:di"))
- implementation(project(":libraries:architecture"))
- implementation(project(":libraries:matrix"))
- implementation(project(":libraries:designsystem"))
- implementation(project(":libraries:core"))
+ implementation(projects.anvilannotations)
+ anvil(projects.anvilcodegen)
+ implementation(projects.libraries.di)
+ implementation(projects.libraries.architecture)
+ implementation(projects.libraries.matrix)
+ implementation(projects.libraries.designsystem)
+ implementation(projects.libraries.core)
implementation(libs.coil.compose)
}
diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/MatrixItemHelper.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/MatrixItemHelper.kt
similarity index 54%
rename from libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/MatrixItemHelper.kt
rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/MatrixItemHelper.kt
index 49a97b3a5f..8f1dcc203a 100644
--- a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/MatrixItemHelper.kt
+++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/MatrixItemHelper.kt
@@ -14,15 +14,12 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.ui
+package io.element.android.libraries.matrix.ui
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.designsystem.components.avatar.AvatarSize
-import io.element.android.x.matrix.MatrixClient
-import io.element.android.x.matrix.media.MediaResolver
-import io.element.android.x.matrix.room.MatrixRoom
-import io.element.android.x.matrix.room.RoomSummary
-import io.element.android.x.matrix.ui.model.MatrixUser
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.designsystem.components.avatar.AvatarSize
+import io.element.android.libraries.matrix.MatrixClient
+import io.element.android.libraries.matrix.ui.model.MatrixUser
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.asFlow
@@ -40,7 +37,7 @@ class MatrixItemHelper @Inject constructor(
val userAvatarUrl = client.loadUserAvatarURLString().getOrNull()
val userDisplayName = client.loadUserDisplayName().getOrNull()
val avatarData =
- loadAvatarData(
+ AvatarData(
userDisplayName ?: client.userId().value,
userAvatarUrl,
avatarSize
@@ -48,35 +45,8 @@ class MatrixItemHelper @Inject constructor(
MatrixUser(
id = client.userId(),
username = userDisplayName,
- avatarUrl = userAvatarUrl,
avatarData = avatarData,
)
}.asFlow()
}
-
- suspend fun loadAvatarData(room: MatrixRoom, size: AvatarSize): AvatarData {
- return loadAvatarData(
- name = room.bestName,
- url = room.avatarUrl,
- size = size
- )
- }
-
- suspend fun loadAvatarData(roomSummary: RoomSummary.Filled, size: AvatarSize): AvatarData {
- return loadAvatarData(
- name = roomSummary.details.name,
- url = roomSummary.details.avatarURLString,
- size = size
- )
- }
-
- suspend fun loadAvatarData(
- name: String,
- url: String?,
- size: AvatarSize
- ): AvatarData {
- val model = client.mediaResolver()
- .resolve(url, kind = MediaResolver.Kind.Thumbnail(size.value))
- return AvatarData(name, model, size)
- }
}
diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/components/MatrixUserHeader.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt
similarity index 85%
rename from libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/components/MatrixUserHeader.kt
rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt
index 08acd79a0c..3fe339180e 100644
--- a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/components/MatrixUserHeader.kt
+++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.ui.components
+package io.element.android.libraries.matrix.ui.components
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
@@ -33,12 +33,12 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import io.element.android.x.designsystem.components.avatar.Avatar
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.designsystem.components.avatar.AvatarSize
-import io.element.android.x.matrix.core.UserId
-import io.element.android.x.matrix.ui.model.MatrixUser
-import io.element.android.x.matrix.ui.model.getBestName
+import io.element.android.libraries.designsystem.components.avatar.Avatar
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.designsystem.components.avatar.AvatarSize
+import io.element.android.libraries.matrix.core.UserId
+import io.element.android.libraries.matrix.ui.model.MatrixUser
+import io.element.android.libraries.matrix.ui.model.getBestName
@Composable
fun MatrixUserHeader(
@@ -87,7 +87,6 @@ fun MatrixUserHeaderPreview() {
MatrixUser(
id = UserId("@alice:server.org"),
username = "Alice",
- avatarUrl = null,
avatarData = AvatarData("Alice")
)
)
@@ -100,7 +99,6 @@ fun MatrixUserHeaderNoUsernamePreview() {
MatrixUser(
id = UserId("@alice:server.org"),
username = null,
- avatarUrl = null,
avatarData = AvatarData("Alice")
)
)
diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/components/MatrixUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt
similarity index 86%
rename from libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/components/MatrixUserRow.kt
rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt
index e121ced17c..498a8d17a9 100644
--- a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/components/MatrixUserRow.kt
+++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.ui.components
+package io.element.android.libraries.matrix.ui.components
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
@@ -33,11 +33,11 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import io.element.android.x.designsystem.components.avatar.Avatar
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.matrix.core.UserId
-import io.element.android.x.matrix.ui.model.MatrixUser
-import io.element.android.x.matrix.ui.model.getBestName
+import io.element.android.libraries.designsystem.components.avatar.Avatar
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.matrix.core.UserId
+import io.element.android.libraries.matrix.ui.model.MatrixUser
+import io.element.android.libraries.matrix.ui.model.getBestName
@Composable
fun MatrixUserRow(
@@ -91,7 +91,6 @@ fun MatrixUserRowPreview() {
MatrixUser(
id = UserId("@alice:server.org"),
username = "Alice",
- avatarUrl = null,
avatarData = AvatarData("Alice")
)
)
diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/di/MatrixUIBindings.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/di/MatrixUIBindings.kt
similarity index 76%
rename from libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/di/MatrixUIBindings.kt
rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/di/MatrixUIBindings.kt
index 557d896cb8..a5734f5b9c 100644
--- a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/di/MatrixUIBindings.kt
+++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/di/MatrixUIBindings.kt
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.ui.di
+package io.element.android.libraries.matrix.ui.di
import com.squareup.anvil.annotations.ContributesTo
-import io.element.android.x.di.SessionScope
-import io.element.android.x.matrix.ui.media.LoggedInImageLoaderFactory
-import io.element.android.x.matrix.ui.media.NotLoggedInImageLoaderFactory
+import io.element.android.libraries.di.SessionScope
+import io.element.android.libraries.matrix.ui.media.LoggedInImageLoaderFactory
+import io.element.android.libraries.matrix.ui.media.NotLoggedInImageLoaderFactory
@ContributesTo(SessionScope::class)
interface MatrixUIBindings {
diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/AvatarDataExt.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/AvatarDataExt.kt
new file mode 100644
index 0000000000..7ede975af5
--- /dev/null
+++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/AvatarDataExt.kt
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.libraries.matrix.ui.media
+
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.matrix.media.MediaResolver
+import org.matrix.rustcomponents.sdk.mediaSourceFromUrl
+
+fun AvatarData.toMetadata(): MediaResolver.Meta {
+ val mediaSource = url?.let { mediaSourceFromUrl(it) }
+ return MediaResolver.Meta(source = mediaSource, kind = MediaResolver.Kind.Thumbnail(size.value))
+}
diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/ImageLoaderFactories.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderFactories.kt
similarity index 80%
rename from libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/ImageLoaderFactories.kt
rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderFactories.kt
index eecb25f9f2..70a7ab2afb 100644
--- a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/ImageLoaderFactories.kt
+++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderFactories.kt
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.ui.media
+package io.element.android.libraries.matrix.ui.media
import android.content.Context
import coil.ImageLoader
import coil.ImageLoaderFactory
-import io.element.android.x.di.ApplicationContext
-import io.element.android.x.matrix.MatrixClient
+import io.element.android.libraries.di.ApplicationContext
+import io.element.android.libraries.matrix.MatrixClient
import javax.inject.Inject
class LoggedInImageLoaderFactory @Inject constructor(
@@ -31,8 +31,10 @@ class LoggedInImageLoaderFactory @Inject constructor(
return ImageLoader
.Builder(context)
.components {
+ add(AvatarKeyer())
add(MediaKeyer())
- add(MediaFetcher.Factory(matrixClient))
+ add(MediaFetcher.AvatarFactory(matrixClient))
+ add(MediaFetcher.MetaFactory(matrixClient))
}
.build()
}
diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/MediaFetcher.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/MediaFetcher.kt
similarity index 66%
rename from libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/MediaFetcher.kt
rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/MediaFetcher.kt
index a443f7486d..22daed0851 100644
--- a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/MediaFetcher.kt
+++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/MediaFetcher.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,14 +14,15 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.ui.media
+package io.element.android.libraries.matrix.ui.media
import coil.ImageLoader
import coil.fetch.FetchResult
import coil.fetch.Fetcher
import coil.request.Options
-import io.element.android.x.matrix.MatrixClient
-import io.element.android.x.matrix.media.MediaResolver
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.matrix.MatrixClient
+import io.element.android.libraries.matrix.media.MediaResolver
import java.nio.ByteBuffer
internal class MediaFetcher(
@@ -37,7 +38,7 @@ internal class MediaFetcher(
return imageLoader.components.newFetcher(byteBuffer, options, imageLoader)?.first?.fetch()
}
- class Factory(private val client: MatrixClient) :
+ class MetaFactory(private val client: MatrixClient) :
Fetcher.Factory {
override fun create(
data: MediaResolver.Meta,
@@ -52,4 +53,20 @@ internal class MediaFetcher(
)
}
}
+
+ class AvatarFactory(private val client: MatrixClient) :
+ Fetcher.Factory {
+ override fun create(
+ data: AvatarData,
+ options: Options,
+ imageLoader: ImageLoader
+ ): Fetcher {
+ return MediaFetcher(
+ mediaResolver = client.mediaResolver(),
+ meta = data.toMetadata(),
+ options = options,
+ imageLoader = imageLoader
+ )
+ }
+ }
}
diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/MediaKeyer.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/MediaKeyer.kt
similarity index 63%
rename from libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/MediaKeyer.kt
rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/MediaKeyer.kt
index 0831f6815e..f390b352dc 100644
--- a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/media/MediaKeyer.kt
+++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/MediaKeyer.kt
@@ -14,14 +14,23 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.ui.media
+package io.element.android.libraries.matrix.ui.media
import coil.key.Keyer
import coil.request.Options
-import io.element.android.x.matrix.media.MediaResolver
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.matrix.media.MediaResolver
+
+internal class AvatarKeyer : Keyer {
+ override fun key(data: AvatarData, options: Options): String? {
+ return data.toMetadata().toKey()
+ }
+}
internal class MediaKeyer : Keyer {
override fun key(data: MediaResolver.Meta, options: Options): String? {
- return "${data.source.url()}_${data.kind}"
+ return data.toKey()
}
}
+
+private fun MediaResolver.Meta.toKey() = "${source?.url()}_${kind}"
diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/model/MatrixUser.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUser.kt
similarity index 78%
rename from libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/model/MatrixUser.kt
rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUser.kt
index 835ea35a7a..1fdc63ab3e 100644
--- a/libraries/matrixui/src/main/kotlin/io/element/android/x/matrix/ui/model/MatrixUser.kt
+++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUser.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,17 +14,16 @@
* limitations under the License.
*/
-package io.element.android.x.matrix.ui.model
+package io.element.android.libraries.matrix.ui.model
import androidx.compose.runtime.Immutable
-import io.element.android.x.designsystem.components.avatar.AvatarData
-import io.element.android.x.matrix.core.UserId
+import io.element.android.libraries.designsystem.components.avatar.AvatarData
+import io.element.android.libraries.matrix.core.UserId
@Immutable
data class MatrixUser(
val id: UserId,
val username: String? = null,
- val avatarUrl: String? = null,
val avatarData: AvatarData = AvatarData(),
)
diff --git a/libraries/testtags/build.gradle.kts b/libraries/testtags/build.gradle.kts
new file mode 100644
index 0000000000..88ad19677c
--- /dev/null
+++ b/libraries/testtags/build.gradle.kts
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+plugins {
+ id("io.element.android-compose-library")
+}
+
+android {
+ namespace = "io.element.android.libraries.testtags"
+}
diff --git a/libraries/testtags/src/main/AndroidManifest.xml b/libraries/testtags/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..ab34d2c3dd
--- /dev/null
+++ b/libraries/testtags/src/main/AndroidManifest.xml
@@ -0,0 +1,17 @@
+
+
+
diff --git a/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/Compose.kt b/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/Compose.kt
new file mode 100644
index 0000000000..966c88fa06
--- /dev/null
+++ b/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/Compose.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.libraries.testtags
+
+import androidx.compose.ui.ExperimentalComposeUiApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.semantics.testTag
+import androidx.compose.ui.semantics.testTagsAsResourceId
+
+/**
+ * Add a testTag to a Modifier, to be used by external tool, like TrafficLight for instance.
+ */
+@OptIn(ExperimentalComposeUiApi::class)
+fun Modifier.testTag(id: TestTag) = this.then(
+ semantics {
+ testTag = id.value
+ testTagsAsResourceId = true
+ }
+)
diff --git a/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt b/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt
new file mode 100644
index 0000000000..a254a636ef
--- /dev/null
+++ b/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2023 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.element.android.libraries.testtags
+
+@JvmInline
+value class TestTag internal constructor(val value: String)
+
+object TestTags {
+ /**
+ * OnBoarding screen.
+ */
+ val onBoardingSignIn = TestTag("onboarding-sign_in")
+
+ /**
+ * Login screen.
+ */
+ val loginChangeServer = TestTag("login-change_server")
+ val loginEmailUsername = TestTag("login-email_username")
+ val loginPassword = TestTag("login-password")
+ val loginContinue = TestTag("login-continue")
+
+ /**
+ * Change server screen.
+ */
+ val changeServerServer = TestTag("change_server-server")
+ val changeServerContinue = TestTag("change_server-continue")
+}
+
+
diff --git a/libraries/textcomposer/build.gradle.kts b/libraries/textcomposer/build.gradle.kts
index 41cc543ba2..4b5f82f747 100644
--- a/libraries/textcomposer/build.gradle.kts
+++ b/libraries/textcomposer/build.gradle.kts
@@ -23,17 +23,18 @@ plugins {
}
android {
- namespace = "io.element.android.x.textcomposer"
+ namespace = "io.element.android.libraries.textcomposer"
buildFeatures {
viewBinding = true
}
}
dependencies {
- implementation(project(":libraries:elementresources"))
- implementation(project(":libraries:ui-strings"))
- implementation(project(":libraries:core"))
- implementation(project(":libraries:matrix"))
+ implementation(projects.libraries.elementresources)
+ implementation(projects.libraries.uiStrings)
+ implementation(projects.libraries.androidutils)
+ implementation(projects.libraries.core)
+ implementation(projects.libraries.matrix)
implementation(libs.wysiwyg)
implementation(libs.androidx.constraintlayout)
implementation("com.google.android.material:material:1.7.0")
diff --git a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/MessageComposerMode.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/MessageComposerMode.kt
similarity index 91%
rename from libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/MessageComposerMode.kt
rename to libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/MessageComposerMode.kt
index 715b9c6cd6..fed8265656 100644
--- a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/MessageComposerMode.kt
+++ b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/MessageComposerMode.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package io.element.android.x.textcomposer
+package io.element.android.libraries.textcomposer
import android.os.Parcelable
-import io.element.android.x.matrix.core.EventId
+import io.element.android.libraries.matrix.core.EventId
import kotlinx.parcelize.Parcelize
sealed interface MessageComposerMode : Parcelable {
diff --git a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/MessageComposerView.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/MessageComposerView.kt
similarity index 94%
rename from libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/MessageComposerView.kt
rename to libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/MessageComposerView.kt
index 8592ec1809..d646a09ffc 100644
--- a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/MessageComposerView.kt
+++ b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/MessageComposerView.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.textcomposer
+package io.element.android.libraries.textcomposer
import android.net.Uri
import android.text.Editable
diff --git a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/RichTextComposerLayout.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/RichTextComposerLayout.kt
similarity index 96%
rename from libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/RichTextComposerLayout.kt
rename to libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/RichTextComposerLayout.kt
index 7eb8d5dcda..f81e8c2c19 100644
--- a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/RichTextComposerLayout.kt
+++ b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/RichTextComposerLayout.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.textcomposer
+package io.element.android.libraries.textcomposer
import android.annotation.SuppressLint
import android.content.Context
@@ -40,18 +40,18 @@ import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import com.google.android.material.shape.MaterialShapeDrawable
+import io.element.android.libraries.androidutils.ui.DimensionConverter
+import io.element.android.libraries.androidutils.ui.hideKeyboard
+import io.element.android.libraries.androidutils.ui.showKeyboard
+import io.element.android.libraries.textcomposer.databinding.ComposerRichTextLayoutBinding
+import io.element.android.libraries.textcomposer.databinding.ViewRichTextMenuButtonBinding
+import io.element.android.libraries.textcomposer.tools.setTextIfDifferent
import io.element.android.wysiwyg.EditorEditText
import io.element.android.wysiwyg.inputhandlers.models.InlineFormat
-import io.element.android.x.core.ui.DimensionConverter
-import io.element.android.x.core.ui.hideKeyboard
-import io.element.android.x.core.ui.showKeyboard
-import io.element.android.x.textcomposer.databinding.ComposerRichTextLayoutBinding
-import io.element.android.x.textcomposer.databinding.ViewRichTextMenuButtonBinding
-import io.element.android.x.textcomposer.tools.setTextIfDifferent
import uniffi.wysiwyg_composer.ActionState
import uniffi.wysiwyg_composer.ComposerAction
-import io.element.android.x.element.resources.R as ElementR
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.libraries.resources.R as ElementR
+import io.element.android.libraries.ui.strings.R as StringR
// Imported from Element Android
class RichTextComposerLayout @JvmOverloads constructor(
diff --git a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/TextComposer.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/TextComposer.kt
similarity index 97%
rename from libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/TextComposer.kt
rename to libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/TextComposer.kt
index 6dbc649acb..930b5d6f77 100644
--- a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/TextComposer.kt
+++ b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/TextComposer.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.textcomposer
+package io.element.android.libraries.textcomposer
import android.graphics.Color
import android.net.Uri
@@ -33,7 +33,7 @@ import androidx.compose.ui.unit.sp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
-import io.element.android.x.ui.strings.R as StringR
+import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun TextComposer(
diff --git a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/EditTextExtensions.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/tools/EditTextExtensions.kt
similarity index 94%
rename from libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/EditTextExtensions.kt
rename to libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/tools/EditTextExtensions.kt
index d429385a9a..03d501f258 100644
--- a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/EditTextExtensions.kt
+++ b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/tools/EditTextExtensions.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.textcomposer.tools
+package io.element.android.libraries.textcomposer.tools
import android.text.Spanned
import android.widget.EditText
diff --git a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/SimpleTransitionListener.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/tools/SimpleTransitionListener.kt
similarity index 95%
rename from libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/SimpleTransitionListener.kt
rename to libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/tools/SimpleTransitionListener.kt
index e165f18dc7..0aab1bdb6a 100644
--- a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/SimpleTransitionListener.kt
+++ b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/tools/SimpleTransitionListener.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.textcomposer.tools
+package io.element.android.libraries.textcomposer.tools
import androidx.transition.Transition
diff --git a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/ViewExtensions.kt b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/tools/ViewExtensions.kt
similarity index 93%
rename from libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/ViewExtensions.kt
rename to libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/tools/ViewExtensions.kt
index 94b1e4613e..8f1a1aacca 100644
--- a/libraries/textcomposer/src/main/kotlin/io/element/android/x/textcomposer/tools/ViewExtensions.kt
+++ b/libraries/textcomposer/src/main/kotlin/io/element/android/libraries/textcomposer/tools/ViewExtensions.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.textcomposer.tools
+package io.element.android.libraries.textcomposer.tools
import android.view.ViewGroup
import androidx.transition.ChangeBounds
diff --git a/libraries/ui-strings/build.gradle.kts b/libraries/ui-strings/build.gradle.kts
index dc4693ad7f..33dc7d6ba6 100644
--- a/libraries/ui-strings/build.gradle.kts
+++ b/libraries/ui-strings/build.gradle.kts
@@ -22,7 +22,7 @@ plugins {
}
android {
- namespace = "io.element.android.x.ui.strings"
+ namespace = "io.element.android.libraries.ui.strings"
}
// forcing the stem string template generator to be cacheable, without this the templates
diff --git a/libraries/ui-strings/src/main/res/values-ar/strings.xml b/libraries/ui-strings/src/main/res/values-ar/strings.xml
index a49ecc3d08..395b4c70a8 100644
--- a/libraries/ui-strings/src/main/res/values-ar/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-ar/strings.xml
@@ -16,7 +16,7 @@
غيّر %1$s اسم الغُرفة إلى: %2$s
أجابَ %s على المُكالمة.
أنهى %s المُكالمة.
- جعلَ %1$s التأريخ المُستقبلي للغُرفة مرئيًا لـ %2$s
+ جعلَ %1$s عند انشاء الغرف لاحقاً تكون مرئية ل%2$s
جميع أعضاء الغُرفة، مِنَ اللَّحظة التي تمَّت دعوتهم.
جميع أعضاء الغُرفة، مِن لحظة إنضمامهم.
جميع أعضاء الغُرفة.
@@ -63,7 +63,7 @@
أرسلتَ بيانات لإعداد مُكالمة.
أجبتَ على المُكالمة.
أنهيتَ المُكالمة.
- جعلتَ التأريخ المُستقبلي للغُرفة مرئيًا لـ %1$s
+ لقدت جعلت الغرفة التي سيتم انشائها مرئيًا لـ %1$s
رقّى %s هذه الغرفة.
رقَّيتَ هذه الغرفة.
أزلتَ اسم الغُرفة
@@ -93,9 +93,9 @@
لا تغيير.
• خوادِم مُطابقة IP الحرفية محظورة الآن.
• الخوادِم المُطابقة لـ %s أُزيلت مِن قائمة السماح.
- • الخوادِم المُطابقة لـ %s مسموحة الآن.
+ • الخوادِم المُطابقة لـ %s اصبحت مسموحة الآن.
• الخوادِم المُطابقة لـ %s أُزيلت مِن قائمة الحظر.
- • الخوادِم المُطابقة لـ %s محظورة الآن.
+ • الخوادِم مُتطابقة لـ %s واصبحت محظورة الآن.
• خوادِم مُطابقة IP الحرفية مسموحة الآن.
لقد غَيَّرت قائمة الوصول لهذه الغُرفة.
غَيَّرَ %s قائمة التحكم بالوصول (ACL) لهذه الغُرفة.
@@ -234,7 +234,7 @@
انتهت المكالمة
مكالمة صورية واردة
مكالمة صوتية واردة
- المكالمة جارية
+ المكالمة جارية…
معلومات
نعم
لا
@@ -291,9 +291,7 @@
كلمة السر الجديدة
فشل تحديث كلمة السر
حُدّثت كلمة السر
- أأعرض كل رسائل %s؟
-
-سيُعيد هذا الإجراء تشغيل التطبيق وقد يأخذ بعض الوقت.
+ أأعرض كل الرسائل من %s؟ سيُعيد هذا الإجراء تشغيل التطبيق وقد يأخذ بعض الوقت.
اختر دولة
٣ أيام
أسبوع واحد
@@ -471,7 +469,7 @@
رقم الهاتف مستخدم بالفعل
معطّل
مزعج
- لا ترسل من هذا الجهاز الرسائل المعمّاة إلى الأجهزة غير المؤكّدة
+ لا ترسل من هذا الجهاز الرسائل المشفرة إلى الأجهزة غير الموثقة.
عمِّ إلى الأجهزة المؤكّدة فقط
<b>غير<b/> مؤكّدة
مؤكّدة
@@ -482,7 +480,7 @@
إن قال مدير الخادوم بأن هذا متوقع، فتأكد من أن البصمة أدناه تطابق البصمة التي وفّرها.
تغيّرت الشهادة من شهادة كنت تثق بها إلى شهادة لا تثق بها. لربما جدّد الخادوم شهادته. راسل إدارة الخادوم واسألهم عن البصمة المتوقعة.
أضِف اختصارا إلى الشاشة الرئيسية
- شاشة معلومات التطبيق في النظام
+ أظهر معلومات التطبيق في إعدادات النظام.
دعوات المكالمات
ابدأ عن الإقلاع
صدّر مفاتيح تعمية الطرفين لغرفة
@@ -566,11 +564,7 @@
وصل هذا الخادم الحدّ الأقصى للمستخدمين النشطين شهريًا بذلك لن يستطيع بعض المستخدمين الولوج لحساباتهم.
وصل خادوم المنزل هذا حدّ المستخدمين النشطين شهريًا.
يجري وصل الاتصال…
- سيجعل هذا حسابك محال الاستخدام للأبد. لن تقدر على الولوج ولن يقدر أحد على إعادة التسجيل بنفس معرّف المستخدم. سيتسبب هذا بأن يترك حسابك كل الغرف التي تشارك فيها، وستُزال تفاصيل الحساب من خادوم التعريف. هذا إجراء لا عودة فيه.
-
-حذفك لحسابك لا يتسبب بأن ننسى رسائلك التي أرسلتها (مبدئيًا). إن أردت ذلك فرجاءً أشّر على المربّع أدناه.
-
-ظهور الرسائل في «ماترِكس» شبيه كثيرًا بالبريد الإلكتروني. نسياننا لرسائلك يعني أن الرسائل التي أرسلتها لن تُشارك مع أي مستخدم جديد أو غير مسجّل، إلا أن المستخدمين المسجّلين الذي يقدرون على الوصول إليها سيمتلكون نسخة عنها.
+ سيجعل هذا حسابك محال الاستخدام للأبد. لن تقدر على تسجيل دخولك ولن يقدر أحد على إعادة التسجيل بنفس معرّف المستخدم. سيتسبب هذا بأن يترك حسابك كل الغرف التي تشارك فيها، وستُزال تفاصيل الحساب من خادم التعريف. هذا إجراء لا مجال الرجوع فيه. حذفك لحسابك لا يتسبب بأن ننسى رسائلك التي أرسلتها (مبدئيًا). إن أردت ذلك فرجاءً ضع علامة على المربّع أدناه. ظهور الرسائل في «ماترِكس» يشبه كثيرًا بالبريد الإلكتروني. نسياننا لرسائلك يعني أن الرسائل التي أرسلتها لن تُشارك مع أي مستخدم جديد أو غير مسجّل، إلا أن المستخدمين المسجّلين الذي يقدرون على الوصول إليها سيمتلكون نسخة عنها.
الرسائل الآمنة
تخطي
تم
@@ -580,7 +574,7 @@
الإعدادات المتقدمة للإشعارات
عند تسجيل الخروج الآن ستخسر مفاتيحك
النسخ الاحتياطي المفاتيح ما زال جاريا. في حال خروجك الآن لن تتمكن لاحقا من قراءة الرسائل المعماة.
- تأكد من تفعيل النسخ الاحتياطي للمفاتيح على كل أجهزتك كي لا تخسر رسائلك المعماة
+ تأكد من تفعيل النسخ الاحتياطي للمفاتيح على كل أجهزتك كي لا تخسر رسائلك المشفرة.
ينسخ احتياطيا المفاتيح…
ليس لديك تصريح لبدء إجتماع
ليس لديك تصريح لبدء إجتماع في هذه الغرفة
@@ -913,7 +907,7 @@
تحكم في محادثاتك.
تخط هذه الخطوة
احفظ وتابع
- حُفظت تفضيلاتك.
+ اذهب الى الاعدادات في اي وقت لتغير او تعديل ملفك الشخصي للتطبيق.
كل شيئ جاهز!
لننطلق
يمكنك تغييرها في أي وقت.
@@ -997,7 +991,7 @@
أنت تستعرض هذا النقاش سلفًا!
أنت تستعرض هذه الغرفة سلفًا!
منفصل عن الشبكة. تحقق من اتصالك.
- حدث عالجه مدير الغرفة.
+ حدث تم تغيره من مدير الغرفة.
ستعرض غرفك هنا. لانضمام لغرفة أو لإنشاء واحدة اضغط زر +.
ستعرض رسائلك المباشرة هنا. لبدأ محادثات جديدة اضغط زر +.
المحادثات
@@ -1175,4 +1169,30 @@
- كثيرة
- اخرى
-
\ No newline at end of file
+
+ - صفر
+ - واحد
+ - اثنان
+ - القليل
+ - العديد
+ - أخرى
+
+ ${app_name} يحتاج إلى حذف ذاكرة التخزين المؤقت حتى تكون مستحدثة، من أجل هذه الأسباب:
+\n%s
+\n
+\nملاحظة: هذا الإجراء سيؤدي إلى إعادة تشغيل التطبيق ومن الممكن أن يستغرق بعضاً من الوقت.
+ استكشف غُرف
+ تغيير التجمع
+ انشئ غرفة
+ ابدأ محادثة
+ كل المحادثات
+ أنت الذي انهيت البث الصوتي.
+
+ - صفر
+ - واحد
+ - اثنان
+ - القليل
+ - العديد
+ - أخرى
+
+
diff --git a/libraries/ui-strings/src/main/res/values-bg/strings.xml b/libraries/ui-strings/src/main/res/values-bg/strings.xml
index d3e9e599bc..5c147f59ef 100644
--- a/libraries/ui-strings/src/main/res/values-bg/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-bg/strings.xml
@@ -1483,8 +1483,6 @@
Потвърди сесията
Ръчно потвърждаване чрез текстово съобщение
Потвърдете новия вход достъпващ профила ви: %1$s
- Потвърдете всички сесии за да подсигурите, че профилът и съобщенията ви са в безопасност
- Прегледайте от къде сте влезли
Шифровано от непотвърдено устройство
Нешифровано
diff --git a/libraries/ui-strings/src/main/res/values-ca/strings.xml b/libraries/ui-strings/src/main/res/values-ca/strings.xml
index b86a834a27..1f2cf1983c 100644
--- a/libraries/ui-strings/src/main/res/values-ca/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-ca/strings.xml
@@ -1811,8 +1811,6 @@
No s\'ha pogut desar el fitxer multimèdia
Confirma la teva identitat verificant aquest inici de sessió i, així, poder-li donar accés als missatges xifrats.
Verifica l\'inici de sessió
- Verifica totes les teves sessions per assegurar-te que el teu compte i missatges estan segurs
- Comprova on has iniciat sessió
Xifrat amb un dispositiu no verificat
No xifrat
@@ -2293,7 +2291,6 @@
Acaba l\'enquesta
Això impedirà que la gent pugui votar i es mostraran els resultats finals de l\'enquesta.
Vols acabar l\'enquesta\?
- opció guanyadora
- Es necessita almenys %1$s opció
- Es necessiten almenys %1$s opcions
@@ -2717,9 +2714,6 @@
Els usuaris dels xats directes i sales al les quals t\'hagis unit poden veure la llista completa de les teves sessions.
\n
\nAixò els pot proporcionar més confiança de que realment parlen amb tu però, poden veure el nom de sessió que introdueixis.
- Les sessions verificades son sessions en què has iniciat sessió amb les teves credencials i s\'han verificat utilitzant una frase de seguretat o mitjançant la verificació creuada.
-\n
-\nAixò vol dir que contenen claus de xifrat dels teus missatges anteriors i confirmen als altres usuaris amb qui parles, que aquestes sessions son realment teves.
Les sessions no verificades son sessions en què has iniciat sessió amb les teves credencials però s\'hi ha fet una verificació creuada.
\n
\nAssegura\'t que reconeixes aquestes sessions especialment, ja que podrien representar un ús no autoritzat del teu compte.
@@ -2814,7 +2808,7 @@
Activa l\'editor de text enriquit
Rep notificacions en aquesta sessió.
Notificacions
- Carregant
+ Carregant
Pausa l\'emissió de veu
Reprodueix o reprèn l\'emissió de veu
Atura l\'enregistrament d\'emissió de veu
@@ -2839,4 +2833,4 @@
Format de text
Enrere 30 segons
Avança 30 segons
-
\ No newline at end of file
+
diff --git a/libraries/ui-strings/src/main/res/values-cs/strings.xml b/libraries/ui-strings/src/main/res/values-cs/strings.xml
index 2d2b91d645..c122de7798 100644
--- a/libraries/ui-strings/src/main/res/values-cs/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-cs/strings.xml
@@ -1469,8 +1469,6 @@
Přístup k zabezpečenému úložišti selhal
Nezašifrováno
Zašifrováno neověřeným zařízením
- Přezkoumejte, kde jste se přihlásili
- Ověřte všechny své relace za účelem bezpečí Vašeho účtu a zpráv
Ověřte nové přihlášení s přístupem na Váš účet: %1$s
Manuálně ověřit textem
Ověřit přihlášení
@@ -2313,7 +2311,6 @@
Ukončit hlasování
Toto zastaví možnost hlasování a zobrazí se konečné výsledky.
Ukončit toto hlasování\?
- vítězná volba
Ukončit hlasování
- Konečný výsledek na základě %1$d hlasu
@@ -2767,9 +2764,6 @@
\n
\nTo jim poskytuje jistotu, že s vámi skutečně mluví, ale také to znamená, že mohou vidět název relace, který zde zadáte.
Přejmenování relací
- Ověřené relace se přihlásily pomocí vašich přihlašovacích údajů a poté byly ověřeny buď pomocí vaší zabezpečené přístupové fráze, nebo křížovým ověřením.
-\n
-\nTo znamená, že uchovávají šifrovací klíče pro vaše předchozí zprávy a potvrzují ostatním uživatelům, se kterými komunikujete, že tyto relace jste skutečně vy.
Ověřené relace
Neověřené relace jsou relace, které se přihlásily pomocí vašich přihlašovacích údajů, ale nebyly křížově ověřeny.
\n
@@ -2868,7 +2862,7 @@
Druhé zařízení je již přihlášeno.
Při nastavování zabezpečeného zasílání zpráv se vyskytl problém se zabezpečením. Může být napadena jedna z následujících věcí: váš domovský server; vaše internetové připojení; vaše zařízení;
Žádost se nezdařila.
- Ukládání do vyrovnávací paměti…
+ Ukládání do vyrovnávací paměti…
Pozastavit hlasové vysílání
Přehrát nebo obnovit hlasové vysílání
Ukončit záznam hlasového vysílání
@@ -2955,4 +2949,34 @@
V této místnosti nejsou žádné aktivní hlasování
Aktivní hlasování
Historie hlasování
+ Ukončené hlasování
+ Hlasování
+ ukončil(a) hlasování.
+ Hlasování bylo ukončeno.
+ Váš domovský server zatím nepodporuje zobrazení seznamu vláken.
+ Nelze přehrát toto hlasové vysílání.
+ Hlasové vysílání bylo zahájeno
+ Kvůli chybám při dešifrování nemusí být některé hlasy započítány
+ Chyba při načítání hlasování.
+ Načíst další hlasování
+ Zobrazení hlasování
+
+ - Za uplynulý den nejsou k dispozici žádná hlasování.
+\nPro zobrazení hlasování z předchozích dnů načtěte další hlasování.
+ - Za poslední %1$d dny nejsou k dispozici žádná hlasování.
+\nPro zobrazení hlasování z předchozích dnů načtěte další hlasování.
+ - Za posledních %1$d dní nejsou k dispozici žádná hlasování.
+\nPro zobrazení hlasování z předchozích dnů načtěte další hlasování.
+
+
+ - Za uplynulý den nejsou žádná aktivní hlasování.
+\nPro zobrazení hlasování z předchozích dnů načtěte další ankety.
+ - Za poslední %1$d dny nejsou žádná aktivní hlasování.
+\nPro zobrazení hlasování z předchozích dnů načtěte další ankety.
+ - Za posledních %1$d dní nejsou žádná aktivní hlasování.
+\nPro zobrazení hlasování z předchozích dnů načtěte další ankety.
+
+ Hlasovou zprávu nelze spustit, protože právě nahráváte živé vysílání. Ukončete prosím živé vysílání, abyste mohli začít nahrávat hlasovou zprávu
+ Nelze spustit hlasovou zprávu
+ Chyba připojení - nahrávání pozastaveno
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-de/strings.xml b/libraries/ui-strings/src/main/res/values-de/strings.xml
index 52b8f0c716..17fa9b6e44 100644
--- a/libraries/ui-strings/src/main/res/values-de/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-de/strings.xml
@@ -1427,8 +1427,6 @@
Konnte nicht auf gesicherten Speicher zugreifen
Unverschlüsselt
Verschlüsselt von einem nicht verifiziertem Gerät
- Überprüfe, wo du angemeldet bist
- Verifiziere alle deine Sitzungen, um sicherzustellen, dass dein Konto und deine Nachrichten sicher sind
Bestätige neue Anmeldung zu deinem Konto: %1$s
Verifiziere manuell mit einem Text
Anmeldung verifizieren
@@ -2319,7 +2317,6 @@
Umfrage beenden
Dies verhindert, dass andere Personen abstimmen können, und zeigt die Endergebnisse der Umfrage an.
Diese Umfrage beenden\?
- Gewinneroption
Umfrage beenden
- Endgültiges Ergebnis basiert auf %1$d Stimme
@@ -2711,9 +2708,6 @@
Andere Nutzer in Direktnachrichten und Räumen, in denen du dich befindest, können eine vollständige Liste deiner Sitzungen einsehen.
\n
\nDies gibt ihnen die Sicherheit, dass sie auch wirklich mit dir kommunizieren. Allerdings bedeutet es auch, dass sie die Sitzungsnamen sehen können, die du hier angibst.
- Verifizierte Sitzungen wurden mit deinen Daten angemeldet und anschließend mit deiner Sicherheitspassphrase oder durch Quersignierung verifiziert.
-\n
-\nDies bedeutet, dass sie die Verschlüsselungs-Schlüssel für deine bisherigen Nachrichten besitzen und anderen Nutzern bestätigen können, dass diese Sitzungen tatsächlich von dir stammen.
Sitzungen umbenennen
Verifizierte Sitzungen
Nicht verifizierte Sitzungen sind jene, die angemeldet, aber nicht quer signiert sind.
@@ -2815,7 +2809,7 @@
Die Anfrage ist fehlgeschlagen.
Abspielen oder fortsetzen der Sprachübertragung
Fortsetzen der Sprachübertragung
- Puffere …
+ Puffere …
Pausiere Sprachübertragung
Stoppe Aufzeichnung der Sprachübertragung
Pausiere Aufzeichnung der Sprachübertragung
@@ -2893,9 +2887,35 @@
Zugriffstoken
Unsortierte Liste umschalten
Nummerierte Liste umschalten
- In diesem Raum gibt es noch keine abgeschlossenen Umfragen
+ In diesem Raum gibt es keine abgeschlossenen Umfragen
Vergangene Umfragen
In diesem Raum gibt es keine aktiven Umfragen
Aktive Umfragen
Umfrageverlauf
+ Beendete Umfrage
+ Umfrage
+ beendete eine Umfrage.
+ Umfrage beendet.
+ Dein Heim-Server unterstützt noch nicht das Auflisten von Threads.
+ Eine Sprachübertragung wurde begonnen
+ Wiedergabe der Sprachübertragung nicht möglich.
+ Evtl. werden infolge von Entschlüsselungsfehlern einige Stimmen nicht gezählt
+ Fehler beim Laden der Umfragen.
+ Weitere Umfragen laden
+ Zeige Umfragen an
+
+ - Für den vergangenen Tag sind keine aktiven Umfragen verfügbar.
+\nLade weitere Umfragen, um die der vorherigen Tage zu sehen.
+ - Für die vergangenen %1$d Tage sind keine aktiven Umfragen verfügbar.
+\nLade weitere Umfragen, um die der vorherigen Tage zu sehen.
+
+
+ - Für den vergangenen Tag sind keine beendeten Umfragen verfügbar.
+\nLade weitere Umfragen, um die der vorherigen Tage zu sehen.
+ - Für die vergangenen %1$d Tage sind keine beendeten Umfragen verfügbar.
+\nLade weitere Umfragen, um die der vorherigen Tage zu sehen.
+
+ Du kannst keine Sprachnachricht beginnen, da du im Moment eine Echtzeitübertragung aufzeichnest. Bitte beende deine Sprachübertragung, um ein Gespräch zu beginnen
+ Kann Sprachnachricht nicht beginnen
+ Verbindungsfehler − Aufnahme pausiert
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-eo/strings.xml b/libraries/ui-strings/src/main/res/values-eo/strings.xml
index e417d183bf..0aa395dcce 100644
--- a/libraries/ui-strings/src/main/res/values-eo/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-eo/strings.xml
@@ -1483,8 +1483,6 @@
Aldoni ĉambranojn
Konfirmu vian identecon per kontrolo de ĉi tiu saluto, donante al ĝi aliron al ĉifritaj mesaĝoj.
Kontrolu la novan saluton, kiu aliras vian konton: %1$s
- Rekontrolu ĉiujn viajn salutaĵojn por certigi, ke viaj konto kaj mesaĝoj estas sekuraj
- Rekontrolu, kie vi salutis
- Montri la aparaton per kiu vi povas kontroli nun
- Montri %d aparatojn per kiuj vi povas kontroli nun
@@ -2200,4 +2198,4 @@
Aroj
- Iom uzantoj reatentita
\@room
-
\ No newline at end of file
+
diff --git a/libraries/ui-strings/src/main/res/values-es/strings.xml b/libraries/ui-strings/src/main/res/values-es/strings.xml
index c06442b5d0..f14464d957 100644
--- a/libraries/ui-strings/src/main/res/values-es/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-es/strings.xml
@@ -1592,8 +1592,6 @@
No se pudo acceder al almacenamiento seguro
Sin cifrar
Cifrado por un dispositivo no verificado
- Revise dónde inició sesión
- Verifique todas sus sesiones para asegurarse de que su cuenta y sus mensajes estén seguros
Verifique el nuevo inicio de sesión accediendo a su cuenta: %1$s
Verificar manualmente por texto
Verificación interactiva por emoji
@@ -2386,7 +2384,6 @@
Finalizar encuesta
Esto evitará que las personas puedan votar y mostrará los resultados finales de la encuesta.
¿Finalizar encuesta\?
- opción ganadora
Finalizar encuesta
- Resultado final basado en %1$d voto
@@ -2688,4 +2685,4 @@
Mostrar chats recientes en el menú de compartir sistema
No enviar nunca mensajes cifrados a sesiones sin verificar en esta sala.
Restan %1$s
-
\ No newline at end of file
+
diff --git a/libraries/ui-strings/src/main/res/values-et/strings.xml b/libraries/ui-strings/src/main/res/values-et/strings.xml
index 1e8e2b989e..f33ade2a7e 100644
--- a/libraries/ui-strings/src/main/res/values-et/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-et/strings.xml
@@ -1304,8 +1304,6 @@
Turvahoidla kasutamine ei õnnestu
Krüptimata
Krüptitud verifitseerimata seadme poolt
- Vaata üle, kust sa oled Matrix\'i võrku loginud
- Selleks et sinu konto ja sõnumid oleks turvatud, verifitseeri kõik oma sessioonid
Verifitseeri uus kasutajasessioon, mis pruugib sinu kontot: %1$s
Verifitseeri käsitsi etteantud teksti abil
Verifitseeri sisselogimissessioon
@@ -2318,7 +2316,6 @@
Laadi fail üles
Saada pilte ja videosid
Ava kaamera
- populaarsem valik
Kui sõnumite dekrüptimisel tekib viga, siis rakendus saadab selle kohta automaatse teate arendajatele
Automaatselt teata dekrüptimise vigadest.
Asenda kuvatava nime värvid
@@ -2706,9 +2703,6 @@
\n
\nSee tähendab, et nad võivad uskuda, et tegemist on tõesti sinuga. Samal ajal näevad ka siin sisestatud sessiooninime.
Sessioonide nimede muutmine
- Verifitseeritud sessioonid on sellised, kuhu sa oled oma kasutajanime ja salasõnaga sisse loginud ning mille puhul oled risttunnustamise läbi teinud või paroolifraasi abil ta turvaliseks märkinud.
-\n
-\nSee tähendab, et nendes sessioonides on olemas sinu varasemate sõnumite krüptovõtmed ja teistele osapooltele on nad tuvastatavad nii, et tegemist on tõesti sinuga.
Verifitseeritud sessioonid
Verifitseerimata sessioonid on sellised, kuhu sa oled oma kasutajanime ja salasõnaga sisse loginud, kuid mille puhul on risttunnustamine tegemata.
\n
@@ -2805,7 +2799,7 @@
Teine seade on juba võrku loginud.
Turvalise sõnumivahetuse ülesseadmisel tekkis turvaviga. Üks kolmest võib olla sattunud vale osapoole kontrolli alla: sinu koduserver, sinu internetiühendus või sinu seade;
Päring ei õnnestunud.
- Andmed on puhverdamisel…
+ Andmed on puhverdamisel…
Alusta või jätka ringhäälingukõne esitamist
Lõpeta ringhäälingukõne salvestamine
Peata ringhäälingukõne salvestamine
@@ -2890,4 +2884,30 @@
Lülita täpploend sisse/välja
Pääsuluba
Sinu pääsuluba annab täismahulise ligipääsu sinu kasutajakontole. Palun ära jaga seda teistega.
+ Lõppenud küsitlus
+ Küsitlus on lõppenud.
+ lõpetas küsitluse.
+ Küsitlus
+ Sinu koduserver veel ei toeta jutulõngade loendit.
+ Alustasime ringhäälingukõnega
+ Selle ringhäälingukõne esitamine ei õnnestu.
+ Krüptimisvigade tõttu jääb osa hääli lugemata
+
+ - Möödunud päevas polnud ühtegi toimumas olnud küsitlust.
+\nVarasemate päevade vaatamiseks laadi veel küsitlusi.
+ - Möödunud %1$d päeva jooksul polnud ühtegi toimumas olnud küsitlust.
+\nVarasemate päevade vaatamiseks laadi veel küsitlusi.
+
+
+ - Möödunud päevas polnud ühtegi küsitlust.
+\nVarasemate päevade vaatamiseks laadi veel küsitlusi.
+ - Möödunud %1$d päeva jooksul polnud ühtegi küsitlust.
+\nVarasemate päevade vaatamiseks laadi veel küsitlusi.
+
+ Küsitluste kuvamise ootel
+ Laadi veel küsitlusi
+ Viga küsitluste laadimisel.
+ Häälsõnumi esitamine ei õnnestu
+ Kuna sa hetkel salvestad ringhäälingukõnet, siis häälsõnumi salvestamine või esitamine ei õnnestu. Selleks palun lõpeta ringhäälingukõne
+ Viga võrguühenduses - salvestamine on peatatud
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-eu/strings.xml b/libraries/ui-strings/src/main/res/values-eu/strings.xml
index f1f834ee04..b045cc8c70 100644
--- a/libraries/ui-strings/src/main/res/values-eu/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-eu/strings.xml
@@ -1785,8 +1785,6 @@ Errore hau ${app_name}-en kontroletik kanpo dago. Ez dago Google konturik gailua
Zifratu gabe
Egiaztatu gabeko gailu batek zifratua
- Berrikusi non hasi duzun saioa
- Egiaztatu zure saio guztiak kontua eta mezuak seguru daudela bermatzeko
Egiaztatu zure kontuan hasitako saio berria: %1$s
Egiaztatu eskuz testu bidez
diff --git a/libraries/ui-strings/src/main/res/values-fa/strings.xml b/libraries/ui-strings/src/main/res/values-fa/strings.xml
index 4db3812237..d498f4a51b 100644
--- a/libraries/ui-strings/src/main/res/values-fa/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-fa/strings.xml
@@ -1106,8 +1106,6 @@
یا دیگر کارههای ماتریکس دادای قابلیت ورود چندگانه
تأیید دستی با متن
تأیید ورود جدیدی که به حسابتان دسترسی دارد: %1$s
- تأیید همهٔ نشستهایتان برای اطمینان از این که حساب و پیامهایتان امنند
- بازبینی جاهایی که وارد شدهاید
تأیید برهمکنشی با اموجی
تأیید ورود
رمزنشده
@@ -2275,7 +2273,6 @@
پایان نظرسنجی
این کار اجازهٔ رأی دادن افراد را پایان داده و نتیجهٔ نهایی نظرسنجی را نمایش خواهد داد.
پایان این نظرسنجی؟
- گزینهٔ غالب
پایان نظرسنجی
- نتیجهٔ نهایی بر مبنای %1$d رأی
@@ -2783,7 +2780,7 @@
نظرسنجیها
پیوستها
برچسبها
- میانگیری…
+ میانگیری…
زنده
تأیید
۳
@@ -2859,9 +2856,6 @@
نشستهای تأیید شده آنهاییند که پس از ورود عبارت عبورتان یا تأیید هویتتان با نشست تأیید شدهای دیگر، واردشان شدهاید.
\n
\nیعنی تمامی کلیدهای لارم برای رمزگشایی پیامهای رمزنگاشتهتان را داشته و این تأیید را به دیگران میدهند که به این نشست اطمینان دارید.
- نشستهای تأیید شده به حسابتان وارد و با عبارت عبور امنتان یا تأیید متقابل تأیید شدهاند.
-\n
-\nیعنی کلیدهای رمزنگاری پیامهای پیشینتان را داشته و به دیگر کاربران این تأیید را میدهند که این نشست، خودتان هستید.
نشستهای تأیید نشده نشستهاییند که به آنها وارد شدهاید، ولی تأیید متقبالشان نکردهاید.
\n
\nباید به طور خاص مطمئن شوید که این نشستها را میشناسید؛ چرا که میتوانند نشاندهندهٔ استفادهٔ تأییدنشده از حسابتان باشند.
@@ -2899,4 +2893,30 @@
هیچ نظرسنجی فعّالی در این اتاق وجود ندارد
نظرسنجیهای فعّال
تاریخچهٔ نظرسنجیها
+ نظرسنجی پایان یافته
+ نظرسنجی
+ به نظرسنجیای پایان داد.
+ به نظرسنجی پایان داد.
+ کارساز خانگیتان هنوز از سیاهه کردن رشتهها پشتیبانی نمیکند.
+ ناتوان در پخش این صدا.
+ پخش صوتی را آغاز کرد
+ به خاطر خطاهای رمزگشایی، ممکن است برخی رأیها شمرده نشوند
+ خطا در واکشی نظرسنجیها.
+ بار کردن نظرسنجیهای بیشتر
+ نشان دادن نظرسنجیها
+
+ - نظرسنجی گذشتهای برای روز گذشته وجود ندارد.
+\nبرای دیدن نظرسنجیهای روزهای پیش، نظرسنجیهای بیشتری بار کنید.
+ - نظرسنجی گذشتهای برای %1$d روز گذشته وجود ندارد.
+\nبرای دیدن نظرسنجیهای روزهای پیش، نظرسنجیهای بیشتری بار کنید.
+
+
+ - نظرسنجی فعّالی برای روز گذشته وجود ندارد.
+\nبرای دیدن نظرسنجیهای روزهای پیش، نظرسنجیهای بیشتری بار کنید.
+ - نظرسنجی فعّالی برای %1$d روز گذشته وجود ندارد.
+\nبرای دیدن نظرسنجیهای روزهای پیش، نظرسنجیهای بیشتری بار کنید.
+
+ از آنجا که در حال ضبط پخشی زندهاید، نمیتوانید پیامی صوتی را آغاز کنید. لطفاً برای آغاز ضبط یک پیام صوتی، پخش زندهتان را پایان دهید
+ نمیتوان پخش صوتی را آغاز کرد
+ خطای اتّصال - ضبط مکث شد
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-fi/strings.xml b/libraries/ui-strings/src/main/res/values-fi/strings.xml
index 4976f49a92..c1cc5da2c8 100644
--- a/libraries/ui-strings/src/main/res/values-fi/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-fi/strings.xml
@@ -1717,8 +1717,6 @@
Valitse käyttäjänimi.
Vahvista vuorovaikutteisesti emojilla
Vahvista kirjautuminen
- Vahvista kaikki istuntosi varmistaaksesi, että tilisi ja viestisi ovat turvassa
- Katselmoi missä olet sisäänkirjautuneena
Salattu vahvistamattomalla laitteella
Salaamaton
Käytä palautusavainta
@@ -2309,4 +2307,4 @@
- %1$d valittu
- %1$d valittu
-
\ No newline at end of file
+
diff --git a/libraries/ui-strings/src/main/res/values-fr-rCA/strings.xml b/libraries/ui-strings/src/main/res/values-fr-rCA/strings.xml
index 94db2935a7..cd39fa3381 100644
--- a/libraries/ui-strings/src/main/res/values-fr-rCA/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-fr-rCA/strings.xml
@@ -640,8 +640,6 @@
Vérifier la connexion
Vérifier manuellement avec un texte
Vérifiez la nouvelle connexion accédant à votre compte : %1$s
- Vérifiez toutes les sessions pour vous assurer que votre compte et vos messages sont en sécurité
- Vérifiez où vous vous êtes connecté
Chiffré par un appareil non vérifié
Non chiffré
envoie de la neige ❄️
diff --git a/libraries/ui-strings/src/main/res/values-fr/strings.xml b/libraries/ui-strings/src/main/res/values-fr/strings.xml
index cb1684f834..d62d208e43 100644
--- a/libraries/ui-strings/src/main/res/values-fr/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-fr/strings.xml
@@ -1413,8 +1413,6 @@
Nous n’avons pas pu créer votre conversation privée. Vérifiez les utilisateurs que vous souhaitez inviter et réessayez.
Non chiffré
Chiffré par un appareil non vérifié
- Vérifiez où vous vous êtes connecté
- Vérifiez toutes les sessions pour vous assurer que votre compte et vos messages sont en sécurité
Vérifiez la nouvelle connexion accédant à votre compte : %1$s
%1$s : %2$s
%1$s : %2$s %3$s
@@ -2272,7 +2270,6 @@
Terminer le sondage
Cela empêchera les gens de voter et affichera le résultat final du sondage.
Terminer ce sondage \?
- option gagnante
Terminer le sondage
- Résultat final sur la base de %1$d vote
@@ -2713,9 +2710,6 @@
\n
\nCela leur fournit une preuve de confiance que c’est bien avec vous qu\'ils communiquent, mais cela veut également dire qu’ils peuvent voir le nom de la session que vous saisissez ici.
Renommer les sessions
- Les sessions vérifiées sont celles qui sont identifiées avec votre mot de passe puis vérifiée, soit à l’aide de votre phrase de sécurité, ou bien par la vérification croisée.
-\n
-\nCela signifie qu’elles possèdent les clés de chiffrement de vos messages passés, et certifient aux autres utilisateurs avec qui vous communiquez que ces sessions viennent vraiment de vous.
Sessions vérifiées
Les sessions non vérifiées sont celles qui sont identifiées avec votre mot de passe sans avoir fait de vérification croisée.
\n
@@ -2814,7 +2808,7 @@
Vous pouvez utiliser cet appareil pour connecter un appareil mobile ou un client web avec un QR code. Il y a deux façons de le faire :
Se connecter avec un QR code
Scanner le QR code
- Mise en mémoire tampon…
+ Mise en mémoire tampon…
Mettre en pause la diffusion audio
Lire ou continuer la diffusion audio
Arrêter l’enregistrement de la diffusion audio
@@ -2899,4 +2893,30 @@
Il n’y a aucun sondage en cours dans ce salon
Sondages actifs
Historique des sondages
+ Sondage terminé
+ Sondage
+ a terminé un sondage.
+ A terminé le sondage.
+ Votre serveur d’accueil ne prend pas encore en charge l’affichage de la liste des fils de discussion.
+ Impossible de lire cette diffusion audio.
+ A démarré une diffusion audio
+ À cause d’erreurs de déchiffrement, certains votes pourraient ne pas avoir été pris en compte
+ Erreur lors de la récupération des sondages.
+ Charger plus de sondages
+ Affichage des sondages
+
+ - Il n’y a aucun sondage terminé depuis hier.
+\nChargez plus de sondages pour voir les sondages des jours précédents.
+ - Il n’y a aucun sondage terminé depuis %1$d jours.
+\nChargez plus de sondages pour voir les sondages des jours précédents.
+
+
+ - Il n’y a aucun sondage actif depuis hier.
+\nChargez plus de sondages pour voir les sondages des jours précédents.
+ - Il n’y a aucun sondage actif depuis %1$d jours.
+\nChargez plus de sondages pour voir les sondages des jours précédents.
+
+ Vous ne pouvez pas commencer un message vocal car vous êtes en train d’enregistrer une diffusion en direct. Veuillez terminer cette diffusion pour commencer un message vocal
+ Impossible de démarrer un message vocal
+ Erreur de connexion – Enregistrement en pause
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-hu/strings.xml b/libraries/ui-strings/src/main/res/values-hu/strings.xml
index 9fdad2dbf0..c265b79969 100644
--- a/libraries/ui-strings/src/main/res/values-hu/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-hu/strings.xml
@@ -1361,8 +1361,6 @@ A Visszaállítási Kulcsot tartsd biztonságos helyen, mint pl. egy jelszókeze
A biztonsági tárolóhoz nem sikerült hozzáférni
Titkosítatlan
Ellenőrizetlen eszközzel titkosította
- Tekintsd át hol vagy bejelentkezve
- Ellenőrizd minden munkamenetedet, hogy a fiókod és az üzeneteid biztonságban legyenek
Ellenőrizd ezt az új bejelentkezést ami hozzáfér a fiókodhoz: %1$s
Manuális szöveges ellenőrzés
Belépés ellenőrzése
@@ -2308,7 +2306,6 @@ A Visszaállítási Kulcsot tartsd biztonságos helyen, mint pl. egy jelszókeze
\n
\nElolvashatod a feltételeinket %s.
Segíts az ${app_name}-et jobbá tenni
- nyerő válasz
Jogi dolgok
A változások életbelépéséhez indítsd újra az alkalmazást.
LaTeX matematikai szintaxis engedélyezése
@@ -2712,9 +2709,6 @@ A Visszaállítási Kulcsot tartsd biztonságos helyen, mint pl. egy jelszókeze
Más felhasználók akikkel közvetlenül vagy szobában beszélgetsz látják a teljes listát a munkameneteidről.
\n
\nEzzel ők biztosak lehetnek abban, hogy ténylegesen veled beszélgetnek. Ez azt is jelenti, hogy látják a munkamenet nevét amit itt megadsz.
- Ellenőrzött munkamenetbe a neveddel és jelszavaddal léptek be és ellenőrizve lett vagy a biztonsági jelmondattal vagy másik munkamenetből.
-\n
-\nEz azt jelenti, hogy tartalmazzák a titkosítási kulcsokat az régi üzenetekhez, és biztosítja a többieket a kommunikációban, hogy ezt a munkamenetet tényleg te használod.
Aláhúzott
Áthúzott
Dőlt
@@ -2814,7 +2808,7 @@ A Visszaállítási Kulcsot tartsd biztonságos helyen, mint pl. egy jelszókeze
A kérés sikertelen.
Hang közvetítés felvételéhez és a szoba idővonalára küldéséhez.
Hang közvetítés engedélyezése
- Pufferelés…
+ Pufferelés…
Hang közvetítés szüneteltetése
Hang közvetítés lejátszása vagy lejátszás folytatása
Hang közvetítés felvétel leállítása
@@ -2899,4 +2893,30 @@ A Visszaállítási Kulcsot tartsd biztonságos helyen, mint pl. egy jelszókeze
Nincsenek aktív szavazások ebben a szobában
Aktív szavazások
Szavazás alakulása
+ Lezárt szavazások
+ Szavazás
+ befejezte a szavazást.
+ Szavazás vége.
+ A matrix szerver nem támogatja az üzenetszálak listázását.
+ A hang közvetítés nem játszható le.
+ Hang közvetítés indítva
+ Visszafejtési hibák miatt néhány szavazat nem kerül beszámításra
+ Szavazás betöltési hiba.
+ Még több szavazás betöltése
+ Szavazások megjelenítése
+
+ - Egy napja nincs aktív szavazás.
+\nTovábbi szavazások betöltése a régi szavazások megjelenítéséhez.
+ - %1$d napja nincs aktív szavazás.
+\nTovábbi szavazások betöltése a régi szavazások megjelenítéséhez.
+
+
+ - Egy napja nincs aktív szavazás.
+\nTovábbi szavazások betöltése a régi szavazások megjelenítéséhez.
+ - %1$d napja nincs aktív szavazás.
+\nTovábbi szavazások betöltése a régi szavazások megjelenítéséhez.
+
+ Nem lehet hang üzenetet indítani élő közvetítés felvétele közben. Az élő közvetítés bejezése szükséges a hang üzenet indításához
+ Hang üzenetet nem lehet elindítani
+ Kapcsolódási hiba – Felvétel szüneteltetve
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-hy/strings.xml b/libraries/ui-strings/src/main/res/values-hy/strings.xml
new file mode 100644
index 0000000000..a444d625fb
--- /dev/null
+++ b/libraries/ui-strings/src/main/res/values-hy/strings.xml
@@ -0,0 +1,106 @@
+
+
+ Դուք մերժել եք հրավերը։ Պատճառ` %1$s
+ %1$sը մերժել է հրավերը։ Պատճառը` %2$s
+ Դուք լքել եք։ Պատճառը` %1$s
+ %1$sը լքել է սենյակը։ Պատճառը` %2$s
+ %1$sը միացել է։ Պատճառը` %2$s
+ %1$sը լքել է։ Պատճառը` %2$s
+ Դուք լքել եք սենյակը։ Պատճառը` %1$s
+ Դուք միացել եք։ Պատճառը` %1$s
+ Դուք միացել եք սենյակին։ Պատճառը` %1$s
+ %1$sը միացել է սենյակին։ Պատճառը` %2$s
+ %1$sը հրավիրել է Ձեզ։ Պատճառը` %2$s
+ Հաղորդագրությունը ուղարկվում է…
+ Ուղարկողի սարքավորումը մեզ չի ուղարկել այս հաղորդագրության բանալիները։
+ %sը ավարտել է զանգը։
+ Դուք պատասխանել եք զանգին։
+ %sը պատասխանել է զանգին։
+ Դուք հրավիրել եք %1$sին։ Պատճառը` %2$s
+ %1$sը հրավիրել է %2$sին։ Պատճառը` %3$s
+ Հաղորդագրությունը ուղարկվել է
+ Դատարկ սենյակ
+
+ - %1$sը, %2$sը, %3$sը և %4$d ուրիշը
+ - %1$sը, %2$sը, %3$sը և %4$d ուրիշները
+
+ %1$sը, %2$sը, %3$sը և %4$sը
+ %1$sը, %2$sը և %3$sը
+ %1$sը և %2$sը
+ Սենյակի Հրավեր
+ Էլ-փոստի հասցե
+ Հեռախոսահամար
+ Դուք այս սենյակին միանալու թույլտվություն չունեք
+ Ուսումնասիրել Սենյակներ
+ Ստեղծել Տարածություն
+ Բոլոր Զրույցները
+ Սկսել Զրույց
+ Ստեղծել Սենյակ
+ Matrix-ի սխալ
+ Հնարավոր չէ ուղարկել հաղորդագրությունը
+ ** Հնարավոր չէ վերծանել %sը **
+ Լռելյայն
+ Մոդերատոր
+ Ադմին
+ Դուք հրավիրել եք %1$sին
+ %1$s հրավիրել է %2$sին
+ Դուք սենյակին միանալու հրավեր եք ուղարկել %1$sին
+ %1$sը սենյակին միանալու հրավեր է ուղարկել%2$sին
+ Դուք հեռացրել եք սենյակի անունը
+ %1$sը հեռացրել է սենյակի անունը
+ Փոփոխություն չկա։
+ ցանկացածը։
+ սենյակի բոլոր անդամները։
+ սենյակի բոլոր անդամները, իրենց միանալու պահից սկսած։
+ սենյակի բոլոր անդամները, իրենց հրավիրման պահից սկսած։
+ Դուք ապագա հաղորդագրությունները տեսանելի եք դարձրել %1$sին
+ %1$sը ապագա հաղորդագրությունները տեսանելի է դարձրել %2$sին
+ Դուք սենյակի ապագա պատմությունը տեսանելի եք դարձրել %1$sին
+ %1$sը սենյակի ապագա պատմությունը տեսանելի է դարձրել %2$sին
+ Դուք ավարտել եք զանգը։
+ Դուք սենյակի անունը փոխել եք %1$s
+ %1$sը սենյակի անունը փոխել է %2$s
+ %1$s ստեղծել է այս քննարկումը
+ Դուք ստեղծել եք այս սենյակը
+ %1$s ստեղծել է այս սենյակը
+
+ - %1$d ընտրված է
+ - %1$d ընտրված են
+
+ Ձեր հրավերը
+ %sի հրավերը
+ Դուք հեռացրել եք %1$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ը սենյակի գլխավոր հասցեն դրել է %2$sը։
+
+ - Դուք ավելացրել եք %1$sին որպես սենյակի հասցե
+ - Դուք ավելացրել եք %1$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
+ Դուք հեռացրել եք %1$sին։ Պատճառը` %2$s
+ %1$sը հեռացրել է %2$sին։ Պատճառը` %3$s
+
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-in/strings.xml b/libraries/ui-strings/src/main/res/values-in/strings.xml
index 8896037037..8a05481fd5 100644
--- a/libraries/ui-strings/src/main/res/values-in/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-in/strings.xml
@@ -1957,8 +1957,6 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.
Verifikasi secara Manual oleh Teks
Verifikasi login
Verifikasi login baru yang mengakses akun Anda: %1$s
- Verifikasi semua sesi Anda untuk memastikan akun & pesan Anda aman
- Lihat mana Anda masuk
Dienkripsi oleh perangkat yang tidak diverifikasi
Tidak Dienkripsi
mengirim salju ❄️
@@ -2233,7 +2231,6 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.
Akhiri poll
Ini akan menghentikan orang-orang untuk dapat memberikan suara dan akan menampilkan hasil akhir poll.
Akhiri poll ini\?
- opsi pemenang
Akhiri poll
- Hasil akhir berdasarkan oleh %1$d suara
@@ -2661,9 +2658,6 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.
\n
\nIni memberikan mereka kepastian bahwa mereka berbicara dengan Anda, tetapi ini juga berarti bahwa mereka dapat melihat nama sesi yang Anda masukkan di sini.
Mengubah nama sesi
- Sesi yang terverifikasi telah masuk dengan kredensial Anda dan juga telah diverifikasi, menggunakan frasa sandi atau memverifikasi secara silang.
-\n
-\nIni berarti mereka memegang kunci enkripsi ke pesan Anda sebelumnya, dan mengonfirmasi pengguna lain yang Anda berkomunikasi bahwa sesi ini memang Anda.
Sesi tidak aktif
Sesi belum diverifikasi
Sesi terverifikasi
@@ -2762,7 +2756,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.
Permintaan gagal.
Memungkinkan untuk merekam dan mengirim siaran suara dalam lini masa ruangan.
Aktifkan siaran suara
- Memuat…
+ Memuat…
Jeda siaran suara
Mainkan atau lanjutkan siaran suara
Hentikan rekaman siaran suara
@@ -2845,4 +2839,26 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.
Tidak ada pemungutan suara yang aktif di ruangan ini
Pemungutan suara aktif
Riwayat pemungutan suara
+ Pemungutan suara diakhiri
+ Pemungutan suara
+ mengakhiri pemungutan suara.
+ Mengakhiri pemungutan suara.
+ Homeserver Anda belum mendukung pendaftaran utasan.
+ Tidak dapat memutar siaran suara ini.
+ Memulai sebuah siaran suara
+ Karena kesalahan enkripsi, beberapa suara mungkin tidak terhitung
+ Terjadi kesalahan mendapatkan pemungutan suara.
+ Muat lebih banyak pemungutan suara
+ Menampilkan pemungutan suara
+
+ - Tidak ada pemungutan suara yang lalu %1$d hari terakhir.
+\nMuat lebih banyak pemungutan suara untuk melihat pemungutan suara untuk hari sebelumnya.
+
+
+ - Tidak ada pemungutan suara aktif %1$d hari terakhir.
+\nMuat lebih banyak pemungutan suara untuk melihat pemungutan suara untuk hari sebelumnya.
+
+ Kesalahan koneksi - Perekaman dijeda
+ Anda tidak dapat memulai sebuah pesan suara karena Anda saat ini merekam sebuah siaran langsung. Silakan mengakhiri siaran langsung Anda untuk memulai merekam sebuah pesan suara
+ Tidak dapat memulai pesan suara
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-is/strings.xml b/libraries/ui-strings/src/main/res/values-is/strings.xml
index ceb4d614de..ba505bc0a3 100644
--- a/libraries/ui-strings/src/main/res/values-is/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-is/strings.xml
@@ -851,7 +851,6 @@
- %1$d atkvæði greidd. Greiddu atkvæði til að sjá útkomuna
Næ ekki að tengjast heimaþjóni á þessari slóð, athugaðu slóðina
- réttur valkostur
Spurning eða viðfangsefni
Endurræstu forritið til að breytingin taki gildi.
Virkja LaTeX-stærðfræði
@@ -1672,10 +1671,10 @@
Settu inn tillögu
Fáðu aðstoð við að nota ${app_name}
Lagaleg atriði
- session_name:
- app_display_name:
- push_key:
- app_id:
+ Birtingarnafn setu:
+ Birtingarnafn forrits:
+ Push-lykill:
+ Auðkenni forrits:
Þú ert nú þegar að skoða þennan spjallþráð!
Þú ert nú þegar að skoða þessa spjallrás!
Útgáfa Matrix SDK
@@ -1775,7 +1774,6 @@
Þú ert núna ekki að nota neinn auðkennisþjón. Til að uppgötva og vera finnanleg/ur fyrir félaga þína í teyminu, skaltu bæta við auðkennisþjóni hér fyrir neðan.
${app_name} krefst þess að þú setjir inn auðkennin þín til að framkvæma þessa aðgerð.
Endurauðkenning er nauðsynleg
- Yfirfarðu hvar þú sért skráð/ur inn
Nota endurheimtulykil
Athuga öryggisafritunarlykil
Þetta er ekki gildur endurheimtulykill
@@ -2263,4 +2261,125 @@
Endilega lestu í gegnum stefnur og skilmála fyrir %s
Stefnur netþjónsins
Element Matrix Services (EMS) er afkastamikil og áreiðanleg hýsingarþjónusta fyrir hraðvirk og örugg samskipti í rauntíma. Skoðaðu hvernig við förum að því á element.io/ems
-
\ No newline at end of file
+
+ - %1$d valið
+ - %1$d valið
+
+ Aðgangsteiknið þitt gefur fullan aðgang að notandaaðgangnum þínum. Ekki deila því með neinum.
+ Aðgangsteikn
+ Lauk könnun
+ Könnun
+ lauk könnun.
+ bjó til könnun.
+ sendi límmerki.
+ sendi myndskeið.
+ sendi mynd.
+ sendi talskilaboð.
+ sendi hljóðskrá.
+ sendi skrá.
+ Sem svar til
+ Breyta tengli
+ Búa til tengil
+ Tengill
+ Texti
+ Staðfesta
+ Reyna aftur
+ Engin samsvörun\?
+ Skrái þig inn
+ Tengist við tæki
+ Skanna QR-kóða
+ Ertu að skrá inn farsíma/snjalltæki\?
+ Veldu \'Skanna QR-kóða\'
+ Veldu \'Skrá inn með QR-kóða\'
+ Veldu \'Birta QR-kóða\'
+ Þessi QR-kóði er ógildur.
+ Beiðnin mistókst.
+ Skrá inn með QR-kóða
+ Skanna QR-kóða
+ 3
+ 2
+ 1
+ Aðgangur að svæðum
+ Sannreyndar setur
+ Óstaðfestar setur
+ Óvirkar setur
+ Skrá inn með QR-kóða
+ Nafn á setu
+ Endurnefna setu
+ Stýrikerfi
+ Gerð
+ Vafri
+ Slóð (URL)
+ Útgáfa
+ Heiti
+ Forrit
+ Taka á móti ýti-tilkynningum á þessu tæki.
+ Ýti-tilkynningar
+ Upplýsingar um forrit, tæki og aðgerðir.
+ Skrá út úr þessari setu
+ Fela IP-vistfang
+ Birta IP-vistfang
+ Skrá út úr öllum öðrum setum
+ Skrá út
+ Óvirkar setur
+ Ráðleggingar varðandi öryggi
+ Deiling staðsetningar í rauntíma
+ Sníðing texta
+ Tengiliður
+ Myndavél
+ Staðsetning
+ Kannanir
+ Útvörpun tals
+ Viðhengi
+ Límmerki
+ Myndasafn
+ Byrjaðu talútsendingu
+ Staðsetning í rauntíma
+ Þú hefur ekki heimildir til að deila rauntímastaðsetningum
+ Uppfært fyrir %1$s síðan
+ Virkja deilingu rauntímastaðsetninga
+ Í beinni til %1$s
+ Staðsetningu í rauntíma lauk
+ Tókst ekki að hlaða inn landakorti
+\nÞessi heimaþjónn er mögulega ekki stilltur til að birta landakort.
+ Villa við að sækja kannanir.
+ Hlaða inn fleiri könnunum
+ Birting kannana
+ Fyrri kannanir
+ Virkar kannanir
+ Lauk könnuninni.
+ %1$s eftir
+ Fara áfram um 30 sekúndur
+ Fara afturábak um 30 sekúndur
+ Hleð í biðminni…
+ Bein útsending
+ Beint
+ Birta upplýsingar um síðasta notanda
+ Yfirfarðu þetta til að tryggja að aðgangurinn þinn sé öruggur
+ Þú ert með óstaðfestar setur
+ Breytingaskrá könnunar
+ Skilaboð hér eru enda-í-enda dulrituð.
+\n
+\nÖryggi skilaboðanna þinna er tryggt og einungis þú og viðtakendurnir hafa dulritunarlyklana til að opna skilaboðin.
+ Skilaboð á þessari spjallrás eru enda-í-enda dulrituð.
+\n
+\nÖryggi skilaboðanna þinna er tryggt og einungis þú og viðtakendurnir hafa dulritunarlyklana til að opna skilaboðin.
+ Hóf talútsendingu
+ Sumir stafir eru óleyfilegir
+ Setur (╯°□°)╯︵ ┻━┻ framan við hrein textaskilaboð
+ Skanna QR-kóða
+ Ekki er enn búið að útbúa notandaaðganginn þinn. Á að hætta skráningarferlinu\?
+ Útvörpun tals
+ Virkt:
+ Auðkenni setu:
+ Tilvitnanir
+ Svara til %s
+ Breytingar
+ Það lítur út fyrir að þú sért að reyna að tengjast öðrum heimaþjóni. Viltu skrá þig út\?
+ Já, stöðva
+ Afvelja allt
+ Velja allt
+ Náði því
+ Þú endaðir talútsendingu.
+ %1$s endaði talútsendingu.
+
diff --git a/libraries/ui-strings/src/main/res/values-it/strings.xml b/libraries/ui-strings/src/main/res/values-it/strings.xml
index 729b826982..d8c81974b2 100644
--- a/libraries/ui-strings/src/main/res/values-it/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-it/strings.xml
@@ -1418,8 +1418,6 @@
Accesso all\'archivio sicuro fallito
Non criptato
Criptato da un dispositivo non verificato
- Controlla dove hai fatto l\'accesso
- Verifica tutte le tue sessioni per assicurarti che il tuo account e i messaggi siano protetti
Verifica il nuovo accesso entrando nel tuo account: %1$s
Verifica manualmente con testo
Verifica accesso
@@ -2263,7 +2261,6 @@
Termina sondaggio
Ciò impedirà alle persone di poter votare e mostrerà i risultati finali del sondaggio.
Terminare questo sondaggio\?
- opzione vincente
Termina sondaggio
- Risultato finale basato su %1$d voto
@@ -2704,9 +2701,6 @@
\n
\nIn questo modo hanno la certezza che stanno parlando davvero con te, ma significa anche che possono vedere il nome della sessione che inserisci qui.
Rinominare le sessioni
- Le sessioni verificate hanno effettuato l\'accesso con le tue credenziali e sono state verificate, usando la frase di sicurezza o la verifica incrociata.
-\n
-\nCiò significa che hanno le tue chiavi di crittografia per i messaggi passati, e confermano agli altri utenti con cui comunichi che queste sessioni sono usate da te.
Sessioni verificate
Le sessioni non verificate sono quelle in cui è stato fatto l\'accesso con le tue credenziali, ma che non sono state verificate.
\n
@@ -2805,7 +2799,7 @@
L\'altro dispositivo ha già fatto l\'accesso.
Si è verificato un problema di sicurezza configurando i messaggi sicuri. Una delle seguenti cose potrebbe essere compromessa: il tuo homeserver; la/e connessione/i internet; il/i dispositivo/i;
La richiesta è fallita.
- Buffer…
+ Buffer…
Sospendi trasmissione vocale
Avvia o riprendi trasmissione vocale
Ferma registrazione trasmissione vocale
@@ -2890,4 +2884,29 @@
In questa stanza non ci sono sondaggi attivi
Sondaggi attivi
Cronologia sondaggi
-
\ No newline at end of file
+ Sondaggio terminato
+ Sondaggio
+ terminato un sondaggio.
+ Sondaggio terminato.
+ Il tuo homeserver non supporta ancora l\'elenco di conversazioni.
+ A causa di errori di decifrazione, alcuni voti potrebbero non venire contati
+ Impossibile avviare questa trasmissione vocale.
+ Iniziata una trasmissione vocale
+ Errore di recupero dei sondaggi.
+ Carica più sondaggi
+ Visualizzazione sondaggi
+
+ - Non ci sono sondaggi passati nell\'ultimo giorno.
+\nCarica più sondaggi per vedere quelli dei giorni precedenti.
+ - Non ci sono sondaggi passati negli ultimi %1$d giorni.
+\nCarica più sondaggi per vedere quelli dei giorni precedenti.
+
+
+ - Non ci sono sondaggi attivi nell\'ultimo giorno.
+\nCarica più sondaggi per vedere quelli dei giorni precedenti.
+ - Non ci sono sondaggi attivi negli ultimi %1$d giorni.
+\nCarica più sondaggi per vedere quelli dei giorni precedenti.
+
+ Non puoi iniziare un messaggio vocale perché stai registrando una trasmissione in diretta. Termina la trasmissione per potere iniziare un messaggio vocale
+ Impossibile iniziare il messaggio vocale
+
diff --git a/libraries/ui-strings/src/main/res/values-iw/strings.xml b/libraries/ui-strings/src/main/res/values-iw/strings.xml
index b9f81ae446..aabdc7371e 100644
--- a/libraries/ui-strings/src/main/res/values-iw/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-iw/strings.xml
@@ -1672,8 +1672,6 @@
אמת ידנית באמצעות טקסט
אמת את הכניסה החדשה שניגשת לחשבונך: %1$s
- אמת את כל ההפעלות שלך כדי להבטיח שהחשבון וההודעות שלך בטוחים
- בדוק היכן נכנסת
מוצפן על ידי מכשיר לא מאומת
לא מוצפן
שולח שלג ❄️
@@ -2136,7 +2134,6 @@
סוף המשאל
פעולה זו תעצור את האפשרות להצביע ותציג את תוצאות המשאל.
סוף המשאל\?
- אפשרות הזוכה
סוף המשאל
שאלה לא יכולה להיות ריקה
צור משאל
@@ -2506,4 +2503,4 @@
\nזה יהיה מעבר חד פעמי שכן שרשורים הם כעת חלק ממפרט Matrix.
שיתוף מסך של ${app_name}
המסך משותף כרגע
-
\ No newline at end of file
+
diff --git a/libraries/ui-strings/src/main/res/values-ja/strings.xml b/libraries/ui-strings/src/main/res/values-ja/strings.xml
index 11ab6ee857..0b987ce683 100644
--- a/libraries/ui-strings/src/main/res/values-ja/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-ja/strings.xml
@@ -139,8 +139,8 @@
メールアドレスを追加
電話番号を追加
通知音
- このアカウントでは通知を有効にする
- このセッションでは通知を有効にする
+ このアカウントで通知を有効にする
+ このセッションで通知を有効にする
1対1のチャットでのメッセージ
グループチャットでのメッセージ
ルームへ招待されたとき
@@ -198,7 +198,7 @@
メインアドレスとして設定
メインアドレスとしての設定を解除
セッションID
- 文字の大きさ
+ フォントの大きさ
とても小さい
小さい
標準
@@ -526,7 +526,7 @@
暗号化を有効にする
いったん有効にすると、暗号化を無効にすることはできません。
セキュリティー
- 詳しく知る
+ 詳細を表示
その他の設定
管理者としての操作
ルームの設定
@@ -1252,7 +1252,7 @@
Element Matrix Servicesに接続
Matrix IDでサインイン
Matrix IDでサインイン
- 詳しく知る
+ 詳細を表示
その他
カスタムと高度な設定
組織向けのプレミアムホスティング
@@ -1845,8 +1845,8 @@
- %1$d個の投票があります。結果を見るには投票してください
未認証の端末で暗号化
- メッセージを紙吹雪と共に送る
- メッセージを降雪と共に送る
+ メッセージを紙吹雪と共に送信
+ メッセージを降雪と共に送信
紙吹雪🎉を送る
降雪❄️を送る
あなたのチームのメッセージングに。
@@ -1930,7 +1930,6 @@
非公開で招待が必要なルームは表示されていません。
\nルームを追加する権限はありません。
非公開で招待が必要なルームは表示されていません。
- 勝者
知人に見つけてもらえるように電話番号を設定できます。任意です。
メッセージキー
復旧用のパスフレーズ
@@ -2223,8 +2222,6 @@
指紋や顔画像など、端末に固有の生体認証を有効にする。
絵文字で認証
テキストで認証
- すべてのセッションを認証し、アカウントとメッセージが安全であることを確認してください
- ログインしている場所を確認
復旧用の手段を全て無くしてしまいましたか?全てリセットする
クロス署名に対応した他のMatrixのクライアントでも使用できます。
どのような議論を%sで行いたいですか?
@@ -2394,7 +2391,7 @@
招待
プッシュ通知
セッション名
- セッションを改名
+ セッション名を変更
IPアドレス
オペレーティングシステム
形式
@@ -2443,7 +2440,7 @@
レイアウトの設定
了解
次へ
- 詳しく知る
+ 詳細を表示
秒
分
時
@@ -2473,4 +2470,34 @@
QRコードをスキャン
QRコードをスキャン
QRコードが不正です。
+ スペースは、ルームと連絡先をまとめる新しい方法です。はじめに、スペースを作成しましょう。
+ 最近の履歴を表示
+ この暗号化されたメッセージの信頼性はこの端末では保証できません。
+ アカウントが安全かどうか確認してください
+ 未認証のセッションがあります
+ 連絡先
+ お気に入り
+ 未読あり
+ 全て
+ はい、停止
+ 全ての選択を解除
+ 全て選択
+ 音声配信を終了しました。
+ %1$sが音声配信を終了しました。
+
+ - %1$dを選択しました
+
+ 有効にすると、このアプリケーションを使用している際にも、他のユーザーにオフラインとして表示されます。
+ 最近のチャットをシステムの共有メニューに表示
+ システムの既定値を使用
+ 手動で設定
+ 自動的に設定
+ フォントの大きさを選択
+ ⚠ 未認証の端末がこのルームにあります。あなたが送信するメッセージを復号化することはできません。
+ このルームの未認証のセッションに暗号化されたメッセージを送信しない。
+ あなたのホームサーバーはスレッドの一覧表示をまだサポートしていません。
+ ここに新しいリクエストと招待が表示されます。
+ リッチテキストエディターを試してみる(プレーンテキストモードは近日公開)
+ タブを使用してElementの表示をシンプルにする
+ セッションの詳細
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-kab/strings.xml b/libraries/ui-strings/src/main/res/values-kab/strings.xml
index 353fb99f53..c16b5624a8 100644
--- a/libraries/ui-strings/src/main/res/values-kab/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-kab/strings.xml
@@ -463,8 +463,6 @@
Senqed iman-ik•im d wiyaḍ akken ad qqimen yidiwenniyen-ik•im d iɣellsanen
Seqdec tasarut n uɛeddi
Ur yettwawgelhen ara
- Senqed ansi i d-tkecmeḍ
- Senqed akk tiqimiyin-ik·im i wakken ad tḍemneḍ amiḍan-ik·m & yiznan d iɣelsanen
Senqed s ufus s ttawil n uḍris
Azen
Sbadu
diff --git a/libraries/ui-strings/src/main/res/values-lo/strings.xml b/libraries/ui-strings/src/main/res/values-lo/strings.xml
index a92adb0225..715f2894ef 100644
--- a/libraries/ui-strings/src/main/res/values-lo/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-lo/strings.xml
@@ -1634,8 +1634,6 @@
ຢືນຢັນການເຂົ້າສູ່ລະບົບ
ຢືນຢັນຂໍ້ຄວາມດ້ວຍຕົນເອງ
ຢືນຢັນການເຂົ້າສູ່ລະບົບໃໝ່ທີ່ເຂົ້າເຖິງບັນຊີຂອງທ່ານ: %1$s
- ຢັ້ງຢືນທຸກລະບົບຂອງທ່ານເພື່ອໃຫ້ແນ່ໃຈວ່າບັນຊີ ແລະ ຂໍ້ຄວາມຂອງທ່ານປອດໄພ
- ກວດເບິ່ງບ່ອນທີ່ທ່ານເຂົ້າສູ່ລະບົບ
ເຂົ້າລະຫັດໂດຍອຸປະກອນທີ່ບໍ່ໄດ້ຮັບການຢືນຢັນ
ບໍ່ໄດ້ເຂົ້າລະຫັດ
ສົ່ງຫິມະຕົກ ❄️
@@ -2371,7 +2369,6 @@
ສິ້ນສຸດແບບສຳຫຼວດ
ອັນນີ້ຈະຢຸດບໍ່ໃຫ້ຜູ້ຄົນສາມາດລົງຄະແນນສຽງໄດ້ ແລະຈະສະແດງຜົນສຸດທ້າຍຂອງການສຳຫຼວດຄວາມຄິດເຫັນ.
ສິ້ນສຸດແບບສຳຫຼວດນີ້ບໍ\?
- ເລືອກຜູ້ຊະນະ
ສິ້ນສຸດແບບສຳຫຼວດ
- ຜົນສຸດທ້າຍໂດຍອີງໃສ່ %1$d ຄະແນນສຽງ
diff --git a/libraries/ui-strings/src/main/res/values-lt/strings.xml b/libraries/ui-strings/src/main/res/values-lt/strings.xml
index aeba3d53e6..7ad901a9d2 100644
--- a/libraries/ui-strings/src/main/res/values-lt/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-lt/strings.xml
@@ -1324,7 +1324,6 @@
Apklausa baigėsi
Prabalsuota
Baigti apklausą
- laimėtojo parinktis
Rezultatai bus matomi pasibaigus apklausai
Nėra balsų
Iš naujo paleiskite programą, kad pakeitimas įsigaliotų.
@@ -2183,4 +2182,4 @@
Įjungti atidėtas AŽ
Supaprastintas Element su nebūtinais skirtukais
Įjungti naują išdėstymą
-
\ No newline at end of file
+
diff --git a/libraries/ui-strings/src/main/res/values-lv/strings.xml b/libraries/ui-strings/src/main/res/values-lv/strings.xml
index 1787653fae..9201bf146a 100644
--- a/libraries/ui-strings/src/main/res/values-lv/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-lv/strings.xml
@@ -559,8 +559,6 @@ Nākotnē šī pārbaudes procedūra plānota sarežģītāka.
Uzaicināt lietotājus
Apstipriniet savu identitāti, verificējot šo pierakstīšanos no kādas citas savas sesijas, tādējādi ļaujot piekļūt šifrētajām ziņām.
Manuāli verificēt ar tekstu
- Verificējiet visas savas sesijas, lai nodrošinātos, ka jūsu konts un ziņas ir drošībā
- Pārskatiet savas pierakstīšanās
Nešifrēts
vai kādu citu Matrix lietotni ar cross-signing atbalstu
Šis konts ir deaktivizēts.
diff --git a/libraries/ui-strings/src/main/res/values-nb-rNO/strings.xml b/libraries/ui-strings/src/main/res/values-nb-rNO/strings.xml
index 067dbbbc28..13a4400c31 100644
--- a/libraries/ui-strings/src/main/res/values-nb-rNO/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-nb-rNO/strings.xml
@@ -1001,8 +1001,6 @@
Hvis du tilbakestiller alt
Du starter på nytt uten historikk, ingen meldinger, pålitelige enheter eller pålitelige brukere
Kryptert av en ubekreftet enhet
- Gjennomgå hvor du er logget inn
- Bekreft alle øktene dine for å sikre at kontoen og meldingene dine er trygge
Bekreft den nye påloggingen som får tilgang til kontoen din: %1$s
Bekreft pålogging
Bekreft identiteten din ved å bekrefte denne påloggingen fra en av de andre øktene dine, og gi den tilgang til krypterte meldinger.
@@ -1253,4 +1251,4 @@
%1$s endret visningsnavnet sitt til %2$s
%1$s utestengte %2$s
%ss invitasjon
-
\ No newline at end of file
+
diff --git a/libraries/ui-strings/src/main/res/values-nl/strings.xml b/libraries/ui-strings/src/main/res/values-nl/strings.xml
index 5bc5305df4..c6154ddb45 100644
--- a/libraries/ui-strings/src/main/res/values-nl/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-nl/strings.xml
@@ -1858,8 +1858,6 @@
Interactief verifiëren door Emoji
Handmatig verifiëren via tekst
Verifieer de nieuwe login voor toegang tot je account: %1$s
- Verifieer al je sessies om ervoor te zorgen dat je account en berichten veilig zijn
- Bekijk waar je bent ingelogd
Versleuteld door een niet-geverifieerd apparaat
stuurt sneeuwval ❄️
stuurt confetti 🎉
@@ -2186,7 +2184,6 @@
Einde poll
Hierdoor kunnen mensen niet meer stemmen en worden de definitieve resultaten van de poll weergegeven.
Deze poll beëindigen\?
- winnaar optie
Einde poll
- Eindresultaat gebaseerd op %1$d stem
@@ -2746,7 +2743,7 @@
Deze sessie is klaar voor veilige communicatie.
Je huidige sessie is klaar voor veilige communicatie.
Onbekende verificatiestatus
- Bufferen
+ Bufferen
Live
De authenticiteit van dit versleutelde bericht kan niet worden gegarandeerd op dit apparaat.
Incognito toetsenbord
@@ -2787,9 +2784,6 @@
\n
\nDit geeft ze het vertrouwen dat ze echt met jou praten, maar het betekent ook dat ze de sessienaam kunnen zien die je hier invoert.
Sessies hernoemen
- Geverifieerde sessies zijn ingelogd met jouw inloggegevens en vervolgens geverifieerd, hetzij met je veilige wachtwoordzin of door kruisverificatie.
-\n
-\nDit betekent dat ze coderingssleutels bevatten voor je eerdere berichten en bevestigen aan andere gebruikers waarmee je communiceert dat deze sessies echt van jou zijn.
Niet-geverifieerde sessies zijn sessies die zijn aangemeld met jouw inloggegevens, maar niet zijn geverifieerd.
\n
\nJe moet er vooral zeker van zijn dat je deze sessies herkent, omdat ze een ongeoorloofd gebruik van je account kunnen vertegenwoordigen.
@@ -2842,4 +2836,4 @@
Bewerking
Recente gesprekken in het deelmenu van het systeem tonen
Direct delen inschakelen
-
\ No newline at end of file
+
diff --git a/libraries/ui-strings/src/main/res/values-pl/strings.xml b/libraries/ui-strings/src/main/res/values-pl/strings.xml
index 4b26562b06..4419187ba5 100644
--- a/libraries/ui-strings/src/main/res/values-pl/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-pl/strings.xml
@@ -345,7 +345,7 @@
Importuj klucze z lokalnego pliku
Importuj
Szyfruj wiadomości tylko do zaufanych sesji
- Nigdy nie wysyłaj szyfrowanych wiadomości do sesji (np urządzeń innych użytkowników) które nie zostały zweryfikowane.
+ Nigdy nie wysyłaj szyfrowanych wiadomości do niezweryfikowanych sesji (bez zielonej tarczy) z tego urządzenia.
Aby sprawdzić czy ta sesja jest zaufana, skontaktuj się z jej właścicielem używając innych form (np. osobiście lub telefonicznie) i zapytaj czy klucz, który widzą w ustawieniach użytkownika dla tego urządzenia pasuje do klucza poniżej:
Jeśli klucz pasuje, potwierdź to przyciskiem poniżej. Jeśli nie, to ktoś inny najprawdopodobniej przejmuje lub podszywa się pod tą sesję i powinieneś dodać tę sesję do czarnej listy. W przyszłości proces weryfikacji będzie bardziej skomplikowany.
Wyślij naklejkę
@@ -665,7 +665,7 @@
Wycisz
Ustawienia
Nie ignorujesz żadnych użytkowników
- Widziany przez
+ Wyświetlono przez
Zaawansowane ustawienia
Tryb programisty
Ustawienia
@@ -1115,7 +1115,7 @@
\nKlucze nie są zaufane
Podpis krzyżowy nie jest aktywowany
Aktywne Sesje
- Pokaż wszystkie Sesje
+ Pokaż wszystkie sesje
Zarządzaj Sesjami
Wyloguj z tej sesji
Brak dostępnej informacji o kryptografii
@@ -1242,7 +1242,7 @@
Zapisz Klucz Bezpieczeństwa
Użyj Frazy Bezpieczeństwa
Użyj klucza bezpieczeństwa
- Zabezpiecza przeciwko utracie dostępu do zaszyfrowanych wiadomości oraz danych poprzez zapisanie zaszyfrowanych kluczy na Twoim serwerze.
+ Zabezpiecza przed utratą dostępu do zaszyfrowanych wiadomości poprzez zapisanie kluczy szyfrujących na twoim serwerze.
Włącz aparat
Wyłącz aparat
Wyłącz wyciszenie mikrofonu
@@ -1493,7 +1493,7 @@
Integracje są zablokowane
To zastąpi obecny Klucz bądź Hasło.
Wygeneruj nowy klucz bezpieczeństwa albo hasło dla istniejącej kopii zapasowej.
- Zabezpiecza przeciwko utracie dostępu do zaszyfrowanych wiadomości oraz danych poprzez zapisanie zaszyfrowanych kluczy na Twoim serwerze.
+ Zabezpiecza przed utratą dostępu do zaszyfrowanych wiadomości poprzez zapisanie kluczy szyfrujących na twoim serwerze.
Powiadomienie zostało kliknięte!
Proszę kliknąć na powiadomieniu, Jeżeli nie widzisz powiadomienia, sprawdź ustawienia systemowe.
Widzisz powiadomienia! Kliknij na mnie!
@@ -1553,8 +1553,6 @@
Interaktywna weryfikacja z wykorzystaniem emotikon
Zweryfikuj logowanie
Zweryfikuj nowe logowanie do swojego konta: %1$s
- Sprawdź wszystkie swoje sesje żeby upewnić się, że Twoje konto oraz wiadomości są bezpieczne
- Sprawdź gdzie jesteś zalogowany(-na)
Zaszyfrowane przez niezweryfikowane urządzenie
Niezaszyfrowane
@@ -2514,7 +2512,6 @@
Otwarta ankieta
Rodzaj ankiety
Modyfikacja ankiety
- opcja zwyciężająca
Brak głosów
Zaproszenie do tej przestrzeni zostało wysłane do %s, które nie jest powiązane z Twoim kontem
Zaproszenie do tego pokoju zostało wysłane do %s, które nie jest powiązane z Twoim kontem
@@ -2798,4 +2795,36 @@
Rozumiem
Zwiń %s pokojów
Rozwiń %s pokojów
+ Nieaktywne sesje
+ Ta sesja jest gotowa do bezpiecznego przesyłania wiadomości.
+ Twoja bieżąca sesja jest gotowa do bezpiecznego przesyłania wiadomości.
+ Kontakt
+ Lokalizacja
+ Aparat
+ Transmisja głosowa
+ Rozpocznij transmisję głosową
+ Ostatnie ankiety
+ W tym pokoju nie ma aktywnych ankiet
+ Aktywne ankiety
+ Niektóre głosy mogą nie zostać policzone z powodu błędów w odszyfrowaniu
+ Zakończono ankietę.
+ Błąd połączenia - Nagrywanie wstrzymane
+ Nie można odtworzyć tej transmisji głosowej.
+ Jesteś już w trakcie nagrywania transmisji głosowej. Proszę zakończyć bieżącą transmisję, aby rozpocząć nową.
+ Ktoś inny nagrywa już transmisję głosową. Aby rozpocząć nową transmisję, należy poczekać na jej zakończenie.
+ Nie masz wymaganych uprawnień do rozpoczęcia transmisji głosowej w tym pokoju. Skontaktuj się z administratorem pokoju, aby przyznał ci uprawnienia.
+ Nie można rozpocząć nowej transmisji głosowej
+ Buforowanie…
+ Nie można rozpocząć wiadomości głosowej
+ Masz niezweryfikowane sesje
+ Autentyczność tej zaszyfrowanej wiadomości nie może być zagwarantowana na tym urządzeniu.
+ Historia ankiet
+ Dodaje (╯°□°)╯︵ ┻━┻ do wiadomości tekstowej
+ Skanuj kod QR
+ %1$s zakończył(a) transmisję głosową.
+ Zarządaj od systemu Android aby klawiatura nie zapisywała żadnych danych takich jak historia pisania lub słownik. Pamiętaj, nie niektóre klawiatury mogą nie zastosować się do tego ustawienia.
+ Klawiatura incognito
+ Witaj w ${app_name},
+\n%s.
+ Wszechstronna, bezpieczna aplikacja do czatowania dla zespołów, przyjaciół i organizacji. Utwórz czat lub dołącz do istniejącego pokoju, aby rozpocząć.
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-pt-rBR/strings.xml b/libraries/ui-strings/src/main/res/values-pt-rBR/strings.xml
index a5aa778156..f6a2c94553 100644
--- a/libraries/ui-strings/src/main/res/values-pt-rBR/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-pt-rBR/strings.xml
@@ -1526,8 +1526,6 @@
Falha para acessar armazenamento seguro
Não-encripada
Encriptada por um dispositivo não-verificado
- Revisar onde você está com login feito
- Verifique todas as suas sessões para assegurar que sua conta & mensagens estão seguras
Verifique o novo login acessando sua conta: %1$s
Verificar Manualmente por Texto
Verificar login
@@ -2272,7 +2270,6 @@
Terminar sondagem
Isto vai parar pessoas de serem capazes de votar e vai exibir os resultados finais da sondagem.
Terminar esta sondagem\?
- opção vencedora
Terminar sondagem
- Resultado final baseado em %1$d voto
@@ -2713,9 +2710,6 @@
\n
\nIsto as/os provê com confiança que elas(es) são estão realmente falando com você, mas também significa que elas(es) veem o nome da sessão que você entrar aqui.
Renomeando sessões
- Sessões verificadas têm feito login com suas credenciais e então têm sido verificadas, ou usando sua frasepasse segura ou por verificação cruzada.
-\n
-\nIsto significa que elas mantêm chaves de encriptação para suas mensagens anteriores, e confirmam a outras(os) usuárias(os) com quem você está comunicando que estas sessões são realmente você.
Sessões verificadas
Sessões não-verificadas são sessões que você tem feito login com suas credenciais mas não têm sido verificadas cruzado.
\n
@@ -2814,7 +2808,7 @@
A requisição falhou.
Seja capaz de gravar e enviar broadcast de voz em timeline de sala.
Broadcast de voz
- Buffering…
+ Buffering…
Pausar broadcast de voz
Tocar ou retomar broadcast de voz
Parar gravação de broadcast de voz
@@ -2890,4 +2884,4 @@
Tem certeza que você quer parar seu broadcast ao vivo\? Isto vai terminar o broadcast e a gravação completa vai estar disponível na sala.
Parar de fazer broadcasting ao vivo\?
Sim, Parar
-
\ No newline at end of file
+
diff --git a/libraries/ui-strings/src/main/res/values-ru/strings.xml b/libraries/ui-strings/src/main/res/values-ru/strings.xml
index 0d8f1103fe..5938200c1e 100644
--- a/libraries/ui-strings/src/main/res/values-ru/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-ru/strings.xml
@@ -6,7 +6,7 @@
%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
@@ -65,7 +65,7 @@
%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 создал(а) комнату
@@ -1420,7 +1420,7 @@
Посылает сообщение, окрашенное в цвет радуги
Посылает данную эмоцию, окрашенную в цвет радуги
Редактор сообщений
- Включаем сквозное шифрование…
+ Включить сквозное шифрование…
Включить шифрование\?
После включения шифрование для комнаты нельзя отключить. Сообщения отправленные в зашифрованной комнате не будут видны серверу, только участникам комнаты. Включение шифрования может помешать правильной работе многих ботов и мостов.
Включить шифрование
@@ -1577,8 +1577,6 @@
Не удалось получить доступ к защищенному хранилищу данных
Не зашифровано
Зашифровано неподтверждённой сессией
- Посмотрите, где вы вошли
- Подтвердите все свои сессии, чтобы убедиться в безопасности вашей учетной записи и сообщений
Ручная проверка с помощью текста
Перепроверьте эту ссылку
Ссылка %1$s перенаправит вас на другой сайт: %2$s.
@@ -2332,7 +2330,6 @@
Завершить опрос
Это лишит людей возможности голосовать и отобразит окончательные результаты опроса.
Завершить этот опрос\?
- вариант-победитель
Завершить опрос
- Окончательный результат на основании %1$d голоса
@@ -2436,7 +2433,7 @@
Не удалось загрузить карту
Карта
Примечание: приложение будет перезапущено
- Обсуждения сообщений
+ Включить обсуждения сообщений
Подключиться к серверу
Хотите присоединиться к существующему серверу\?
Пропустить вопрос
@@ -2543,7 +2540,7 @@
Домашний сервер не принимает имя пользователя, состоящее только из цифр.
Пропустить этот шаг
Сохранить и продолжить
- Ваши предпочтения были сохранены.
+ Зайдите в настройки чтобы изменить Ваш профиль
Выглядит хорошо!
${app_name} также отлично подходит для работы. Ему доверяют самые надёжные организации в мире.
Резервная копия имеет действительную подпись для данного пользователя.
@@ -2794,7 +2791,7 @@
- Рассмотрите возможность выхода из старых сеансов (%1$d дней или дольше), которые вы более не используете.
Голосовая трансляция
- Голосовые трансляции
+ Включить голосовые трансляции
Записывает название клиента, версию и URL-адрес для более лёгкого распознавания сеансов в менеджере сеансов.
Записывать информацию о клиенте
Галерея
@@ -2827,9 +2824,9 @@
Развернуть дочерние элементы %s
- Выбрано %1$d
- - Выбрано %1$d
- - Выбрано %1$d
- - Выбрано %1$d
+ - Выбраны %1$d
+ - Выбраны %1$d
+ - Выбраны %1$d
Войти в полноэкранный режим
Применить форматирование подчёркиванием
@@ -2882,9 +2879,6 @@
Заверенные сеансы есть везде, где вы используете эту учётную запись после ввода своей мнемонической фразы или подтверждения своей личности с помощью другого заверенного сеанса.
\n
\nЭто означает, что у вас есть все ключи, необходимые для разблокировки ваших зашифрованных сообщений и подтверждения другим пользователям, что вы доверяете этому сеансу.
- Заверенные сеансы — сеансы, которые вошли в систему с вашими учётными данными, а затем были заверены либо мнемонической фразой (бумажным ключом), либо путём перекрёстной сверки.
-\n
-\nЭто означает, что они хранят ключи шифрования от ваших предыдущих сообщений и подтверждают другим пользователям, с которыми вы общаетесь, что эти сеансы — действительно ваши.
Незаверенные сеансы — это сеансы, которые вошли в систему с вашими учётными данными, но не были перекрёстно заверены.
\n
\nВы должны быть особенно уверены, что признаёте эти сеансы, поскольку они могут представлять собой несанкционированное использование вашей учётной записи.
@@ -2921,7 +2915,7 @@
Не получилось начать новую голосовую трансляцию
Перемотать вперёд на 30 секунд
Перемотать назад на 30 секунд
- Буферизация…
+ Буферизация…
Приостановить голосовую трансляцию
Проиграть или продолжить голосовую трансляцию
Остановить запись голосовой трансляции
@@ -2976,4 +2970,58 @@
Этот сеанс не поддерживает шифрование и поэтому не может быть заверен.
%1$s завершил(а) голосовую трансляцию.
Вы завершили голосовую трансляцию.
+
+ - Нет активных опросов за %1$d день.
+\nЗагрузите больше чтобы показать опросы за прошедшие дни.
+ - Нет активных опросов за %1$d дней.
+\nЗагрузите больше чтобы показать опросы за прошедшие дни.
+ - Нет активных опросов за %1$d дней.
+\nЗагрузите больше чтобы показать опросы за прошедшие дни.
+ - Нет активных опросов за %1$d дней.
+\nЗагрузите больше чтобы показать опросы за прошедшие дни.
+
+
+ - Нет завершённых опросов за день %1$d.
+\nЗагрузите больше чтобы показать опросы за предыдущие дни.
+ - Нет завершённых опросов за %1$d дней
+\nЗагрузите больше чтобы показать опросы за предыдущие дни.
+ - Нет завершённых опросов за %1$d дней
+\nЗагрузите больше чтобы показать опросы за предыдущие дни.
+ - Нет завершённых опросов за %1$d дней
+\nЗагрузите больше чтобы показать опросы за предыдущие дни.
+
+ Токен доступа даёт полный доступ к аккаунту. Не делитесь им ни с кем.
+ Токен доступа
+ Завершённый опрос
+ Опрос
+ завершённый опрос.
+ Изменить ссылку
+ Создать ссылку
+ Ссылка
+ Текст
+ Список
+ Пронумерованный список
+ Ссылка
+ Ошибка считывания опросов.
+ Загрузить больше опросов
+ Показываем опросы
+ Нет завершённых опросов
+ Завершённые опросы
+ Нет активных опросов
+ Активные опросы
+ Из-за ошибок расшифровки, некоторые голоса могут быть не засчитаны
+ Опрос завершён.
+ Вы уверены что хотите завершить голосовую трансляцию\? Это завершит трансляцию и полная запись будет доступна в чате.
+ Завершить голосовую трансляцию\?
+ Ошибка подключения - Запись приостановлена
+ Невозможно прослушать голосовую трансляцию.
+ Голосовая трансляция
+ Вы не можете записать голосовое сообщение, потому-что Вы записываете голосовую трансляцию. Завершите голосовую трансляцию, чтобы записать голосовое сообщение
+ Не удалось записать голосовое сообщение
+ Убедиться что Ваш аккаунт в безопасности
+ Получить последнюю сборку (у вас могут быть проблемы со входом)
+ История опроса
+ Голосовая трансляция начата
+ Ваш домашний сервер не поддерживает список обсуждений.
+ Остановить
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-sk/strings.xml b/libraries/ui-strings/src/main/res/values-sk/strings.xml
index 34155ba6a5..c9e92d323b 100644
--- a/libraries/ui-strings/src/main/res/values-sk/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-sk/strings.xml
@@ -2001,8 +2001,6 @@
Interaktívne overte pomocou emotikonov
Manuálne overte pomocou textu
Overte nové prihlásenie s prístupom k vášmu účtu: %1$s
- Overte všetky vaše relácie, aby ste si boli istý, že sú vaše správy a účet bezpečné
- Skontrolujte, kde ste prihlásení
Šifrované neovereným zariadením
pošle sneženie ❄️
pošle konfety 🎉
@@ -2421,7 +2419,6 @@
Pokračovať pomocou jednotného prihlásenia SSO
jednotné prihlásenie SSO
Zatvoriť výzvu na zálohovanie kľúčov
- Výťazná odpoveď
Nezaškrtnuté
Zaškrtnuté
Rozpísaná správa
@@ -2767,9 +2764,6 @@
\n
\nTo im poskytuje istotu, že sa komunikujú naozaj s vami, ale zároveň to znamená, že vidia názov relácie, ktorý sem zadáte.
Premenovanie relácií
- Overené relácie, do ktorých ste sa prihlásili pomocou svojich prihlasovacích údajov a ktoré boli následne overené buď pomocou vašej bezpečnostnej prístupovej frázy, alebo krížovým overením.
-\n
-\nTo znamená, že majú šifrovacie kľúče pre vaše predchádzajúce správy a potvrdzujú ostatným používateľom, s ktorými komunikujete, že tieto relácie ste skutočne vy.
Overené relácie
Neoverené relácie sú relácie, do ktorých ste sa prihlásili pomocou svojich prístupových údajov, ale ktoré neboli krížovo overené.
\n
@@ -2868,7 +2862,7 @@
Žiadosť zlyhala.
Možnosť nahrávania a odosielania hlasového vysielania v časovej osi miestnosti.
Zapnúť hlasové vysielanie
- Načítavanie do vyrovnávacej pamäte…
+ Načítavanie do vyrovnávacej pamäte…
Pozastaviť hlasové vysielanie
Prehrať alebo pokračovať v nahrávaní hlasového vysielania
Zastaviť nahrávanie hlasového vysielania
@@ -2955,4 +2949,34 @@
V tejto miestnosti nie sú žiadne aktívne ankety
Aktívne ankety
História ankety
+ Ukončená anketa
+ Anketa
+ ukončil/a anketu.
+ Ukončil/a anketu.
+ Váš domovský server zatiaľ nepodporuje zobrazovanie vlákien.
+ Toto hlasové vysielanie nie je možné prehrať.
+ Spustil/a hlasové vysielanie
+ Z dôvodu chýb v dešifrovaní sa niektoré hlasy nemusia započítať
+ Chyba pri načítavaní ankiet.
+ Načítať ďalšie ankety
+ Zobrazenie ankiet
+
+ - Za uplynulý deň nie sú k dispozícii žiadne ankety.
+\nNačítaním ďalších ankiet zobrazíte ankety za predchádzajúce dni.
+ - Za posledné %1$d dni nie sú aktívne žiadne ankety.
+\nNačítaním ďalších ankiet zobrazíte ankety za predchádzajúce dni.
+ - Za posledných %1$d dní nie sú aktívne žiadne ankety.
+\nNačítaním ďalších ankiet zobrazíte ankety za predchádzajúce dni.
+
+
+ - Za posledný deň nie sú aktívne žiadne ankety.
+\nNačítaním ďalších ankiet zobrazíte ankety za predchádzajúce dni.
+ - Za posledných %1$d dni nie sú aktívne žiadne ankety.
+\nNačítaním ďalších ankiet zobrazíte ankety za predchádzajúce dni.
+ - Za posledných %1$d dní nie sú aktívne žiadne ankety.
+\nNačítaním ďalších ankiet zobrazíte ankety za predchádzajúce dni.
+
+ Nemôžete spustiť hlasovú správu, pretože práve nahrávate živé vysielanie. Ukončite prosím živé vysielanie, aby ste mohli začať nahrávať hlasovú správu
+ Nemožno spustiť hlasovú správu
+ Chyba pripojenia - nahrávanie pozastavené
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-sq/strings.xml b/libraries/ui-strings/src/main/res/values-sq/strings.xml
index c3f9d53c99..374080cb23 100644
--- a/libraries/ui-strings/src/main/res/values-sq/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-sq/strings.xml
@@ -1413,8 +1413,6 @@
S’u arrit të hyhet në depozitë të sigurt
Të pafshehtëzuara
Fshehtëzuar nga një pajisje e paverifikuar
- Shqyrtojini kur të jeni i futur
- Verifikoni krejt sesionet tuaj që të siguroheni se llogaria & mesazhet tuaja janë të sigurt
Verifikoni kredencialet e reja për hyrje te llogaria juaj: %1$s
Verifikojeni Dorazi përmes Teksti
Verifikoni kredenciale hyrjeje
@@ -2512,9 +2510,6 @@
\n
\nKjo u jep atyre besim se po flasin vërtet me ju, por do të thotë gjithashtu që mund shohin emrin e sesionit që jepni këtu.
Riemërtim sesionesh
- Sesionet e verifikuar përfaqësojnë sesione ku është bërë hyrja dhe janë verifikuar, ose duke përdorur togfjalëshin tuaj të sigurt, ose me verifikim.
-\n
-\nKjo do të thotë se zotërojnë kyçe fshehtëzimi për mesazhe tuajt të mëparshëm dhe u ripohojnë përdoruesve të tjerë, me të cilët po komunikoni, se këto sesione ju takojnë juve.
Sesione të verifikuar
Sesionet e paverifikuar janë sesione në të cilët është bërë hyrja me kredencialet tuaja, por pa u bërë verifikim.
\n
@@ -2659,7 +2654,7 @@
\nKy shërbyes Home mund të mos jetë formësuar të shfaqë harta.
Përfundimet do të jenë të dukshme pasi të ketë përfunduar pyetësori
Kur bëhet ftesë në një dhomë të fshehtëzuar që ka historik ndarjesh me të tjerët, historiku i fshehtëzuar do të jetë i dukshëm.
-
+
Ndal transmetim zanor
Luani ose vazhdoni luajtje transmetimi zanor
Ndal incizim transmetimi zanor
@@ -2876,10 +2871,20 @@
Tekst
Tokeni juaj i hyrjeve jep hyrje të plotë në llogarinë tuaj. Mos ia jepni kujt.
Token Hyrjesh
- S’ka pyetësorë të kaluar në këtë dhomë
- Pyetësorë të kaluar
+ Në këtë dhomë s’ka pyetësorë të dikurshëm
+ Pyetësorë të dikurshëm
S’ka pyetësorë aktivë në këtë dhomë
Pyetësorë aktivë
- mundësia fituese
Historik pyetësorësh
-
\ No newline at end of file
+ Përfundoi pyetësorin
+ Përfundoi pyetësorin.
+ Pyetësor
+ përfundoi një pyetësor.
+ Shfaq/fshi listë me toptha
+ Shfaq/fshi listë të numërtuar
+ Ujdisni lidhje
+ Për shkak gabimesh shfshehtëzimi, mund të mos jenë numëruar disa vota
+ S’arrihet të luhet ky transmetim zanor.
+ Nisni një transmetim zanor
+ Shërbyesi juaj Home s’mbulon ende paraqitje rrjedhash.
+
diff --git a/libraries/ui-strings/src/main/res/values-sv/strings.xml b/libraries/ui-strings/src/main/res/values-sv/strings.xml
index 373165802a..877a95f2de 100644
--- a/libraries/ui-strings/src/main/res/values-sv/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-sv/strings.xml
@@ -662,8 +662,6 @@
Kryptering inte aktiverat
Aviseringskonfiguration
Meddelanden som innehåller @room
- Granska var du är inloggad
- Verifiera alla dina sessioner för att se till att ditt konto och dina meddelanden är säkra
Vi kunde inte skapa ditt DM. Vänligen kolla användarna du vill bjuda in och försök igen.
BJUD IN
Bjud in användare
@@ -2281,7 +2279,6 @@
Avsluta omröstningen
Det här kommer att stoppa personer från att rösta och visa det slutgiltiga resultatet av omröstningen.
Avsluta den här omröstningen\?
- vinnande alternativ
Avsluta omröstning
- Slutgiltigt resultat baserat på %1$d röst
@@ -2737,9 +2734,6 @@
\n
\nDet försäkrar dem om att de verkligen pratar med dig, men det betyder också att de kan se sessionsnamnet du anger här.
Döper om sessioner
- Verifierade sessioner har loggat in med dina uppgifter och har sedan verifierats, antingen med din säkra lösenfras eller genom att kors-verifiera.
-\n
-\nDet betyder att det har krypteringsnycklar för dina tidigare meddelanden, bekräftar för andra användare du kommunicerar med att dessa sessioner verkligen är du.
Verifierade sessioner
Overifierade sessioner är sessioner som har loggat in med dina uppgifter men som inte har kors-verifierats.
\n
@@ -2804,7 +2798,7 @@
Använd din inloggade enhet för att skanna QR-koden nedan:
Logga in med QR-kod
Använd den här enhetens kamera för att skanna QR-koden på din andra enhet:
- Buffrar…
+ Buffrar…
Pausa röstsändning
Spela eller återuppta röstsändning
Avsluta inspelning av röstsändning
@@ -2882,4 +2876,26 @@
Direktsändning
Du avslutade en röstsändning.
%1$s avslutade en röstsändning.
-
\ No newline at end of file
+ Din åtkomsttoken ger full åtkomst till ditt konto. Dela den inte med någon.
+ Åtkomsttoken
+ Avslutade omröstning
+ Omröstning
+ avslutade en omröstning.
+ Redigera länk
+ Skapa en länk
+ Länk
+ Text
+ Växla punktlista
+ Växla numrerad lista
+ Sätt länk
+ Det finns inga tidigare omröstningar i det här rummet
+ Tidigare omröstningar
+ Det finns inga aktiva omröstningar i det här rummet
+ Aktiva omröstningar
+ Avslutade omröstningen.
+ Är du säker på att du vill avsluta din direktsändning\? Detta kommer att avsluta sändningen och den fulla inspelningen kommer att bli tillgänglig i rummet.
+ Avsluta röstsändning\?
+ Omröstningshistorik
+ Din hemserver har inte stöd för att lista trådar än.
+ Ja, sluta
+
diff --git a/libraries/ui-strings/src/main/res/values-sw/strings.xml b/libraries/ui-strings/src/main/res/values-sw/strings.xml
new file mode 100644
index 0000000000..d1938c5896
--- /dev/null
+++ b/libraries/ui-strings/src/main/res/values-sw/strings.xml
@@ -0,0 +1,14 @@
+
+
+ umeondoa %1$s
+ %1$s kuondolewa %2$s
+ Ulikataa mwaliko
+ %1$s alikataa mwaliko
+ Ulijiunga
+ %1$s alijiunga
+ %1$s Amekualika
+
+ - %1$d Iliyochaguliwa
+ - %1$d Ziliyochaguliwa
+
+
diff --git a/libraries/ui-strings/src/main/res/values-uk/strings.xml b/libraries/ui-strings/src/main/res/values-uk/strings.xml
index 2ee9685c76..0f6027903f 100644
--- a/libraries/ui-strings/src/main/res/values-uk/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-uk/strings.xml
@@ -1156,7 +1156,6 @@
Довірений
Не довірений вхід
Підтвердьте особу, звіривши цей вхід своїм іншим сеансом і надавши йому доступ до зашифрованих повідомлень.
- Звірте усі свої сеанси, щоб переконатись у безпечності вашого облікового запису та повідомлень
Сеанси
Не вдалось отримати сеанси
Ви не маєте доступу до цього повідомлення, бо відправник не довіряє вашому сеансу
@@ -2012,7 +2011,6 @@
Додати людей
Додати учасників
Перевірте це посилання
- Перевірте, де ви ввійшли
Інтерактивна перевірка за допомогою емоджі
Виберіть пароль.
Виберіть ім\'я користувача.
@@ -2360,7 +2358,6 @@
Завершити опитування
Люди більше не зможуть голосувати, і будуть показані остаточні результати опитування.
Завершити це опитування\?
- варіант-переможець
Завершити опитування
- Остаточний результат на підставі %1$d голосу
@@ -2821,9 +2818,6 @@
\n
\nЦе дає їм впевненість у тому, що вони дійсно розмовляють з вами, а також означає, що вони можуть бачити назву сеансу, яку ви ввели тут.
Перейменування сеансів
- Звірені сеанси — ті, до яких ви ввійшли за допомогою своїх облікових даних, а потім пройшли перевірку, використовуючи вашу захищену парольну фразу або шляхом перехресної перевірки.
-\n
-\nЦе означає, що вони мають ключі шифрування для ваших попередніх повідомлень і підтверджують іншим користувачам, з якими ви спілкуєтеся, що ці сеанси — це дійсно ви.
Звірені сеанси
Не звірені сеанси — це сеанси, до яких ви ввійшли в за допомогою своїх облікових даних, але не пройшли перехресну перевірку.
\n
@@ -2922,7 +2916,7 @@
Запит не виконаний.
Можливість записувати та надсилати голосові трансляції до стрічки кімнати.
Увімкнути голосові трансляції
- Буферизація…
+ Буферизація…
Призупинити голосову трансляцію
Відтворити або поновити відтворення голосової трансляції
Припинити запис голосової трансляції
@@ -3011,4 +3005,38 @@
У цій кімнаті немає активних опитувань
Активні опитування
Історія опитувань
+ Завершене опитування
+ Опитування
+ завершує опитування.
+ Опитування завершено.
+ Ваш домашній сервер поки що не підтримує створення списків гілок.
+ Неможливо відтворити цю голосову трансляцію.
+ Розпочато голосову трансляцію
+ Через помилки розшифрування деякі голоси можуть бути не враховані
+
+ - За %1$d минулий день немає минулих опитувань.
+\nЗавантажте більше опитувань, щоб переглянути опитування за попередні дні.
+ - За минулі %1$d дні немає минулих опитувань.
+\nЗавантажте більше опитувань, щоб переглянути опитування за попередні дні.
+ - За минулі %1$d днів немає минулих опитувань.
+\nЗавантажте більше опитувань, щоб переглянути опитування за попередні дні.
+ - За минулі %1$d днів немає минулих опитувань.
+\nЗавантажте більше опитувань, щоб переглянути опитування за попередні дні.
+
+
+ - За %1$d останній день немає активних опитувань.
+\nЗавантажте більше опитувань, щоб переглянути опитування за попередні дні.
+ - За останні %1$d дні немає активних опитувань.
+\nЗавантажте більше опитувань, щоб переглянути опитування за попередні дні.
+ - За останні %1$d днів немає активних опитувань.
+\nЗавантажте більше опитувань, щоб переглянути опитування за попередні дні.
+ - За останні %1$d днів немає активних опитувань.
+\nЗавантажте більше опитувань, щоб переглянути опитування за попередні дні.
+
+ Помилка отримання опитувань.
+ Завантажити більше опитувань
+ Показ опитувань
+ Ви не можете розпочати запис голосового повідомлення, оскільки ви записуєте трансляцію наживо. Будь ласка, заверште її, щоб розпочати запис голосового повідомлення
+ Не вдалося розпочати запис голосового повідомлення
+ Помилка з\'єднання - Запис призупинено
\ No newline at end of file
diff --git a/libraries/ui-strings/src/main/res/values-vi/strings.xml b/libraries/ui-strings/src/main/res/values-vi/strings.xml
index c6dc97f782..70755f1394 100644
--- a/libraries/ui-strings/src/main/res/values-vi/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-vi/strings.xml
@@ -1193,7 +1193,6 @@
Kết thúc cuộc thăm dò ý kiến
Điều này sẽ ngăn mọi người có thể bỏ phiếu và sẽ hiển thị kết quả cuối cùng của cuộc thăm dò.
Kết thúc cuộc thăm dò này\?
- tùy chọn người chiến thắng
Kết thúc cuộc thăm dò ý kiến
Câu hỏi không thể trống
TẠO CUỘC THĂM DÒ Ý KIẾN
@@ -1472,8 +1471,6 @@
Xác minh đăng nhập
Xác minh thủ công bằng Văn bản
Xác minh thông tin đăng nhập mới truy cập vào tài khoản của bạn: %1$s
- Xác minh tất cả các phiên của bạn để đảm bảo tài khoản và tin nhắn của bạn được an toàn
- Xem lại nơi bạn đăng nhập
Được mã hóa bởi một thiết bị chưa được xác minh
Không được mã hóa
gửi tuyết rơi ❄️
diff --git a/libraries/ui-strings/src/main/res/values-zh-rCN/strings.xml b/libraries/ui-strings/src/main/res/values-zh-rCN/strings.xml
index 9f975e61e4..1e75540acf 100644
--- a/libraries/ui-strings/src/main/res/values-zh-rCN/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-zh-rCN/strings.xml
@@ -1459,8 +1459,6 @@
访问安全存储失败
未加密
由未验证设备加密
- 查看你的登录位置
- 验证你的全部会话确保你的账户和消息安全
验证访问你的账户的新登录:%1$s
使用文本手动验证
验证登录
@@ -1692,8 +1690,8 @@
一些字符不被允许
请提供一个房间地址
此地址已被使用
- 你可以启用此选项如果此房间将仅用于你的主服务器上的内部团队协作。此选项之后无法更改。
- 屏蔽不是 %s 一部分的任何人加入此房间
+ 若房间仅用于与你的主服务器上的内部团队协作,则你可以启用此选项。此选项之后无法更改。
+ 阻止任何不属于%s的人加入此房间
隐藏高级
显示高级
清除历史记录
@@ -2231,7 +2229,6 @@
结束投票
这将使人们无法再投票,并将显示投票的最终结果。
结束此投票?
- 赢家选项
结束投票
- 基于 %1$d 票的最终结果
@@ -2648,9 +2645,6 @@
\n
\n这让他们确信他们真的在与你交谈,但这也意味着他们可以看到你在此处输入的会话名称。
重命名会话
- 已验证会话已使用你的凭据登录,然后使用你的安全密码或通过交叉验证进行验证。
-\n
-\n这意味着他们持有你之前消息的加密密钥,并向你正在与之通信的其他用户确认这些会话确实是你。
闲置会话是你一段时间未使用的会话,但它们会继续接收加密密钥。
\n
\n删除闲置会话可以提高安全性和性能,并使你更容易识别新会话是否可疑。
@@ -2694,7 +2688,7 @@
验证你当前的会话以显示此会话的验证状态。
未知的验证状态
开始语音广播
- 正在缓冲……
+ 正在缓冲……
暂停语音广播
实时
知道了
@@ -2821,4 +2815,8 @@
Nightly构建
你结束了一个语音广播。
%1$s结束了一个语音广播。
-
\ No newline at end of file
+ 停止实时广播?
+ 无法播放此语音广播。
+ 你无法启动语音消息因为你正在录制实时广播。请终止实时广播以开始录制语音消息
+ 无法启动语音消息
+
diff --git a/libraries/ui-strings/src/main/res/values-zh-rTW/strings.xml b/libraries/ui-strings/src/main/res/values-zh-rTW/strings.xml
index 14729c5b44..c650a1e6b2 100644
--- a/libraries/ui-strings/src/main/res/values-zh-rTW/strings.xml
+++ b/libraries/ui-strings/src/main/res/values-zh-rTW/strings.xml
@@ -1412,8 +1412,6 @@
我們無法建立您的直接訊息。請檢查您想要邀請的使用者,然後再試一次。
未加密
由未驗證的裝置加密
- 審閱您從何處登入
- 驗證您所有的工作階段以確保您的帳號與訊息都安全
驗證正在存取您帳號的新登入:%1$s
%1$s:%2$s
%1$s:%2$s %3$s
@@ -2231,7 +2229,6 @@
結束投票
這將阻止人們投票並顯示投票的最終結果。
結束此投票?
- 獲勝選項
結束投票
- 以 %1$d 票為基礎的最終結果
@@ -2659,9 +2656,6 @@
\n
\n這讓他們確信他們真的在與您交談,但這也意味著他們可以看到您在此處輸入的工作階段名稱。
正在重新命名工作階段
- 已驗證的工作階段代表使用您的憑證登入,然後使用您的安全通關密語或透過交叉驗證進行驗證。
-\n
-\n這代表了它們持有您先前訊息的加密金鑰,並向您正在與之通訊的其他使用者確認這些工作階段確實是您。
已驗證的工作階段
未驗證的工作階段是使用您的憑證登入但未交叉驗證的工作階段。
\n
@@ -2760,7 +2754,7 @@
請求失敗。
可以在聊天室時間軸中錄製並傳送語音廣播。
啟用語音廣播
- 正在緩衝……
+ 正在緩衝……
暫停語音廣播
播放或繼續語音廣播
停止語音廣播錄製
@@ -2843,4 +2837,23 @@
此聊天室沒有正在進行的投票
進行中的投票
投票歷史紀錄
-
\ No newline at end of file
+ 已結束投票
+ 投票
+ 已結束投票。
+ 已結束投票。
+ 您的家伺服器還不支援列出討論串。
+ 無法播放此語音廣播。
+ 已開始語音廣播
+ 因為解密錯誤,部份投票可能並未計算
+ 擷取投票時發生錯誤。
+ 載入更多投票
+ 顯示投票
+
+ - 過去 %1$d 天沒有投票。
+\n載入更多投票以檢視過去幾天的投票。
+
+
+ - 過去 %1$d 天沒有活躍的投票。
+\n載入更多投票以檢視過去幾天的投票。
+
+
diff --git a/libraries/ui-strings/src/main/res/values/donottranslate.xml b/libraries/ui-strings/src/main/res/values/donottranslate.xml
index bfe751ef5a..910ce31c41 100755
--- a/libraries/ui-strings/src/main/res/values/donottranslate.xml
+++ b/libraries/ui-strings/src/main/res/values/donottranslate.xml
@@ -10,6 +10,8 @@
Cut the slack from teams.
+ Crash the application.
+
© MapTiler © OpenStreetMap contributors
diff --git a/libraries/ui-strings/src/main/res/values/strings.xml b/libraries/ui-strings/src/main/res/values/strings.xml
index 38aecaf215..e690f06bbb 100644
--- a/libraries/ui-strings/src/main/res/values/strings.xml
+++ b/libraries/ui-strings/src/main/res/values/strings.xml
@@ -1689,7 +1689,6 @@
Create New Room
Create New Space
No network. Please check your Internet connection.
-
Something went wrong. Please check your network connection and try again.
"Change network"
"Please wait…"
@@ -2659,10 +2658,6 @@
Unencrypted
Encrypted by an unverified device
The authenticity of this encrypted message can\'t be guaranteed on this device.
-
- Review where you’re logged in
-
- Verify all your sessions to ensure your account & messages are safe
You have unverified sessions
Review to ensure your account is safe
@@ -3097,6 +3092,8 @@
Cannot play this voice message
Cannot record a voice message
Cannot reply or edit while voice message is active
+ Cannot start voice message
+ You can’t start a voice message as you are currently recording a live broadcast. Please end your live broadcast in order to start recording a voice message
Voice Message (%1$s)
%1$s, %2$s, %3$s
@@ -3109,8 +3106,7 @@
Live
Live broadcast
-
- Buffering…
+ Buffering…
Resume voice broadcast record
Pause voice broadcast record
Stop voice broadcast record
@@ -3123,6 +3119,7 @@
Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.
You are already recording a voice broadcast. Please end your current voice broadcast to start a new one.
Unable to play this voice broadcast.
+ Connection error - Recording paused
%1$s left
Stop live broadcasting?
@@ -3180,8 +3177,6 @@
- Final result based on %1$d votes
End poll
-
- winner option
End this poll?
This will stop people from being able to vote and will display the final results of the poll.
End poll
@@ -3427,8 +3422,6 @@
Unverified sessions
Unverified sessions are sessions that have logged in with your credentials but not been cross-verified.\n\nYou should make especially certain that you recognise these sessions as they could represent an unauthorised use of your account.
Verified sessions
-
- Verified sessions have logged in with your credentials and then been verified, either using your secure passphrase or by cross-verifying.\n\nThis means they hold encryption keys for your previous messages, and confirm to other users you are communicating with that these sessions are really you.
Verified sessions are anywhere you are using this account after entering your passphrase or confirming your identity with another verified session.\n\nThis means that you have all the keys needed to unlock your encrypted messages and confirm to other users that you trust this session.
This session doesn\'t support encryption, so it can\'t be verified.\n\nYou won\'t be able to participate in rooms where encryption is enabled when using this session.\n\nFor best security and privacy, it is recommended to use Matrix clients that support encryption.
Renaming sessions
@@ -3509,6 +3502,7 @@
Set link
Toggle numbered list
Toggle bullet list
+ Apply inline code format
Toggle full screen mode
Text
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 2971994ca8..b85f5e6717 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -32,6 +32,9 @@ dependencyResolutionManagement {
}
}
}
+
+enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
+
rootProject.name = "ElementX"
include(":app")
include(":libraries:core")
@@ -41,6 +44,7 @@ include(":libraries:matrixui")
include(":libraries:textcomposer")
include(":libraries:elementresources")
include(":libraries:ui-strings")
+include(":libraries:testtags")
include(":features:onboarding")
include(":features:login")
include(":features:logout")
@@ -55,3 +59,5 @@ include(":anvilannotations")
include(":anvilcodegen")
include(":libraries:architecture")
include(":libraries:matrixtest")
+include(":features:template")
+include(":libraries:androidutils")
diff --git a/tests/uitests/build.gradle.kts b/tests/uitests/build.gradle.kts
index e8f2ca47ad..6d970e34b0 100644
--- a/tests/uitests/build.gradle.kts
+++ b/tests/uitests/build.gradle.kts
@@ -26,7 +26,7 @@ plugins {
}
android {
- namespace = "io.element.android.x.tests.uitests"
+ namespace = "io.element.android.tests.uitests"
}
dependencies {
diff --git a/tests/uitests/src/main/kotlin/io/element/android/x/tests/uitests/ElementXShowkaseRootModule.kt b/tests/uitests/src/main/kotlin/io/element/android/tests/uitests/ElementXShowkaseRootModule.kt
similarity index 94%
rename from tests/uitests/src/main/kotlin/io/element/android/x/tests/uitests/ElementXShowkaseRootModule.kt
rename to tests/uitests/src/main/kotlin/io/element/android/tests/uitests/ElementXShowkaseRootModule.kt
index 6250bcaba8..0c3fab67eb 100644
--- a/tests/uitests/src/main/kotlin/io/element/android/x/tests/uitests/ElementXShowkaseRootModule.kt
+++ b/tests/uitests/src/main/kotlin/io/element/android/tests/uitests/ElementXShowkaseRootModule.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.tests.uitests
+package io.element.android.tests.uitests
import com.airbnb.android.showkase.annotation.ShowkaseRoot
import com.airbnb.android.showkase.annotation.ShowkaseRootModule
diff --git a/tests/uitests/src/main/kotlin/io/element/android/x/tests/uitests/ShowkaseButton.kt b/tests/uitests/src/main/kotlin/io/element/android/tests/uitests/ShowkaseButton.kt
similarity index 96%
rename from tests/uitests/src/main/kotlin/io/element/android/x/tests/uitests/ShowkaseButton.kt
rename to tests/uitests/src/main/kotlin/io/element/android/tests/uitests/ShowkaseButton.kt
index ba8f111f13..9ae1b78577 100644
--- a/tests/uitests/src/main/kotlin/io/element/android/x/tests/uitests/ShowkaseButton.kt
+++ b/tests/uitests/src/main/kotlin/io/element/android/tests/uitests/ShowkaseButton.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022 New Vector Ltd
+ * Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.tests.uitests
+package io.element.android.tests.uitests
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
diff --git a/tests/uitests/src/main/kotlin/io/element/android/x/tests/uitests/ShowkaseNavigation.kt b/tests/uitests/src/main/kotlin/io/element/android/tests/uitests/ShowkaseNavigation.kt
similarity index 94%
rename from tests/uitests/src/main/kotlin/io/element/android/x/tests/uitests/ShowkaseNavigation.kt
rename to tests/uitests/src/main/kotlin/io/element/android/tests/uitests/ShowkaseNavigation.kt
index 4ed7328ad3..bf252a1755 100644
--- a/tests/uitests/src/main/kotlin/io/element/android/x/tests/uitests/ShowkaseNavigation.kt
+++ b/tests/uitests/src/main/kotlin/io/element/android/tests/uitests/ShowkaseNavigation.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.tests.uitests
+package io.element.android.tests.uitests
import android.app.Activity
import com.airbnb.android.showkase.models.Showkase
diff --git a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/BaseDeviceConfig.kt b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/BaseDeviceConfig.kt
similarity index 94%
rename from tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/BaseDeviceConfig.kt
rename to tests/uitests/src/test/kotlin/io/element/android/tests/uitests/BaseDeviceConfig.kt
index a46dceaa8e..3732ca66cc 100644
--- a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/BaseDeviceConfig.kt
+++ b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/BaseDeviceConfig.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.tests.uitests
+package io.element.android.tests.uitests
import app.cash.paparazzi.DeviceConfig
diff --git a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/ColorTestPreview.kt b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/ColorTestPreview.kt
similarity index 97%
rename from tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/ColorTestPreview.kt
rename to tests/uitests/src/test/kotlin/io/element/android/tests/uitests/ColorTestPreview.kt
index 9dd2c563d8..ae3722612b 100644
--- a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/ColorTestPreview.kt
+++ b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/ColorTestPreview.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.tests.uitests
+package io.element.android.tests.uitests
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
diff --git a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/ComponentTestPreview.kt b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/ComponentTestPreview.kt
similarity index 95%
rename from tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/ComponentTestPreview.kt
rename to tests/uitests/src/test/kotlin/io/element/android/tests/uitests/ComponentTestPreview.kt
index 598acfadb0..e74cb4d59b 100644
--- a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/ComponentTestPreview.kt
+++ b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/ComponentTestPreview.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.tests.uitests
+package io.element.android.tests.uitests
import androidx.compose.runtime.Composable
import com.airbnb.android.showkase.models.ShowkaseBrowserComponent
diff --git a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/ScreenshotTest.kt b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/ScreenshotTest.kt
similarity index 97%
rename from tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/ScreenshotTest.kt
rename to tests/uitests/src/test/kotlin/io/element/android/tests/uitests/ScreenshotTest.kt
index 3d1804884d..1c26565acf 100644
--- a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/ScreenshotTest.kt
+++ b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/ScreenshotTest.kt
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package io.element.android.x.tests.uitests
+package io.element.android.tests.uitests
import android.content.res.Configuration
import android.os.LocaleList
@@ -36,7 +36,7 @@ import app.cash.paparazzi.Paparazzi
import com.airbnb.android.showkase.models.Showkase
import com.google.testing.junit.testparameterinjector.TestParameter
import com.google.testing.junit.testparameterinjector.TestParameterInjector
-import io.element.android.x.designsystem.ElementXTheme
+import io.element.android.libraries.designsystem.ElementXTheme
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
diff --git a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/TestPreview.kt b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/TestPreview.kt
similarity index 94%
rename from tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/TestPreview.kt
rename to tests/uitests/src/test/kotlin/io/element/android/tests/uitests/TestPreview.kt
index 6398a418bf..6892665e1a 100644
--- a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/TestPreview.kt
+++ b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/TestPreview.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.tests.uitests
+package io.element.android.tests.uitests
import androidx.compose.runtime.Composable
diff --git a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/TypographyTestPreview.kt b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/TypographyTestPreview.kt
similarity index 97%
rename from tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/TypographyTestPreview.kt
rename to tests/uitests/src/test/kotlin/io/element/android/tests/uitests/TypographyTestPreview.kt
index 0ff497d5d8..80f27c25a0 100644
--- a/tests/uitests/src/test/kotlin/io/element/android/x/tests/uitests/TypographyTestPreview.kt
+++ b/tests/uitests/src/test/kotlin/io/element/android/tests/uitests/TypographyTestPreview.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.x.tests.uitests
+package io.element.android.tests.uitests
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding