Skip to content

Commit

Permalink
improve di
Browse files Browse the repository at this point in the history
  • Loading branch information
steadymoka committed Nov 24, 2020
1 parent ea5d93f commit 2fe8a93
Show file tree
Hide file tree
Showing 22 changed files with 127 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
Expand All @@ -25,11 +22,12 @@ import land.moka.kmm.androidApp.ui.profile.adapter.OverviewAdapter
import land.moka.kmm.androidApp.ui.profile.adapter.RepositoryAdapter
import land.moka.kmm.androidApp.util.load
import land.moka.kmm.shared.app.viewmodel.profile.ProfileViewModel
import land.moka.kmm.shared.base.BaseScopedFragment
import land.moka.kmm.shared.di.scope.ProfileContainer
import land.moka.kmm.shared.model.Repository
import moka.land.base.*

class ProfileLayout : Fragment() {
class ProfileLayout : BaseScopedFragment(_Application.container, ProfileContainer) {

private val _view by lazy { LayoutProfileBinding.inflate(layoutInflater) }

Expand All @@ -41,7 +39,6 @@ class ProfileLayout : Fragment() {
@InternalCoroutinesApi
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
ProfileContainer.onCreate(_Application.container)

initLayout()
bindEvent()
Expand All @@ -53,11 +50,6 @@ class ProfileLayout : Fragment() {
return _view.root
}

override fun onDestroy() {
ProfileContainer.onDestroy(_Application.container)
super.onDestroy()
}

private fun initLayout() {
viewModel.selectTab(ProfileViewModel.Tab.Overview)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,24 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import land.moka.androidApp.databinding.LayoutRepositoryBinding
import land.moka.kmm.androidApp._Application
import land.moka.kmm.shared.base.BaseScopedFragment
import land.moka.kmm.shared.di.scope.RepositoryContainer

class RepositoryLayout : Fragment() {
class RepositoryLayout : BaseScopedFragment(_Application.container, RepositoryContainer) {

private val _view by lazy { LayoutRepositoryBinding.inflate(layoutInflater) }
private val viewModel by lazy { _Application.container.getContainer<RepositoryContainer>().viewModel }
private val args: RepositoryLayoutArgs by navArgs()

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
RepositoryContainer.onCreate(_Application.container)

initLayout()
bindEvent()
Expand All @@ -34,11 +33,6 @@ class RepositoryLayout : Fragment() {
return _view.root
}

override fun onDestroy() {
RepositoryContainer.onDestroy(_Application.container)
super.onDestroy()
}

private fun initLayout() {
_view.textViewName.text = " "
_view.textViewDescription.text = " "
Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:4.1.0-rc03")
classpath("com.android.tools.build:gradle:4.1.1")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.10")
classpath("androidx.navigation:navigation-safe-args-gradle-plugin:2.3.0")
classpath("com.codingfeline.buildkonfig:buildkonfig-gradle-plugin:0.7.0")
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package land.moka.kmm.shared.base

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import land.moka.kmm.shared.lib.log.Log

open class BaseFragment : Fragment() {

private val TAG = javaClass.simpleName

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
Log.print("$TAG onCreateView is called 🐳")
return super.onCreateView(inflater, container, savedInstanceState)
}

override fun onResume() {
super.onResume()
Log.print("$TAG onResume is called 🐳")
}

override fun onStop() {
super.onStop()
Log.print("$TAG onStop is called 🐳")
}

override fun onDestroyView() {
super.onDestroyView()
Log.print("$TAG onDestroyView is called 🐳")
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package land.moka.kmm.shared.base

import android.os.Bundle
import androidx.fragment.app.FragmentActivity
import land.moka.kmm.shared.di.AppContainer
import land.moka.kmm.shared.di.scope.index.BaseScope

open class BaseScopedActivity(var container: AppContainer, var scope: BaseScope) : FragmentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
scope.create(container)
super.onCreate(savedInstanceState)
}

override fun onDestroy() {
scope.destroy(container)
super.onDestroy()
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package land.moka.kmm.shared.base

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import land.moka.kmm.shared.di.AppContainer
import land.moka.kmm.shared.di.scope.index.BaseScope

open class BaseScopedFragment(var container: AppContainer, var scope: BaseScope) : BaseFragment() {

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
scope.create(this.container)
return super.onCreateView(inflater, container, savedInstanceState)
}

override fun onDestroyView() {
scope.destroy(this.container)
super.onDestroyView()
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package land.moka.kmm.shared.lib.util
package land.moka.kmm.shared.lib

import android.annotation.SuppressLint
import android.app.Activity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import android.util.Log
actual class Log {

actual companion object {
actual fun e(message: String) {
Log.wtf("ERROR", message)
actual fun print(message: String) {
Log.wtf("✏️✏️", message)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package land.moka.kmm.shared.lib.preferecne

import android.content.Context
import android.content.SharedPreferences
import land.moka.kmm.shared.lib.util.application
import land.moka.kmm.shared.lib.application

actual class Preference {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package land.moka.kmm.shared.di

import land.moka.kmm.shared.di.module.databaseModule
import land.moka.kmm.shared.di.module.appModule
import land.moka.kmm.shared.di.module.networkModule
import land.moka.kmm.shared.di.module.viewModelModules
import land.moka.kmm.shared.di.scope.index.Container
import org.kodein.di.DI
import org.kodein.di.direct
import org.kodein.di.instance

class AppContainer private constructor() {

private val di = DI {
import(networkModule)
import(databaseModule)
import(appModule)
import(viewModelModules)
}
val directDI = di.direct
Expand All @@ -22,10 +23,22 @@ class AppContainer private constructor() {
// setup container
}

/**
* for android build
*/

inline fun <reified T : Any> get(): T {
return directDI.instance()
}

inline fun <reified T : Container> getContainer(): T { // for android build
return childContainers[T::class.simpleName] as? T ?: throw Exception("ChildContainer::onCreate(container: Container) must be called 👻")
}

/**
* for iOS build
*/

fun <T : Container> getContainer(name: String): T { // for iOS build
return childContainers[name] as? T ?: throw Exception("ChildContainer::onCreate(container: Container) must be called 👻")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import org.kodein.di.DI
import org.kodein.di.bind
import org.kodein.di.singleton

val databaseModule = DI.Module("database") {
val appModule = DI.Module("app") {
bind<Preference>() with singleton {
Preference()
Preference("moka-pref")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@ package land.moka.kmm.shared.di.scope
import land.moka.kmm.shared.app.viewmodel.profile.ProfileViewModel
import land.moka.kmm.shared.di.AppContainer
import land.moka.kmm.shared.di.scope.index.Container
import land.moka.kmm.shared.di.scope.index.Scope
import land.moka.kmm.shared.di.scope.index.BaseScope
import org.kodein.di.instance

class ProfileContainer(
var viewModel: ProfileViewModel
) : Container {

companion object : Scope {
companion object : BaseScope {

override fun onCreate(container: AppContainer) {
override fun create(container: AppContainer) {
container.childContainers[ProfileContainer::class.simpleName ?: "ProfileContainer"] = ProfileContainer(container.directDI.instance())
}

override fun onDestroy(container: AppContainer) {
override fun destroy(container: AppContainer) {
container.childContainers.remove(ProfileContainer::class.simpleName ?: "ProfileContainer")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@ package land.moka.kmm.shared.di.scope
import land.moka.kmm.shared.app.viewmodel.repository.RepositoryViewModel
import land.moka.kmm.shared.di.AppContainer
import land.moka.kmm.shared.di.scope.index.Container
import land.moka.kmm.shared.di.scope.index.Scope
import land.moka.kmm.shared.di.scope.index.BaseScope
import org.kodein.di.instance

class RepositoryContainer(
var viewModel: RepositoryViewModel
) : Container {

companion object : Scope {
companion object : BaseScope {

override fun onCreate(container: AppContainer) {
override fun create(container: AppContainer) {
container.childContainers[RepositoryContainer::class.simpleName ?: "RepositoryContainer"] = RepositoryContainer(container.directDI.instance())
}

override fun onDestroy(container: AppContainer) {
override fun destroy(container: AppContainer) {
container.childContainers.remove(RepositoryContainer::class.simpleName ?: "RepositoryContainer")
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package land.moka.kmm.shared.di.scope.index

import land.moka.kmm.shared.di.AppContainer

interface BaseScope {

fun create(container: AppContainer)

fun destroy(container: AppContainer)

}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package land.moka.kmm.shared.lib.log
expect class Log {

companion object {
fun e(message: String)
fun print(message: String)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.single
import kotlinx.coroutines.launch
import land.moka.kmm.shared.lib.MainLoopDispatcher
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package land.moka.kmm.shared.app.network
package land.moka.kmm.shared.lib

import kotlinx.coroutines.*
import platform.darwin.*
Expand Down
4 changes: 2 additions & 2 deletions shared/src/iosMain/kotlin/land/moka/kmm/shared/lib/log/Log.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package land.moka.kmm.shared.lib.log
actual class Log {

actual companion object {
actual fun e(message: String) {
print(" ✏️ $message\n")
actual fun print(message: String) {
kotlin.io.print(" ✏️ $message\n")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.InternalCoroutinesApi
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import land.moka.kmm.shared.app.network.MainLoopDispatcher
import land.moka.kmm.shared.lib.MainLoopDispatcher
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine

Expand Down

0 comments on commit 2fe8a93

Please sign in to comment.