Merge pull request #53 from vector-im/feature/fga/clean_code_hierarchy

Feature/fga/clean code hierarchy
This commit is contained in:
ganfra 2023-01-23 12:26:36 +01:00 committed by GitHub
commit 0d5f348354
290 changed files with 1058 additions and 1038 deletions

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.anvilannotations package io.element.android.anvilannotations
import kotlin.reflect.KClass import kotlin.reflect.KClass

View file

@ -22,7 +22,7 @@ plugins {
} }
dependencies { dependencies {
implementation(project(":anvilannotations")) implementation(projects.anvilannotations)
api(libs.anvil.compiler.api) api(libs.anvil.compiler.api)
implementation(libs.anvil.compiler.utils) implementation(libs.anvil.compiler.utils)
implementation("com.squareup:kotlinpoet:1.12.0") implementation("com.squareup:kotlinpoet:1.12.0")

View file

@ -16,7 +16,7 @@
@file:OptIn(ExperimentalAnvilApi::class) @file:OptIn(ExperimentalAnvilApi::class)
package io.element.android.x.anvilcodegen package io.element.android.anvilcodegen
import com.google.auto.service.AutoService import com.google.auto.service.AutoService
import com.squareup.anvil.annotations.ContributesTo import com.squareup.anvil.annotations.ContributesTo
@ -46,7 +46,7 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import dagger.multibindings.IntoMap 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.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
@ -148,7 +148,7 @@ class ContributesNodeCodeGenerator : CodeGenerator {
} }
companion object { companion object {
private val assistedNodeFactoryFqName = FqName("io.element.android.x.architecture.AssistedNodeFactory") private val assistedNodeFactoryFqName = FqName("io.element.android.libraries.architecture.AssistedNodeFactory")
private val nodeKeyFqName = FqName("io.element.android.x.architecture.NodeKey") private val nodeKeyFqName = FqName("io.element.android.libraries.architecture.NodeKey")
} }
} }

View file

@ -164,9 +164,9 @@ knit {
dependencies { dependencies {
allLibraries() allLibraries()
allFeatures() allFeatures()
implementation(project(":tests:uitests")) implementation(projects.tests.uitests)
implementation(project(":anvilannotations")) implementation(projects.anvilannotations)
anvil(project(":anvilcodegen")) anvil(projects.anvilcodegen)
// https://developer.android.com/studio/write/java8-support#library-desugaring-versions // https://developer.android.com/studio/write/java8-support#library-desugaring-versions
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.2.2") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.2.2")

View file

@ -18,7 +18,7 @@ package io.element.android.x
import android.app.Application import android.app.Application
import androidx.startup.AppInitializer 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.AppComponent
import io.element.android.x.di.DaggerAppComponent import io.element.android.x.di.DaggerAppComponent
import io.element.android.x.initializer.CrashInitializer import io.element.android.x.initializer.CrashInitializer

View file

@ -25,9 +25,9 @@ import androidx.compose.ui.Modifier
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
import com.bumble.appyx.core.integration.NodeHost import com.bumble.appyx.core.integration.NodeHost
import com.bumble.appyx.core.integrationpoint.NodeComponentActivity import com.bumble.appyx.core.integrationpoint.NodeComponentActivity
import io.element.android.x.architecture.bindings import io.element.android.libraries.architecture.bindings
import io.element.android.x.di.DaggerComponentOwner import io.element.android.libraries.di.DaggerComponentOwner
import io.element.android.x.designsystem.ElementXTheme import io.element.android.libraries.designsystem.ElementXTheme
import io.element.android.x.di.AppBindings import io.element.android.x.di.AppBindings
import io.element.android.x.node.RootFlowNode import io.element.android.x.node.RootFlowNode

View file

@ -17,7 +17,8 @@
package io.element.android.x.di package io.element.android.x.di
import com.squareup.anvil.annotations.ContributesTo 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 io.element.android.x.root.RootPresenter
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope

View file

@ -20,7 +20,10 @@ import android.content.Context
import com.squareup.anvil.annotations.MergeComponent import com.squareup.anvil.annotations.MergeComponent
import dagger.BindsInstance import dagger.BindsInstance
import dagger.Component 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) @SingleIn(AppScope::class)
@MergeComponent(AppScope::class) @MergeComponent(AppScope::class)

View file

@ -20,7 +20,10 @@ import android.content.Context
import com.squareup.anvil.annotations.ContributesTo import com.squareup.anvil.annotations.ContributesTo
import dagger.Module import dagger.Module
import dagger.Provides 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.CoroutineName
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers

View file

@ -20,8 +20,11 @@ import com.squareup.anvil.annotations.ContributesTo
import com.squareup.anvil.annotations.MergeSubcomponent import com.squareup.anvil.annotations.MergeSubcomponent
import dagger.BindsInstance import dagger.BindsInstance
import dagger.Subcomponent import dagger.Subcomponent
import io.element.android.x.architecture.NodeFactoriesBindings import io.element.android.libraries.architecture.NodeFactoriesBindings
import io.element.android.x.matrix.room.MatrixRoom 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) @SingleIn(RoomScope::class)
@MergeSubcomponent(RoomScope::class) @MergeSubcomponent(RoomScope::class)

View file

@ -20,8 +20,11 @@ import com.squareup.anvil.annotations.ContributesTo
import com.squareup.anvil.annotations.MergeSubcomponent import com.squareup.anvil.annotations.MergeSubcomponent
import dagger.BindsInstance import dagger.BindsInstance
import dagger.Subcomponent import dagger.Subcomponent
import io.element.android.x.architecture.NodeFactoriesBindings import io.element.android.libraries.architecture.NodeFactoriesBindings
import io.element.android.x.matrix.MatrixClient 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) @SingleIn(SessionScope::class)
@MergeSubcomponent(SessionScope::class) @MergeSubcomponent(SessionScope::class)

View file

