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 {
private val assistedViewModelFactoryFqName = FqName("io.element.android.x.core.di.AssistedViewModelFactory")
private val viewModelKeyFqName = FqName("io.element.android.x.core.di.ViewModelKey")
private val assistedViewModelFactoryFqName = FqName("io.element.android.x.architecture.viewmodel.AssistedViewModelFactory")
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:matrix"))
implementation(project(":libraries:core"))
implementation(project(":libraries:architecture"))
implementation(project(":features:onboarding"))
implementation(project(":features:login"))
implementation(project(":features:roomlist"))

View File

@@ -2,8 +2,8 @@ package io.element.android.x
import android.app.Application
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.bindings
import io.element.android.x.di.AppBindings
import io.element.android.x.di.AppComponent
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.integrationpoint.NodeComponentActivity
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.bindings
import io.element.android.x.designsystem.ElementXTheme
import io.element.android.x.di.AppBindings
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.AssistedInject
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.SessionComponentsOwner
import io.element.android.x.matrix.Matrix

View File

@@ -4,7 +4,7 @@ import android.content.Context
import com.squareup.anvil.annotations.MergeComponent
import dagger.BindsInstance
import dagger.Component
import io.element.android.x.core.di.DaggerMavericksBindings
import io.element.android.x.architecture.viewmodel.DaggerMavericksBindings
@SingleIn(AppScope::class)
@MergeComponent(AppScope::class)

View File

@@ -4,8 +4,8 @@ import com.squareup.anvil.annotations.ContributesTo
import com.squareup.anvil.annotations.MergeSubcomponent
import dagger.BindsInstance
import dagger.Subcomponent
import io.element.android.x.core.di.DaggerMavericksBindings
import io.element.android.x.core.di.NodeFactoriesBindings
import io.element.android.x.architecture.viewmodel.DaggerMavericksBindings
import io.element.android.x.architecture.NodeFactoriesBindings
import io.element.android.x.matrix.MatrixClient
@SingleIn(SessionScope::class)

View File

@@ -1,7 +1,7 @@
package io.element.android.x.di
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.core.SessionId
import java.util.concurrent.ConcurrentHashMap

View File

@@ -5,7 +5,7 @@ import androidx.startup.Initializer
import coil.Coil
import coil.ImageLoader
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
class CoilInitializer : Initializer<Unit> {
@@ -37,4 +37,4 @@ private class ElementImageLoaderFactory(
}
}
}

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.operation.pop
import com.bumble.appyx.navmodel.backstack.operation.push
import io.element.android.x.core.di.createNode
import io.element.android.x.core.di.viewModelSupportNode
import io.element.android.x.architecture.createNode
import io.element.android.x.architecture.viewmodel.viewModelSupportNode
import io.element.android.x.features.messages.MessagesScreen
import io.element.android.x.features.roomlist.RoomListNode
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.navmodel.backstack.BackStack
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.onboarding.OnBoardingScreen
import kotlinx.parcelize.Parcelize

View File

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

View File

@@ -8,7 +8,7 @@ import com.airbnb.mvrx.Uninitialized
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
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.matrix.Matrix
import kotlinx.coroutines.flow.launchIn

View File

@@ -6,7 +6,7 @@ import com.airbnb.mvrx.Uninitialized
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
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.matrix.Matrix
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.operation.pop
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.changeserver.ChangeServerScreen
import kotlinx.parcelize.Parcelize

View File

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

View File

@@ -6,10 +6,9 @@ import com.airbnb.mvrx.Uninitialized
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
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.AvatarSize
import io.element.android.x.di.AppScope
import io.element.android.x.di.SessionScope
import io.element.android.x.features.messages.model.MessagesItemAction
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.content.MessagesTimelineItemRedactedContent
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.media.MediaResolver
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.AssistedInject
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.di.daggerMavericksViewModelFactory
import io.element.android.x.di.SessionScope
import io.element.android.x.matrix.MatrixClient

View File

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

View File

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

View File

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

View File

@@ -11,10 +11,10 @@ import com.bumble.appyx.core.plugin.plugins
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
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.matrix.core.RoomId
import io.element.android.x.presentation.presenterConnector
import io.element.android.x.architecture.presenterConnector
class RoomListNode @AssistedInject constructor(
@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.media.MediaResolver
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.persistentListOf
import kotlinx.collections.immutable.toImmutableList

View File

@@ -1,5 +1,5 @@
plugins {
id("io.element.android-library")
id("io.element.android-compose-library")
alias(libs.plugins.molecule)
}
@@ -8,7 +8,9 @@ android {
}
dependencies {
api(project(":libraries:core"))
api(libs.dagger)
api(libs.appyx.core)
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.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.ContextWrapper
import androidx.fragment.app.Fragment
import com.bumble.appyx.core.node.Node
/**
* 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)
import io.element.android.x.core.di.DaggerComponentOwner
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] */
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.node.Node

View File

@@ -14,7 +14,7 @@
* 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 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 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 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.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.MavericksViewModel
import com.airbnb.mvrx.MavericksViewModelFactory
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.

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package io.element.android.x.core.di
package io.element.android.x.architecture.viewmodel
import com.airbnb.mvrx.MavericksViewModel
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 androidx.compose.runtime.Composable

View File

@@ -5,9 +5,3 @@ plugins {
android {
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 {
api(project(":libraries:rustsdk"))
implementation(project(":libraries:di"))
implementation(libs.dagger)
implementation(project(":libraries:core"))
implementation("net.java.dev.jna:jna:5.12.1@aar")
implementation(libs.coil.compose)

View File

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