Move some code to 'architecture' module

This commit is contained in:
ganfra 2023-01-04 21:09:59 +01:00
parent 2c19f97e15
commit 7fc69a70da
38 changed files with 48 additions and 67 deletions

View file

@ -116,7 +116,7 @@ class ContributesViewModelCodeGenerator : CodeGenerator {
} }
companion object { companion object {
private val assistedViewModelFactoryFqName = FqName("io.element.android.x.core.di.AssistedViewModelFactory") private val assistedViewModelFactoryFqName = FqName("io.element.android.x.architecture.viewmodel.AssistedViewModelFactory")
private val viewModelKeyFqName = FqName("io.element.android.x.core.di.ViewModelKey") private val viewModelKeyFqName = FqName("io.element.android.x.architecture.viewmodel.ViewModelKey")
} }
} }

View file

@ -137,6 +137,7 @@ dependencies {
implementation(project(":libraries:designsystem")) implementation(project(":libraries:designsystem"))
implementation(project(":libraries:matrix")) implementation(project(":libraries:matrix"))
implementation(project(":libraries:core")) implementation(project(":libraries:core"))
implementation(project(":libraries:architecture"))
implementation(project(":features:onboarding")) implementation(project(":features:onboarding"))
implementation(project(":features:login")) implementation(project(":features:login"))
implementation(project(":features:roomlist")) implementation(project(":features:roomlist"))

View file

@ -2,8 +2,8 @@ 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.architecture.bindings
import io.element.android.x.core.di.DaggerComponentOwner import io.element.android.x.core.di.DaggerComponentOwner
import io.element.android.x.core.di.bindings
import io.element.android.x.di.AppBindings import io.element.android.x.di.AppBindings
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

View file

@ -16,8 +16,8 @@ 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 com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
import io.element.android.x.architecture.bindings
import io.element.android.x.core.di.DaggerComponentOwner import io.element.android.x.core.di.DaggerComponentOwner
import io.element.android.x.core.di.bindings
import io.element.android.x.designsystem.ElementXTheme import io.element.android.x.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

@ -6,7 +6,7 @@ import com.airbnb.mvrx.MavericksViewModelFactory
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.x.anvilannotations.ContributesViewModel import io.element.android.x.anvilannotations.ContributesViewModel
import io.element.android.x.core.di.daggerMavericksViewModelFactory import io.element.android.x.architecture.viewmodel.daggerMavericksViewModelFactory
import io.element.android.x.di.AppScope import io.element.android.x.di.AppScope
import io.element.android.x.di.SessionComponentsOwner import io.element.android.x.di.SessionComponentsOwner
import io.element.android.x.matrix.Matrix import io.element.android.x.matrix.Matrix

View file

@ -4,7 +4,7 @@ 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.core.di.DaggerMavericksBindings import io.element.android.x.architecture.viewmodel.DaggerMavericksBindings
@SingleIn(AppScope::class) @SingleIn(AppScope::class)
@MergeComponent(AppScope::class) @MergeComponent(AppScope::class)

View file

@ -4,8 +4,8 @@ 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.core.di.DaggerMavericksBindings import io.element.android.x.architecture.viewmodel.DaggerMavericksBindings
import io.element.android.x.core.di.NodeFactoriesBindings import io.element.android.x.architecture.NodeFactoriesBindings
import io.element.android.x.matrix.MatrixClient import io.element.android.x.matrix.MatrixClient
@SingleIn(SessionScope::class) @SingleIn(SessionScope::class)

View file

@ -1,7 +1,7 @@
package io.element.android.x.di package io.element.android.x.di
import android.content.Context import android.content.Context
import io.element.android.x.core.di.bindings import io.element.android.x.architecture.bindings
import io.element.android.x.matrix.MatrixClient import io.element.android.x.matrix.MatrixClient
import io.element.android.x.matrix.core.SessionId import io.element.android.x.matrix.core.SessionId
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap

View file

@ -5,7 +5,7 @@ import androidx.startup.Initializer
import coil.Coil import coil.Coil
import coil.ImageLoader import coil.ImageLoader
import coil.ImageLoaderFactory import coil.ImageLoaderFactory
import io.element.android.x.core.di.bindings import io.element.android.x.architecture.bindings
import io.element.android.x.di.AppBindings import io.element.android.x.di.AppBindings
class CoilInitializer : Initializer<Unit> { class CoilInitializer : Initializer<Unit> {

View file

@ -10,8 +10,8 @@ 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.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.core.di.createNode import io.element.android.x.architecture.createNode
import io.element.android.x.core.di.viewModelSupportNode import io.element.android.x.architecture.viewmodel.viewModelSupportNode
import io.element.android.x.features.messages.MessagesScreen import io.element.android.x.features.messages.MessagesScreen
import io.element.android.x.features.roomlist.RoomListNode import io.element.android.x.features.roomlist.RoomListNode
import io.element.android.x.matrix.core.RoomId import io.element.android.x.matrix.core.RoomId

View file

@ -10,7 +10,7 @@ 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.replace import com.bumble.appyx.navmodel.backstack.operation.replace
import io.element.android.x.core.di.viewModelSupportNode import io.element.android.x.architecture.viewmodel.viewModelSupportNode
import io.element.android.x.features.login.node.LoginFlowNode import io.element.android.x.features.login.node.LoginFlowNode
import io.element.android.x.features.onboarding.OnBoardingScreen import io.element.android.x.features.onboarding.OnBoardingScreen
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize

View file

@ -19,6 +19,7 @@ dependencies {
anvil(project(":anvilcodegen")) anvil(project(":anvilcodegen"))
implementation(project(":libraries:di")) implementation(project(":libraries:di"))
implementation(project(":libraries:core")) implementation(project(":libraries:core"))
implementation(project(":libraries:architecture"))
implementation(project(":libraries:matrix")) implementation(project(":libraries:matrix"))
implementation(project(":libraries:designsystem")) implementation(project(":libraries:designsystem"))
implementation(project(":libraries:elementresources")) implementation(project(":libraries:elementresources"))

View file

@ -8,7 +8,7 @@ import com.airbnb.mvrx.Uninitialized
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.x.anvilannotations.ContributesViewModel import io.element.android.x.anvilannotations.ContributesViewModel
import io.element.android.x.core.di.daggerMavericksViewModelFactory import io.element.android.x.architecture.viewmodel.daggerMavericksViewModelFactory
import io.element.android.x.di.AppScope import io.element.android.x.di.AppScope
import io.element.android.x.matrix.Matrix import io.element.android.x.matrix.Matrix
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn

View file

@ -6,7 +6,7 @@ import com.airbnb.mvrx.Uninitialized
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.x.anvilannotations.ContributesViewModel import io.element.android.x.anvilannotations.ContributesViewModel
import io.element.android.x.core.di.daggerMavericksViewModelFactory import io.element.android.x.architecture.viewmodel.daggerMavericksViewModelFactory
import io.element.android.x.di.AppScope import io.element.android.x.di.AppScope
import io.element.android.x.matrix.Matrix import io.element.android.x.matrix.Matrix
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View file

@ -10,7 +10,7 @@ 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.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.core.di.viewModelSupportNode import io.element.android.x.architecture.viewmodel.viewModelSupportNode
import io.element.android.x.features.login.LoginScreen import io.element.android.x.features.login.LoginScreen
import io.element.android.x.features.login.changeserver.ChangeServerScreen import io.element.android.x.features.login.changeserver.ChangeServerScreen
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize

View file

@ -18,6 +18,7 @@ dependencies {
anvil(project(":anvilcodegen")) anvil(project(":anvilcodegen"))
implementation(project(":libraries:di")) implementation(project(":libraries:di"))
implementation(project(":libraries:core")) implementation(project(":libraries:core"))
implementation(project(":libraries:architecture"))
implementation(project(":libraries:matrix")) implementation(project(":libraries:matrix"))
implementation(project(":libraries:designsystem")) implementation(project(":libraries:designsystem"))
implementation(project(":libraries:textcomposer")) implementation(project(":libraries:textcomposer"))

View file

@ -6,10 +6,9 @@ import com.airbnb.mvrx.Uninitialized
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.x.anvilannotations.ContributesViewModel import io.element.android.x.anvilannotations.ContributesViewModel
import io.element.android.x.core.di.daggerMavericksViewModelFactory import io.element.android.x.architecture.viewmodel.daggerMavericksViewModelFactory
import io.element.android.x.designsystem.components.avatar.AvatarData import io.element.android.x.designsystem.components.avatar.AvatarData
import io.element.android.x.designsystem.components.avatar.AvatarSize import io.element.android.x.designsystem.components.avatar.AvatarSize
import io.element.android.x.di.AppScope
import io.element.android.x.di.SessionScope import io.element.android.x.di.SessionScope
import io.element.android.x.features.messages.model.MessagesItemAction import io.element.android.x.features.messages.model.MessagesItemAction
import io.element.android.x.features.messages.model.MessagesItemActionsSheetState import io.element.android.x.features.messages.model.MessagesItemActionsSheetState
@ -17,7 +16,6 @@ import io.element.android.x.features.messages.model.MessagesTimelineItemState
import io.element.android.x.features.messages.model.MessagesViewState import io.element.android.x.features.messages.model.MessagesViewState
import io.element.android.x.features.messages.model.content.MessagesTimelineItemRedactedContent import io.element.android.x.features.messages.model.content.MessagesTimelineItemRedactedContent
import io.element.android.x.features.messages.model.content.MessagesTimelineItemTextBasedContent import io.element.android.x.features.messages.model.content.MessagesTimelineItemTextBasedContent
import io.element.android.x.matrix.Matrix
import io.element.android.x.matrix.MatrixClient import io.element.android.x.matrix.MatrixClient
import io.element.android.x.matrix.media.MediaResolver import io.element.android.x.matrix.media.MediaResolver
import io.element.android.x.matrix.timeline.MatrixTimeline import io.element.android.x.matrix.timeline.MatrixTimeline

View file

@ -5,8 +5,8 @@ import com.airbnb.mvrx.MavericksViewModelFactory
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.x.anvilannotations.ContributesViewModel import io.element.android.x.anvilannotations.ContributesViewModel
import io.element.android.x.architecture.viewmodel.daggerMavericksViewModelFactory
import io.element.android.x.core.data.StableCharSequence import io.element.android.x.core.data.StableCharSequence
import io.element.android.x.core.di.daggerMavericksViewModelFactory
import io.element.android.x.di.SessionScope import io.element.android.x.di.SessionScope
import io.element.android.x.matrix.MatrixClient import io.element.android.x.matrix.MatrixClient

View file

@ -11,6 +11,7 @@ dependencies {
implementation(project(":libraries:core")) implementation(project(":libraries:core"))
implementation(project(":libraries:elementresources")) implementation(project(":libraries:elementresources"))
implementation(project(":libraries:designsystem")) implementation(project(":libraries:designsystem"))
implementation(project(":libraries:architecture"))
implementation(libs.mavericks.compose) implementation(libs.mavericks.compose)
implementation(libs.accompanist.pager) implementation(libs.accompanist.pager)
implementation(libs.accompanist.pagerindicator) implementation(libs.accompanist.pagerindicator)

View file

@ -17,7 +17,7 @@ dependencies {
anvil(project(":anvilcodegen")) anvil(project(":anvilcodegen"))
implementation(project(":libraries:di")) implementation(project(":libraries:di"))
implementation(project(":libraries:core")) implementation(project(":libraries:core"))
implementation(project(":libraries:presentation")) implementation(project(":libraries:architecture"))
implementation(project(":libraries:matrix")) implementation(project(":libraries:matrix"))
implementation(project(":libraries:designsystem")) implementation(project(":libraries:designsystem"))
implementation(libs.appyx.core) implementation(libs.appyx.core)

View file

@ -4,8 +4,8 @@ import com.squareup.anvil.annotations.ContributesTo
import dagger.Binds import dagger.Binds
import dagger.Module import dagger.Module
import dagger.multibindings.IntoMap import dagger.multibindings.IntoMap
import io.element.android.x.core.di.AssistedNodeFactory import io.element.android.x.architecture.AssistedNodeFactory
import io.element.android.x.core.di.NodeKey import io.element.android.x.architecture.NodeKey
import io.element.android.x.di.SessionScope import io.element.android.x.di.SessionScope
@Module @Module

View file

@ -11,10 +11,10 @@ import com.bumble.appyx.core.plugin.plugins
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import io.element.android.x.core.di.AssistedNodeFactory import io.element.android.x.architecture.AssistedNodeFactory
import io.element.android.x.features.roomlist.model.RoomListEvents import io.element.android.x.features.roomlist.model.RoomListEvents
import io.element.android.x.matrix.core.RoomId import io.element.android.x.matrix.core.RoomId
import io.element.android.x.presentation.presenterConnector import io.element.android.x.architecture.presenterConnector
class RoomListNode @AssistedInject constructor( class RoomListNode @AssistedInject constructor(
@Assisted buildContext: BuildContext, @Assisted buildContext: BuildContext,

View file

@ -20,7 +20,7 @@ import io.element.android.x.features.roomlist.model.RoomListState
import io.element.android.x.matrix.MatrixClient import io.element.android.x.matrix.MatrixClient
import io.element.android.x.matrix.media.MediaResolver import io.element.android.x.matrix.media.MediaResolver
import io.element.android.x.matrix.room.RoomSummary import io.element.android.x.matrix.room.RoomSummary
import io.element.android.x.presentation.Presenter import io.element.android.x.architecture.Presenter
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList

View file

@ -1,5 +1,5 @@
plugins { plugins {
id("io.element.android-library") id("io.element.android-compose-library")
alias(libs.plugins.molecule) alias(libs.plugins.molecule)
} }
@ -8,7 +8,9 @@ android {
} }
dependencies { dependencies {
api(project(":libraries:core"))
api(libs.dagger) api(libs.dagger)
api(libs.appyx.core) api(libs.appyx.core)
api(libs.androidx.lifecycle.runtime) api(libs.androidx.lifecycle.runtime)
api(libs.mavericks.compose)
} }

View file

@ -1,4 +1,4 @@
package io.element.android.x.core.di package io.element.android.x.architecture
import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.Node

View file

@ -1,30 +1,12 @@
package io.element.android.x.core.di package io.element.android.x.architecture
import android.content.Context import android.content.Context
import android.content.ContextWrapper import android.content.ContextWrapper
import androidx.fragment.app.Fragment
import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.Node
import io.element.android.x.core.di.DaggerComponentOwner
/**
* Use this to get the Dagger "Bindings" for your module. Bindings are used if you need to directly interact with a dagger component such as:
* * an inject function: `inject(node: MyNode)`
* * an explicit getter: `fun myClass(): MyClass`
*
* Anvil will make your Dagger component implement these bindings so that you can call any of these functions on an instance of your component.
*
* [bindings] will walk up the Node/Activity hierarchy and check for [DaggerComponentOwner] to see if any of its components implement the
* specified bindings. Most of the time this will "just work" and you don't have to think about it.
*
* For example, if your class has @Inject properties:
* 1) Create an bindings interface such as `YourModuleBindings`
* 1) Add an inject function like `fun inject(yourClass: YourClass)`
* 2) Contribute your interface to the correct component via `@ContributesTo(AppScope::class)`.
* 3) Call bindings<YourModuleBindings>().inject(this).
*/
inline fun <reified T : Any> Context.bindings() = bindings(T::class.java)
inline fun <reified T : Any> Node.bindings() = bindings(T::class.java) inline fun <reified T : Any> Node.bindings() = bindings(T::class.java)
inline fun <reified T : Any> Context.bindings() = bindings(T::class.java)
/** Use no-arg extension function instead: [Context.bindings] */ /** Use no-arg extension function instead: [Context.bindings] */
fun <T : Any> Context.bindings(klass: Class<T>): T { fun <T : Any> Context.bindings(klass: Class<T>): T {

View file

@ -1,4 +1,4 @@
package io.element.android.x.core.di package io.element.android.x.architecture
import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.Node

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.core.di package io.element.android.x.architecture
import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.Node
import dagger.MapKey import dagger.MapKey

View file

@ -1,4 +1,4 @@
package io.element.android.x.presentation package io.element.android.x.architecture
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import app.cash.molecule.AndroidUiDispatcher import app.cash.molecule.AndroidUiDispatcher

View file

@ -1,4 +1,4 @@
package io.element.android.x.presentation package io.element.android.x.architecture
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow

View file

@ -1,4 +1,4 @@
package io.element.android.x.core.di package io.element.android.x.architecture.viewmodel
import com.airbnb.mvrx.MavericksState import com.airbnb.mvrx.MavericksState
import com.airbnb.mvrx.MavericksViewModel import com.airbnb.mvrx.MavericksViewModel

View file

@ -1,10 +1,10 @@
package io.element.android.x.core.di package io.element.android.x.architecture.viewmodel
import com.airbnb.mvrx.FragmentViewModelContext
import com.airbnb.mvrx.MavericksState import com.airbnb.mvrx.MavericksState
import com.airbnb.mvrx.MavericksViewModel import com.airbnb.mvrx.MavericksViewModel
import com.airbnb.mvrx.MavericksViewModelFactory import com.airbnb.mvrx.MavericksViewModelFactory
import com.airbnb.mvrx.ViewModelContext import com.airbnb.mvrx.ViewModelContext
import io.element.android.x.architecture.bindings
/** /**
* To connect Mavericks ViewModel creation with Anvil's dependency injection, add the following to your MavericksViewModel. * To connect Mavericks ViewModel creation with Anvil's dependency injection, add the following to your MavericksViewModel.

View file

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package io.element.android.x.core.di package io.element.android.x.architecture.viewmodel
import com.airbnb.mvrx.MavericksViewModel import com.airbnb.mvrx.MavericksViewModel
import dagger.MapKey import dagger.MapKey

View file

@ -1,4 +1,4 @@
package io.element.android.x.core.di package io.element.android.x.architecture.viewmodel
import android.os.Bundle import android.os.Bundle
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable

View file

@ -5,9 +5,3 @@ plugins {
android { android {
namespace = "io.element.android.x.core" namespace = "io.element.android.x.core"
} }
dependencies {
api(libs.mavericks.compose)
api(libs.dagger)
api(libs.appyx.core)
}

View file

@ -15,6 +15,7 @@ anvil {
dependencies { dependencies {
api(project(":libraries:rustsdk")) api(project(":libraries:rustsdk"))
implementation(project(":libraries:di")) implementation(project(":libraries:di"))
implementation(libs.dagger)
implementation(project(":libraries:core")) implementation(project(":libraries:core"))
implementation("net.java.dev.jna:jna:5.12.1@aar") implementation("net.java.dev.jna:jna:5.12.1@aar")
implementation(libs.coil.compose) implementation(libs.coil.compose)

View file

@ -31,4 +31,4 @@ include(":libraries:designsystem")
include(":libraries:di") include(":libraries:di")
include(":anvilannotations") include(":anvilannotations")
include(":anvilcodegen") include(":anvilcodegen")
include(":libraries:presentation") include(":libraries:architecture")