@ -18,7 +18,7 @@ package io.element.android.x.initializer
import android.content.Context import android.content.Context
import androidx.startup.Initializer import androidx.startup.Initializer
import io.element.android.x.features.rageshake.crash.VectorUncaughtExceptionHandler import io.element.android.features.rageshake.crash.VectorUncaughtExceptionHandler
class CrashInitializer : Initializer<Unit> { class CrashInitializer : Initializer<Unit> {

View file

@ -19,8 +19,8 @@ package io.element.android.x.initializer
import android.content.Context import android.content.Context
import androidx.startup.Initializer import androidx.startup.Initializer
import io.element.android.x.BuildConfig import io.element.android.x.BuildConfig
import io.element.android.x.matrix.tracing.TracingConfigurations import io.element.android.libraries.matrix.tracing.TracingConfigurations
import io.element.android.x.matrix.tracing.setupTracing import io.element.android.libraries.matrix.tracing.setupTracing
class MatrixInitializer : Initializer<Unit> { class MatrixInitializer : Initializer<Unit> {

View file

@ -19,7 +19,7 @@ package io.element.android.x.initializer
import android.content.Context import android.content.Context
import androidx.startup.Initializer import androidx.startup.Initializer
import io.element.android.x.BuildConfig import io.element.android.x.BuildConfig
import io.element.android.x.features.rageshake.logs.VectorFileLogger import io.element.android.features.rageshake.logs.VectorFileLogger
import timber.log.Timber import timber.log.Timber
class TimberInitializer : Initializer<Unit> { class TimberInitializer : Initializer<Unit> {

View file

@ -32,16 +32,16 @@ import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.core.node.node import com.bumble.appyx.core.node.node
import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.BackStack
import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.push
import io.element.android.x.architecture.bindings import io.element.android.libraries.architecture.bindings
import io.element.android.x.architecture.createNode import io.element.android.libraries.architecture.createNode
import io.element.android.x.di.DaggerComponentOwner import io.element.android.libraries.di.DaggerComponentOwner
import io.element.android.x.di.SessionComponent import io.element.android.x.di.SessionComponent
import io.element.android.x.features.preferences.PreferencesFlowNode import io.element.android.features.preferences.PreferencesFlowNode
import io.element.android.x.features.roomlist.RoomListNode import io.element.android.features.roomlist.RoomListNode
import io.element.android.x.matrix.MatrixClient import io.element.android.libraries.matrix.MatrixClient
import io.element.android.x.matrix.core.RoomId import io.element.android.libraries.matrix.core.RoomId
import io.element.android.x.matrix.core.SessionId import io.element.android.libraries.matrix.core.SessionId
import io.element.android.x.matrix.ui.di.MatrixUIBindings import io.element.android.libraries.matrix.ui.di.MatrixUIBindings
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
class LoggedInFlowNode( class LoggedInFlowNode(

View file

@ -27,8 +27,8 @@ import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.core.node.node import com.bumble.appyx.core.node.node
import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.BackStack
import com.bumble.appyx.navmodel.backstack.operation.replace import com.bumble.appyx.navmodel.backstack.operation.replace
import io.element.android.x.features.login.LoginFlowNode import io.element.android.features.login.LoginFlowNode
import io.element.android.x.features.onboarding.OnBoardingScreen import io.element.android.features.onboarding.OnBoardingScreen
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import timber.log.Timber import timber.log.Timber

View file

@ -25,12 +25,12 @@ import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.BackStack
import io.element.android.x.architecture.bindings import io.element.android.libraries.architecture.bindings
import io.element.android.x.architecture.createNode import io.element.android.libraries.architecture.createNode
import io.element.android.x.di.DaggerComponentOwner import io.element.android.libraries.di.DaggerComponentOwner
import io.element.android.x.di.RoomComponent import io.element.android.x.di.RoomComponent
import io.element.android.x.features.messages.MessagesNode import io.element.android.features.messages.MessagesNode
import io.element.android.x.matrix.room.MatrixRoom import io.element.android.libraries.matrix.room.MatrixRoom
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import timber.log.Timber import timber.log.Timber

View file

@ -36,13 +36,13 @@ import com.bumble.appyx.navmodel.backstack.BackStack
import com.bumble.appyx.navmodel.backstack.operation.newRoot import com.bumble.appyx.navmodel.backstack.operation.newRoot
import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.pop
import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.push
import io.element.android.x.architecture.createNode import io.element.android.libraries.architecture.createNode
import io.element.android.x.architecture.presenterConnector import io.element.android.libraries.architecture.presenterConnector
import io.element.android.x.di.DaggerComponentOwner import io.element.android.libraries.di.DaggerComponentOwner
import io.element.android.x.features.rageshake.bugreport.BugReportNode import io.element.android.features.rageshake.bugreport.BugReportNode
import io.element.android.x.matrix.MatrixClient import io.element.android.libraries.matrix.MatrixClient
import io.element.android.x.matrix.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.auth.MatrixAuthenticationService
import io.element.android.x.matrix.core.SessionId import io.element.android.libraries.matrix.core.SessionId
import io.element.android.x.root.RootPresenter import io.element.android.x.root.RootPresenter
import io.element.android.x.root.RootView import io.element.android.x.root.RootView
import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChanged

View file

@ -19,10 +19,10 @@ package io.element.android.x.root
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import io.element.android.x.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.x.features.rageshake.bugreport.BugReportPresenter import io.element.android.features.rageshake.bugreport.BugReportPresenter
import io.element.android.x.features.rageshake.crash.ui.CrashDetectionPresenter import io.element.android.features.rageshake.crash.ui.CrashDetectionPresenter
import io.element.android.x.features.rageshake.detection.RageshakeDetectionPresenter import io.element.android.features.rageshake.detection.RageshakeDetectionPresenter
import javax.inject.Inject import javax.inject.Inject
class RootPresenter @Inject constructor( class RootPresenter @Inject constructor(

View file

@ -17,9 +17,9 @@
package io.element.android.x.root package io.element.android.x.root
import androidx.compose.runtime.Stable import androidx.compose.runtime.Stable
import io.element.android.x.features.rageshake.bugreport.BugReportState import io.element.android.features.rageshake.bugreport.BugReportState
import io.element.android.x.features.rageshake.crash.ui.CrashDetectionState import io.element.android.features.rageshake.crash.ui.CrashDetectionState
import io.element.android.x.features.rageshake.detection.RageshakeDetectionState import io.element.android.features.rageshake.detection.RageshakeDetectionState
@Stable @Stable
data class RootState( data class RootState(

View file

@ -25,11 +25,11 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import io.element.android.x.component.ShowkaseButton import io.element.android.x.component.ShowkaseButton
import io.element.android.x.features.rageshake.crash.ui.CrashDetectionEvents import io.element.android.features.rageshake.crash.ui.CrashDetectionEvents
import io.element.android.x.features.rageshake.crash.ui.CrashDetectionView import io.element.android.features.rageshake.crash.ui.CrashDetectionView
import io.element.android.x.features.rageshake.detection.RageshakeDetectionEvents import io.element.android.features.rageshake.detection.RageshakeDetectionEvents
import io.element.android.x.features.rageshake.detection.RageshakeDetectionView import io.element.android.features.rageshake.detection.RageshakeDetectionView
import io.element.android.x.tests.uitests.openShowkase import io.element.android.tests.uitests.openShowkase
@Composable @Composable
fun RootView( fun RootView(

View file

@ -24,7 +24,7 @@ plugins {
} }
android { android {
namespace = "io.element.android.x.features.login" namespace = "io.element.android.features.login"
} }
anvil { anvil {
@ -32,17 +32,17 @@ anvil {
} }
dependencies { dependencies {
implementation(project(":anvilannotations")) implementation(projects.anvilannotations)
anvil(project(":anvilcodegen")) anvil(projects.anvilcodegen)
implementation(project(":libraries:di")) implementation(projects.libraries.di)
implementation(project(":libraries:core")) implementation(projects.libraries.core)
implementation(project(":libraries:architecture")) implementation(projects.libraries.architecture)
implementation(project(":libraries:matrix")) implementation(projects.libraries.matrix)
implementation(project(":libraries:designsystem")) implementation(projects.libraries.designsystem)
implementation(project(":libraries:elementresources")) implementation(projects.libraries.elementresources)
implementation(project(":libraries:testtags")) implementation(projects.libraries.testtags)
implementation(libs.appyx.core) implementation(libs.appyx.core)
implementation(project(":libraries:ui-strings")) implementation(projects.libraries.uiStrings)
ksp(libs.showkase.processor) ksp(libs.showkase.processor)
testImplementation(libs.test.junit) testImplementation(libs.test.junit)
androidTestImplementation(libs.test.junitext) androidTestImplementation(libs.test.junitext)

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
@ -33,6 +33,6 @@ class ExampleInstrumentedTest {
fun useAppContext() { fun useAppContext() {
// Context of the app under test. // Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("io.element.android.x.features.login.test", appContext.packageName) assertEquals("io.element.android.features.login.test", appContext.packageName)
} }
} }

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.features.login package io.element.android.features.login
import android.os.Parcelable import android.os.Parcelable
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -25,9 +25,9 @@ import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.BackStack
import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.push
import io.element.android.x.architecture.createNode import io.element.android.libraries.architecture.createNode
import io.element.android.x.features.login.changeserver.ChangeServerNode import io.element.android.features.login.changeserver.ChangeServerNode
import io.element.android.x.features.login.root.LoginRootNode import io.element.android.features.login.root.LoginRootNode
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
class LoginFlowNode( class LoginFlowNode(

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.features.login.changeserver package io.element.android.features.login.changeserver
sealed interface ChangeServerEvents { sealed interface ChangeServerEvents {
data class SetServer(val server: String) : ChangeServerEvents data class SetServer(val server: String) : ChangeServerEvents

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -25,9 +25,9 @@ import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.Plugin
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.x.anvilannotations.ContributesNode import io.element.android.anvilannotations.ContributesNode
import io.element.android.x.architecture.presenterConnector import io.element.android.libraries.architecture.presenterConnector
import io.element.android.x.di.AppScope import io.element.android.libraries.di.AppScope
@ContributesNode(AppScope::class) @ContributesNode(AppScope::class)
class ChangeServerNode @AssistedInject constructor( class ChangeServerNode @AssistedInject constructor(

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Composable
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
@ -22,10 +22,10 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import io.element.android.x.architecture.Async import io.element.android.libraries.architecture.Async
import io.element.android.x.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.x.architecture.execute import io.element.android.libraries.architecture.execute
import io.element.android.x.matrix.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.auth.MatrixAuthenticationService
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject

View file

@ -14,9 +14,9 @@
* limitations under the License. * 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( data class ChangeServerState(
val homeserver: String = "", val homeserver: String = "",

View file

@ -16,7 +16,7 @@
@file:OptIn(ExperimentalMaterial3Api::class) @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.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -52,13 +52,13 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import io.element.android.x.architecture.Async import io.element.android.libraries.architecture.Async
import io.element.android.x.core.compose.textFieldState import io.element.android.libraries.core.compose.textFieldState
import io.element.android.x.designsystem.components.VectorIcon import io.element.android.libraries.designsystem.components.VectorIcon
import io.element.android.x.features.login.R import io.element.android.features.login.R
import io.element.android.x.features.login.error.changeServerError import io.element.android.features.login.error.changeServerError
import io.element.android.x.libraries.testtags.TestTags import io.element.android.libraries.testtags.TestTags
import io.element.android.x.libraries.testtags.testTag import io.element.android.libraries.testtags.testTag
@Composable @Composable
fun ChangeServerView( fun ChangeServerView(

View file

@ -14,13 +14,13 @@
* limitations under the License. * 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.runtime.Composable
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import io.element.android.x.core.uri.isValidUrl import io.element.android.libraries.core.uri.isValidUrl
import io.element.android.x.features.login.root.LoginFormState import io.element.android.features.login.root.LoginFormState
import io.element.android.x.ui.strings.R as StringR import io.element.android.libraries.ui.strings.R as StringR
@Composable @Composable
fun loginError( fun loginError(

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.features.login.root package io.element.android.features.login.root
sealed interface LoginRootEvents { sealed interface LoginRootEvents {
object RefreshHomeServer : LoginRootEvents object RefreshHomeServer : LoginRootEvents

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -27,10 +27,10 @@ import com.bumble.appyx.core.plugin.Plugin
import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.core.plugin.plugins
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.x.anvilannotations.ContributesNode import io.element.android.anvilannotations.ContributesNode
import io.element.android.x.architecture.presenterConnector import io.element.android.libraries.architecture.presenterConnector
import io.element.android.x.core.compose.OnLifecycleEvent import io.element.android.libraries.core.compose.OnLifecycleEvent
import io.element.android.x.di.AppScope import io.element.android.libraries.di.AppScope
@ContributesNode(AppScope::class) @ContributesNode(AppScope::class)
class LoginRootNode @AssistedInject constructor( class LoginRootNode @AssistedInject constructor(

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Composable
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
@ -22,8 +22,8 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import io.element.android.x.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.x.matrix.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.auth.MatrixAuthenticationService
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject

View file

@ -16,7 +16,7 @@
@file:OptIn(ExperimentalMaterial3Api::class) @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.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -58,12 +58,12 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import io.element.android.x.core.compose.textFieldState import io.element.android.libraries.core.compose.textFieldState
import io.element.android.x.features.login.error.loginError import io.element.android.features.login.error.loginError
import io.element.android.x.libraries.testtags.TestTags import io.element.android.libraries.testtags.TestTags
import io.element.android.x.libraries.testtags.testTag import io.element.android.libraries.testtags.testTag
import io.element.android.x.matrix.core.SessionId import io.element.android.libraries.matrix.core.SessionId
import io.element.android.x.ui.strings.R as StringR import io.element.android.libraries.ui.strings.R as StringR
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable

View file

@ -14,10 +14,10 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.features.login.root package io.element.android.features.login.root
import android.os.Parcelable import android.os.Parcelable
import io.element.android.x.matrix.core.SessionId import io.element.android.libraries.matrix.core.SessionId
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
data class LoginRootState( data class LoginRootState(

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Assert.assertEquals
import org.junit.Test import org.junit.Test

View file

@ -23,7 +23,7 @@ plugins {
} }
android { android {
namespace = "io.element.android.x.features.logout" namespace = "io.element.android.features.logout"
} }
anvil { anvil {
@ -31,15 +31,15 @@ anvil {
} }
dependencies { dependencies {
implementation(project(":anvilannotations")) implementation(projects.anvilannotations)
anvil(project(":anvilcodegen")) anvil(projects.anvilcodegen)
implementation(project(":libraries:di")) implementation(projects.libraries.di)
implementation(project(":libraries:architecture")) implementation(projects.libraries.architecture)
implementation(project(":libraries:core")) implementation(projects.libraries.core)
implementation(project(":libraries:matrix")) implementation(projects.libraries.matrix)
implementation(project(":libraries:designsystem")) implementation(projects.libraries.designsystem)
implementation(project(":libraries:elementresources")) implementation(projects.libraries.elementresources)
implementation(project(":libraries:ui-strings")) implementation(projects.libraries.uiStrings)
ksp(libs.showkase.processor) ksp(libs.showkase.processor)
testImplementation(libs.test.junit) testImplementation(libs.test.junit)
androidTestImplementation(libs.test.junitext) androidTestImplementation(libs.test.junitext)

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
@ -33,6 +33,6 @@ class ExampleInstrumentedTest {
fun useAppContext() { fun useAppContext() {
// Context of the app under test. // Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("io.element.android.x.features.login.test", appContext.packageName) assertEquals("io.element.android.features.login.test", appContext.packageName)
} }
} }

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.features.logout package io.element.android.features.logout
sealed interface LogoutPreferenceEvents { sealed interface LogoutPreferenceEvents {
object Logout : LogoutPreferenceEvents object Logout : LogoutPreferenceEvents

View file

@ -14,22 +14,23 @@
* limitations under the License. * 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.Composable
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import io.element.android.x.architecture.Async import io.element.android.libraries.architecture.Async
import io.element.android.x.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.x.architecture.execute import io.element.android.libraries.architecture.execute
import io.element.android.x.matrix.MatrixClient import io.element.android.libraries.matrix.MatrixClient
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
class LogoutPreferencePresenter @Inject constructor(private val matrixClient: MatrixClient) : Presenter<LogoutPreferenceState> { class LogoutPreferencePresenter @Inject constructor(private val matrixClient: MatrixClient) :
Presenter<LogoutPreferenceState> {
@Composable @Composable
override fun present(): LogoutPreferenceState { override fun present(): LogoutPreferenceState {

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Icons
import androidx.compose.material.icons.filled.Logout import androidx.compose.material.icons.filled.Logout
@ -24,12 +24,12 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import io.element.android.x.architecture.Async import io.element.android.libraries.architecture.Async
import io.element.android.x.designsystem.components.ProgressDialog import io.element.android.libraries.designsystem.components.ProgressDialog
import io.element.android.x.designsystem.components.dialogs.ConfirmationDialog import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
import io.element.android.x.designsystem.components.preferences.PreferenceCategory import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
import io.element.android.x.designsystem.components.preferences.PreferenceText import io.element.android.libraries.designsystem.components.preferences.PreferenceText
import io.element.android.x.ui.strings.R as StringR import io.element.android.libraries.ui.strings.R as StringR
@Composable @Composable
fun LogoutPreferenceView( fun LogoutPreferenceView(

View file

@ -14,9 +14,9 @@
* limitations under the License. * 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( data class LogoutPreferenceState(
val logoutAction: Async<Unit> = Async.Uninitialized, val logoutAction: Async<Unit> = Async.Uninitialized,

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Assert.assertEquals
import org.junit.Test import org.junit.Test

View file

@ -23,7 +23,7 @@ plugins {
} }
android { android {
namespace = "io.element.android.x.features.messages" namespace = "io.element.android.features.messages"
} }
anvil { anvil {
@ -31,15 +31,15 @@ anvil {
} }
dependencies { dependencies {
implementation(project(":anvilannotations")) implementation(projects.anvilannotations)
anvil(project(":anvilcodegen")) anvil(projects.anvilcodegen)
implementation(project(":libraries:di")) implementation(projects.libraries.di)
implementation(project(":libraries:core")) implementation(projects.libraries.core)
implementation(project(":libraries:architecture")) implementation(projects.libraries.architecture)
implementation(project(":libraries:matrix")) implementation(projects.libraries.matrix)
implementation(project(":libraries:matrixui")) implementation(projects.libraries.matrixui)
implementation(project(":libraries:designsystem")) implementation(projects.libraries.designsystem)
implementation(project(":libraries:textcomposer")) implementation(projects.libraries.textcomposer)
implementation(libs.appyx.core) implementation(libs.appyx.core)
implementation(libs.coil.compose) implementation(libs.coil.compose)
implementation(libs.datetime) implementation(libs.datetime)

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
@ -33,6 +33,6 @@ class ExampleInstrumentedTest {
fun useAppContext() { fun useAppContext() {
// Context of the app under test. // Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("io.element.android.x.features.messages.test", appContext.packageName) assertEquals("io.element.android.features.messages.test", appContext.packageName)
} }
} }

View file

@ -14,10 +14,10 @@
* limitations under the License. * 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.features.messages.actionlist.model.TimelineItemAction
import io.element.android.x.features.messages.timeline.model.TimelineItem import io.element.android.features.messages.timeline.model.TimelineItem
sealed interface MessagesEvents { sealed interface MessagesEvents {
data class HandleAction(val action: TimelineItemAction, val messageEvent: TimelineItem.MessageEvent) : MessagesEvents data class HandleAction(val action: TimelineItemAction, val messageEvent: TimelineItem.MessageEvent) : MessagesEvents

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -25,9 +25,9 @@ import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.Plugin
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.x.anvilannotations.ContributesNode import io.element.android.anvilannotations.ContributesNode
import io.element.android.x.architecture.presenterConnector import io.element.android.libraries.architecture.presenterConnector
import io.element.android.x.di.RoomScope import io.element.android.libraries.di.RoomScope
@ContributesNode(RoomScope::class) @ContributesNode(RoomScope::class)
class MessagesNode @AssistedInject constructor( class MessagesNode @AssistedInject constructor(

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
@ -24,22 +24,22 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import io.element.android.x.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.x.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.x.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.x.features.messages.actionlist.ActionListPresenter import io.element.android.features.messages.actionlist.ActionListPresenter
import io.element.android.x.features.messages.actionlist.model.TimelineItemAction import io.element.android.features.messages.actionlist.model.TimelineItemAction
import io.element.android.x.features.messages.textcomposer.MessageComposerEvents import io.element.android.features.messages.textcomposer.MessageComposerEvents
import io.element.android.x.features.messages.textcomposer.MessageComposerPresenter import io.element.android.features.messages.textcomposer.MessageComposerPresenter
import io.element.android.x.features.messages.textcomposer.MessageComposerState import io.element.android.features.messages.textcomposer.MessageComposerState
import io.element.android.x.features.messages.timeline.TimelineEvents import io.element.android.features.messages.timeline.TimelineEvents
import io.element.android.x.features.messages.timeline.TimelinePresenter import io.element.android.features.messages.timeline.TimelinePresenter
import io.element.android.x.features.messages.timeline.model.TimelineItem import io.element.android.features.messages.timeline.model.TimelineItem
import io.element.android.x.features.messages.timeline.model.content.TimelineItemTextBasedContent import io.element.android.features.messages.timeline.model.content.TimelineItemTextBasedContent
import io.element.android.x.matrix.MatrixClient import io.element.android.libraries.matrix.MatrixClient
import io.element.android.x.matrix.room.MatrixRoom import io.element.android.libraries.matrix.room.MatrixRoom
import io.element.android.x.matrix.ui.MatrixItemHelper import io.element.android.libraries.matrix.ui.MatrixItemHelper
import io.element.android.x.textcomposer.MessageComposerMode import io.element.android.libraries.textcomposer.MessageComposerMode
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import timber.log.Timber import timber.log.Timber

View file

@ -14,14 +14,14 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.features.messages package io.element.android.features.messages
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import io.element.android.x.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.x.features.messages.actionlist.ActionListState import io.element.android.features.messages.actionlist.ActionListState
import io.element.android.x.features.messages.textcomposer.MessageComposerState import io.element.android.features.messages.textcomposer.MessageComposerState
import io.element.android.x.features.messages.timeline.TimelineState import io.element.android.features.messages.timeline.TimelineState
import io.element.android.x.matrix.core.RoomId import io.element.android.libraries.matrix.core.RoomId
@Immutable @Immutable
data class MessagesState( data class MessagesState(

View file

@ -19,7 +19,7 @@
ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class, 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.Column
import androidx.compose.foundation.layout.Row 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.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import io.element.android.x.core.compose.LogCompositions import io.element.android.libraries.core.compose.LogCompositions
import io.element.android.x.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.Avatar
import io.element.android.x.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.x.features.messages.actionlist.ActionListEvents import io.element.android.features.messages.actionlist.ActionListEvents
import io.element.android.x.features.messages.actionlist.ActionListView import io.element.android.features.messages.actionlist.ActionListView
import io.element.android.x.features.messages.actionlist.model.TimelineItemAction import io.element.android.features.messages.actionlist.model.TimelineItemAction
import io.element.android.x.features.messages.timeline.model.TimelineItem import io.element.android.features.messages.timeline.model.TimelineItem
import io.element.android.x.features.messages.textcomposer.MessageComposerView import io.element.android.features.messages.textcomposer.MessageComposerView
import io.element.android.x.features.messages.timeline.TimelineView import io.element.android.features.messages.timeline.TimelineView
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import timber.log.Timber import timber.log.Timber

View file

@ -14,9 +14,9 @@
* limitations under the License. * 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 { sealed interface ActionListEvents {
object Clear : ActionListEvents object Clear : ActionListEvents

View file

@ -14,17 +14,17 @@
* limitations under the License. * 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.Composable
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import io.element.android.x.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.x.features.messages.actionlist.model.TimelineItemAction import io.element.android.features.messages.actionlist.model.TimelineItemAction
import io.element.android.x.features.messages.timeline.model.TimelineItem import io.element.android.features.messages.timeline.model.TimelineItem
import io.element.android.x.features.messages.timeline.model.content.TimelineItemRedactedContent import io.element.android.features.messages.timeline.model.content.TimelineItemRedactedContent
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View file

@ -14,11 +14,11 @@
* limitations under the License. * 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 androidx.compose.runtime.Immutable
import io.element.android.x.features.messages.actionlist.model.TimelineItemAction import io.element.android.features.messages.actionlist.model.TimelineItemAction
import io.element.android.x.features.messages.timeline.model.TimelineItem import io.element.android.features.messages.timeline.model.TimelineItem
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
@Immutable @Immutable

View file

@ -16,7 +16,7 @@
@file:OptIn(ExperimentalMaterialApi::class) @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.clickable
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -41,9 +41,9 @@ import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.x.designsystem.components.VectorIcon import io.element.android.libraries.designsystem.components.VectorIcon
import io.element.android.x.features.messages.actionlist.model.TimelineItemAction import io.element.android.features.messages.actionlist.model.TimelineItemAction
import io.element.android.x.features.messages.timeline.model.TimelineItem import io.element.android.features.messages.timeline.model.TimelineItem
import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View file

@ -14,11 +14,11 @@
* limitations under the License. * 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.annotation.DrawableRes
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import io.element.android.x.designsystem.VectorIcons import io.element.android.libraries.designsystem.VectorIcons
@Immutable @Immutable
sealed class TimelineItemAction( sealed class TimelineItemAction(
@ -26,9 +26,9 @@ sealed class TimelineItemAction(
@DrawableRes val icon: Int, @DrawableRes val icon: Int,
val destructive: Boolean = false val destructive: Boolean = false
) { ) {
object Forward : TimelineItemAction("Forward", VectorIcons.ArrowForward) object Forward : TimelineItemAction("Forward", io.element.android.libraries.designsystem.VectorIcons.ArrowForward)
object Copy : TimelineItemAction("Copy", VectorIcons.Copy) object Copy : TimelineItemAction("Copy", io.element.android.libraries.designsystem.VectorIcons.Copy)
object Redact : TimelineItemAction("Redact", VectorIcons.Delete, destructive = true) object Redact : TimelineItemAction("Redact", io.element.android.libraries.designsystem.VectorIcons.Delete, destructive = true)
object Reply : TimelineItemAction("Reply", VectorIcons.Reply) object Reply : TimelineItemAction("Reply", io.element.android.libraries.designsystem.VectorIcons.Reply)
object Edit : TimelineItemAction("Edit", VectorIcons.Edit) object Edit : TimelineItemAction("Edit", io.element.android.libraries.designsystem.VectorIcons.Edit)
} }

View file

@ -14,9 +14,9 @@
* limitations under the License. * 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 { sealed interface MessageComposerEvents {
object ToggleFullScreenState : MessageComposerEvents object ToggleFullScreenState : MessageComposerEvents

View file

@ -14,18 +14,18 @@
* limitations under the License. * 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.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import io.element.android.x.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.x.core.data.StableCharSequence import io.element.android.libraries.core.data.StableCharSequence
import io.element.android.x.core.data.toStableCharSequence import io.element.android.libraries.core.data.toStableCharSequence
import io.element.android.x.matrix.room.MatrixRoom import io.element.android.libraries.matrix.room.MatrixRoom
import io.element.android.x.textcomposer.MessageComposerMode import io.element.android.libraries.textcomposer.MessageComposerMode
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject

View file

@ -14,11 +14,11 @@
* limitations under the License. * 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 androidx.compose.runtime.Immutable
import io.element.android.x.core.data.StableCharSequence import io.element.android.libraries.core.data.StableCharSequence
import io.element.android.x.textcomposer.MessageComposerMode import io.element.android.libraries.textcomposer.MessageComposerMode
@Immutable @Immutable
data class MessageComposerState( data class MessageComposerState(

View file

@ -14,12 +14,12 @@
* limitations under the License. * 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.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import io.element.android.x.designsystem.LocalIsDarkTheme import io.element.android.libraries.designsystem.LocalIsDarkTheme
import io.element.android.x.textcomposer.TextComposer import io.element.android.libraries.textcomposer.TextComposer
@Composable @Composable
fun MessageComposerView( fun MessageComposerView(

View file

@ -14,9 +14,9 @@
* limitations under the License. * 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 { sealed interface TimelineEvents {
object LoadMore : TimelineEvents object LoadMore : TimelineEvents

View file

@ -14,30 +14,30 @@
* limitations under the License. * 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 androidx.recyclerview.widget.DiffUtil
import io.element.android.x.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.x.features.messages.timeline.diff.CacheInvalidator import io.element.android.features.messages.timeline.diff.CacheInvalidator
import io.element.android.x.features.messages.timeline.diff.MatrixTimelineItemsDiffCallback import io.element.android.features.messages.timeline.diff.MatrixTimelineItemsDiffCallback
import io.element.android.x.features.messages.timeline.model.AggregatedReaction import io.element.android.features.messages.timeline.model.AggregatedReaction
import io.element.android.x.features.messages.timeline.model.MessagesItemGroupPosition import io.element.android.features.messages.timeline.model.MessagesItemGroupPosition
import io.element.android.x.features.messages.timeline.model.TimelineItem import io.element.android.features.messages.timeline.model.TimelineItem
import io.element.android.x.features.messages.timeline.model.TimelineItemReactions import io.element.android.features.messages.timeline.model.TimelineItemReactions
import io.element.android.x.features.messages.timeline.model.content.TimelineItemContent import io.element.android.features.messages.timeline.model.content.TimelineItemContent
import io.element.android.x.features.messages.timeline.model.content.TimelineItemEmoteContent import io.element.android.features.messages.timeline.model.content.TimelineItemEmoteContent
import io.element.android.x.features.messages.timeline.model.content.TimelineItemEncryptedContent import io.element.android.features.messages.timeline.model.content.TimelineItemEncryptedContent
import io.element.android.x.features.messages.timeline.model.content.TimelineItemImageContent import io.element.android.features.messages.timeline.model.content.TimelineItemImageContent
import io.element.android.x.features.messages.timeline.model.content.TimelineItemNoticeContent import io.element.android.features.messages.timeline.model.content.TimelineItemNoticeContent
import io.element.android.x.features.messages.timeline.model.content.TimelineItemRedactedContent import io.element.android.features.messages.timeline.model.content.TimelineItemRedactedContent
import io.element.android.x.features.messages.timeline.model.content.TimelineItemTextContent import io.element.android.features.messages.timeline.model.content.TimelineItemTextContent
import io.element.android.x.features.messages.timeline.model.content.TimelineItemUnknownContent import io.element.android.features.messages.timeline.model.content.TimelineItemUnknownContent
import io.element.android.x.features.messages.timeline.util.invalidateLast import io.element.android.features.messages.timeline.util.invalidateLast
import io.element.android.x.matrix.core.EventId import io.element.android.libraries.matrix.core.EventId
import io.element.android.x.matrix.media.MediaResolver import io.element.android.libraries.matrix.media.MediaResolver
import io.element.android.x.matrix.room.MatrixRoom import io.element.android.libraries.matrix.room.MatrixRoom
import io.element.android.x.matrix.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.timeline.MatrixTimelineItem
import io.element.android.x.matrix.ui.MatrixItemHelper import io.element.android.libraries.matrix.ui.MatrixItemHelper
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
@ -24,14 +24,14 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import io.element.android.x.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.x.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.x.matrix.MatrixClient import io.element.android.libraries.matrix.MatrixClient
import io.element.android.x.matrix.core.EventId import io.element.android.libraries.matrix.core.EventId
import io.element.android.x.matrix.room.MatrixRoom import io.element.android.libraries.matrix.room.MatrixRoom
import io.element.android.x.matrix.timeline.MatrixTimeline import io.element.android.libraries.matrix.timeline.MatrixTimeline
import io.element.android.x.matrix.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.timeline.MatrixTimelineItem
import io.element.android.x.matrix.ui.MatrixItemHelper import io.element.android.libraries.matrix.ui.MatrixItemHelper
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn

View file

@ -14,11 +14,11 @@
* limitations under the License. * 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 androidx.compose.runtime.Immutable
import io.element.android.x.features.messages.timeline.model.TimelineItem import io.element.android.features.messages.timeline.model.TimelineItem
import io.element.android.x.matrix.core.EventId import io.element.android.libraries.matrix.core.EventId
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
@Immutable @Immutable

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement 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.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex import androidx.compose.ui.zIndex
import io.element.android.x.core.compose.PairCombinedPreviewParameter import io.element.android.libraries.core.compose.PairCombinedPreviewParameter
import io.element.android.x.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.Avatar
import io.element.android.x.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.x.features.messages.timeline.model.AggregatedReaction import io.element.android.features.messages.timeline.model.AggregatedReaction
import io.element.android.x.features.messages.timeline.model.MessagesItemGroupPosition import io.element.android.features.messages.timeline.model.MessagesItemGroupPosition
import io.element.android.x.features.messages.timeline.model.TimelineItemGroupPositionProvider import io.element.android.features.messages.timeline.model.TimelineItemGroupPositionProvider
import io.element.android.x.features.messages.timeline.model.TimelineItemReactions import io.element.android.features.messages.timeline.model.TimelineItemReactions
import io.element.android.x.features.messages.timeline.model.TimelineItem import io.element.android.features.messages.timeline.model.TimelineItem
import io.element.android.x.features.messages.timeline.model.content.TimelineItemContent import io.element.android.features.messages.timeline.model.content.TimelineItemContent
import io.element.android.x.features.messages.timeline.model.content.MessagesTimelineItemContentProvider import io.element.android.features.messages.timeline.model.content.MessagesTimelineItemContentProvider
import io.element.android.x.features.messages.timeline.model.content.TimelineItemEncryptedContent import io.element.android.features.messages.timeline.model.content.TimelineItemEncryptedContent
import io.element.android.x.features.messages.timeline.model.content.TimelineItemImageContent import io.element.android.features.messages.timeline.model.content.TimelineItemImageContent
import io.element.android.x.features.messages.timeline.model.content.TimelineItemRedactedContent import io.element.android.features.messages.timeline.model.content.TimelineItemRedactedContent
import io.element.android.x.features.messages.timeline.model.content.TimelineItemTextBasedContent import io.element.android.features.messages.timeline.model.content.TimelineItemTextBasedContent
import io.element.android.x.features.messages.timeline.model.content.TimelineItemUnknownContent import io.element.android.features.messages.timeline.model.content.TimelineItemUnknownContent
import io.element.android.x.features.messages.timeline.components.MessageEventBubble import io.element.android.features.messages.timeline.components.MessageEventBubble
import io.element.android.x.features.messages.timeline.components.TimelineItemReactionsView import io.element.android.features.messages.timeline.components.TimelineItemReactionsView
import io.element.android.x.features.messages.timeline.components.TimelineItemEncryptedView import io.element.android.features.messages.timeline.components.TimelineItemEncryptedView
import io.element.android.x.features.messages.timeline.components.TimelineItemImageView import io.element.android.features.messages.timeline.components.TimelineItemImageView
import io.element.android.x.features.messages.timeline.components.TimelineItemRedactedView import io.element.android.features.messages.timeline.components.TimelineItemRedactedView
import io.element.android.x.features.messages.timeline.components.TimelineItemTextView import io.element.android.features.messages.timeline.components.TimelineItemTextView
import io.element.android.x.features.messages.timeline.components.TimelineItemUnknownView import io.element.android.features.messages.timeline.components.TimelineItemUnknownView
import io.element.android.x.matrix.core.EventId import io.element.android.libraries.matrix.core.EventId
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChanged

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.ExperimentalFoundationApi
import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.combinedClickable
@ -29,14 +29,14 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.x.designsystem.LocalIsDarkTheme import io.element.android.libraries.designsystem.LocalIsDarkTheme
import io.element.android.x.designsystem.MessageHighlightDark import io.element.android.libraries.designsystem.MessageHighlightDark
import io.element.android.x.designsystem.MessageHighlightLight import io.element.android.libraries.designsystem.MessageHighlightLight
import io.element.android.x.designsystem.SystemGrey5Dark import io.element.android.libraries.designsystem.SystemGrey5Dark
import io.element.android.x.designsystem.SystemGrey5Light import io.element.android.libraries.designsystem.SystemGrey5Light
import io.element.android.x.designsystem.SystemGrey6Dark import io.element.android.libraries.designsystem.SystemGrey6Dark
import io.element.android.x.designsystem.SystemGrey6Light import io.element.android.libraries.designsystem.SystemGrey6Light
import io.element.android.x.features.messages.timeline.model.MessagesItemGroupPosition import io.element.android.features.messages.timeline.model.MessagesItemGroupPosition
private val BUBBLE_RADIUS = 16.dp private val BUBBLE_RADIUS = 16.dp

View file

@ -14,13 +14,13 @@
* limitations under the License. * 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.Icons
import androidx.compose.material.icons.filled.Warning import androidx.compose.material.icons.filled.Warning
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier 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 @Composable
fun TimelineItemEncryptedView( fun TimelineItemEncryptedView(

View file

@ -16,7 +16,7 @@
@file:OptIn(ExperimentalFoundationApi::class) @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.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -33,7 +33,7 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import coil.compose.AsyncImage import coil.compose.AsyncImage
import coil.request.ImageRequest 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 @Composable
fun TimelineItemImageView( fun TimelineItemImageView(

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.BorderStroke
import androidx.compose.foundation.layout.Row 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.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.google.accompanist.flowlayout.FlowRow import com.google.accompanist.flowlayout.FlowRow
import io.element.android.x.features.messages.timeline.model.AggregatedReaction import io.element.android.features.messages.timeline.model.AggregatedReaction
import io.element.android.x.features.messages.timeline.model.TimelineItemReactions import io.element.android.features.messages.timeline.model.TimelineItemReactions
@Composable @Composable
fun TimelineItemReactionsView( fun TimelineItemReactionsView(

View file

@ -14,13 +14,13 @@
* limitations under the License. * 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.Icons
import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Delete
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier 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 @Composable
fun TimelineItemRedactedView( fun TimelineItemRedactedView(

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.SpannableString
import android.text.style.URLSpan 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.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.buildAnnotatedString
import androidx.core.text.util.LinkifyCompat import androidx.core.text.util.LinkifyCompat
import io.element.android.x.designsystem.LinkColor import io.element.android.libraries.designsystem.LinkColor
import io.element.android.x.designsystem.components.ClickableLinkText import io.element.android.libraries.designsystem.components.ClickableLinkText
import io.element.android.x.features.messages.timeline.components.html.HtmlDocument import io.element.android.features.messages.timeline.components.html.HtmlDocument
import io.element.android.x.features.messages.timeline.model.content.TimelineItemTextBasedContent import io.element.android.features.messages.timeline.model.content.TimelineItemTextBasedContent
@Composable @Composable
fun TimelineItemTextView( fun TimelineItemTextView(

View file

@ -14,13 +14,13 @@
* limitations under the License. * 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.Icons
import androidx.compose.material.icons.filled.Info import androidx.compose.material.icons.filled.Info
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier 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 @Composable
fun TimelineItemUnknownView( fun TimelineItemUnknownView(

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.background
import androidx.compose.foundation.interaction.MutableInteractionSource 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.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import com.google.accompanist.flowlayout.FlowRow import com.google.accompanist.flowlayout.FlowRow
import io.element.android.x.designsystem.LinkColor import io.element.android.libraries.designsystem.LinkColor
import io.element.android.x.designsystem.components.ClickableLinkText import io.element.android.libraries.designsystem.components.ClickableLinkText
import io.element.android.x.matrix.permalink.PermalinkData import io.element.android.libraries.matrix.permalink.PermalinkData
import io.element.android.x.matrix.permalink.PermalinkParser import io.element.android.libraries.matrix.permalink.PermalinkParser
import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.persistentMapOf
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
import org.jsoup.nodes.Element import org.jsoup.nodes.Element

View file

@ -14,11 +14,11 @@
* limitations under the License. * 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 androidx.recyclerview.widget.ListUpdateCallback
import io.element.android.x.features.messages.timeline.model.TimelineItem import io.element.android.features.messages.timeline.model.TimelineItem
import io.element.android.x.features.messages.timeline.util.invalidateLast import io.element.android.features.messages.timeline.util.invalidateLast
import timber.log.Timber import timber.log.Timber
internal class CacheInvalidator(private val itemStatesCache: MutableList<TimelineItem?>) : internal class CacheInvalidator(private val itemStatesCache: MutableList<TimelineItem?>) :

View file

@ -14,10 +14,10 @@
* limitations under the License. * 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 androidx.recyclerview.widget.DiffUtil
import io.element.android.x.matrix.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.timeline.MatrixTimelineItem
internal class MatrixTimelineItemsDiffCallback( internal class MatrixTimelineItemsDiffCallback(
private val oldList: List<MatrixTimelineItem>, private val oldList: List<MatrixTimelineItem>,

View file

@ -14,12 +14,12 @@
* limitations under the License. * 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.runtime.Immutable
import io.element.android.x.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.x.features.messages.timeline.model.content.TimelineItemContent import io.element.android.features.messages.timeline.model.content.TimelineItemContent
import io.element.android.x.matrix.core.EventId import io.element.android.libraries.matrix.core.EventId
@Immutable @Immutable
sealed interface TimelineItem { sealed interface TimelineItem {

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.runtime.Immutable
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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 import kotlinx.collections.immutable.ImmutableList

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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 androidx.compose.ui.tooling.preview.PreviewParameterProvider
import org.matrix.rustcomponents.sdk.EncryptedMessage import org.matrix.rustcomponents.sdk.EncryptedMessage

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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 import org.jsoup.nodes.Document

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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 import org.matrix.rustcomponents.sdk.EncryptedMessage

View file

@ -14,9 +14,9 @@
* limitations under the License. * 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( data class TimelineItemImageContent(
val body: String, val body: String,

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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 import org.jsoup.nodes.Document

View file

@ -14,6 +14,6 @@
* limitations under the License. * 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 object TimelineItemRedactedContent : TimelineItemContent

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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 import org.jsoup.nodes.Document

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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 import org.jsoup.nodes.Document

View file

@ -14,6 +14,6 @@
* limitations under the License. * 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 object TimelineItemUnknownContent : TimelineItemContent

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.features.messages.timeline.util package io.element.android.features.messages.timeline.util
internal inline fun <reified T> MutableList<T?>.invalidateLast() { internal inline fun <reified T> MutableList<T?>.invalidateLast() {
val indexOfLast = size val indexOfLast = size

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Assert.assertEquals
import org.junit.Test import org.junit.Test

View file

@ -22,16 +22,16 @@ plugins {
} }
android { android {
namespace = "io.element.android.x.features.onboarding" namespace = "io.element.android.features.onboarding"
} }
dependencies { dependencies {
implementation(project(":libraries:core")) implementation(projects.libraries.core)
implementation(project(":libraries:elementresources")) implementation(projects.libraries.elementresources)
implementation(project(":libraries:ui-strings")) implementation(projects.libraries.uiStrings)
implementation(project(":libraries:designsystem")) implementation(projects.libraries.designsystem)
implementation(project(":libraries:architecture")) implementation(projects.libraries.architecture)
implementation(project(":libraries:testtags")) implementation(projects.libraries.testtags)
implementation(libs.accompanist.pager) implementation(libs.accompanist.pager)
implementation(libs.accompanist.pagerindicator) implementation(libs.accompanist.pagerindicator)
implementation(libs.appyx.core) implementation(libs.appyx.core)

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
@ -33,6 +33,6 @@ class ExampleInstrumentedTest {
fun useAppContext() { fun useAppContext() {
// Context of the app under test. // Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("io.element.android.x.features.login.test", appContext.packageName) assertEquals("io.element.android.features.login.test", appContext.packageName)
} }
} }

View file

@ -16,7 +16,7 @@
@file:OptIn(ExperimentalMaterial3Api::class) @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.Image
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@ -49,12 +49,12 @@ import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.HorizontalPager import com.google.accompanist.pager.HorizontalPager
import com.google.accompanist.pager.HorizontalPagerIndicator import com.google.accompanist.pager.HorizontalPagerIndicator
import com.google.accompanist.pager.rememberPagerState 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.x.libraries.testtags.TestTags import io.element.android.libraries.testtags.TestTags
import io.element.android.x.libraries.testtags.testTag import io.element.android.libraries.testtags.testTag
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch 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) @OptIn(ExperimentalPagerApi::class)
@Composable @Composable

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.features.onboarding package io.element.android.features.onboarding
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.annotation.StringRes import androidx.annotation.StringRes

View file

@ -14,10 +14,10 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.features.onboarding package io.element.android.features.onboarding
import androidx.annotation.DrawableRes 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 { class SplashCarouselStateFactory {
fun create(): SplashCarouselState { fun create(): SplashCarouselState {

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Assert.assertEquals
import org.junit.Test import org.junit.Test

View file

@ -24,7 +24,7 @@ plugins {
} }
android { android {
namespace = "io.element.android.x.features.preferences" namespace = "io.element.android.features.preferences"
} }
anvil { anvil {
@ -32,17 +32,17 @@ anvil {
} }
dependencies { dependencies {
implementation(project(":anvilannotations")) implementation(projects.anvilannotations)
anvil(project(":anvilcodegen")) anvil(projects.anvilcodegen)
implementation(project(":libraries:di")) implementation(projects.libraries.di)
implementation(project(":libraries:architecture")) implementation(projects.libraries.architecture)
implementation(project(":libraries:core")) implementation(projects.libraries.core)
implementation(project(":libraries:matrixui")) implementation(projects.libraries.matrixui)
implementation(project(":features:rageshake")) implementation(projects.features.rageshake)
implementation(project(":features:logout")) implementation(projects.features.logout)
implementation(project(":libraries:designsystem")) implementation(projects.libraries.designsystem)
implementation(project(":libraries:elementresources")) implementation(projects.libraries.elementresources)
implementation(project(":libraries:ui-strings")) implementation(projects.libraries.uiStrings)
implementation(libs.datetime) implementation(libs.datetime)
implementation(libs.accompanist.placeholder) implementation(libs.accompanist.placeholder)
testImplementation(libs.test.junit) testImplementation(libs.test.junit)

View file

@ -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)
}
}

View file

@ -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)
}
}

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.features.preferences package io.element.android.features.preferences
import android.os.Parcelable import android.os.Parcelable
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -24,8 +24,8 @@ import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.node.ParentNode
import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.BackStack
import io.element.android.x.architecture.createNode import io.element.android.libraries.architecture.createNode
import io.element.android.x.features.preferences.root.PreferencesRootNode import io.element.android.features.preferences.root.PreferencesRootNode
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
class PreferencesFlowNode( class PreferencesFlowNode(

View file

@ -14,7 +14,7 @@
* limitations under the License. * 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.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -26,9 +26,9 @@ import com.bumble.appyx.core.plugin.Plugin
import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.core.plugin.plugins
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.x.anvilannotations.ContributesNode import io.element.android.anvilannotations.ContributesNode
import io.element.android.x.architecture.presenterConnector import io.element.android.libraries.architecture.presenterConnector
import io.element.android.x.di.SessionScope import io.element.android.libraries.di.SessionScope
@ContributesNode(SessionScope::class) @ContributesNode(SessionScope::class)
class PreferencesRootNode @AssistedInject constructor( class PreferencesRootNode @AssistedInject constructor(

Some files were not shown because too many files have changed in this diff Show more