Refactor Matrix instance creation (using ContentProvider) + isolate Koin in matrix

This commit is contained in:
ganfra
2018-12-20 15:44:01 +01:00
parent 43dee60b92
commit 3713e71c8e
19 changed files with 130 additions and 71 deletions

View File

@ -16,7 +16,7 @@ class Riot : Application() {
Timber.plant(Timber.DebugTree())
}
AndroidThreeTen.init(this)
startKoin(listOf(AppModule(this)), logger = EmptyLogger())
startKoin(listOf(AppModule(this).definition), logger = EmptyLogger())
}
}

View File

@ -1,25 +1,16 @@
package im.vector.riotredesign.core.di
import android.content.Context
import im.vector.matrix.android.api.Matrix
import im.vector.matrix.android.api.MatrixOptions
import im.vector.riotredesign.core.resources.LocaleProvider
import org.koin.dsl.context.ModuleDefinition
import org.koin.dsl.module.Module
import org.koin.dsl.module.module
class AppModule(private val context: Context) : Module {
class AppModule(private val context: Context) {
override fun invoke(): ModuleDefinition = module {
single(createOnStart = true) {
val matrixOptions = MatrixOptions(context)
Matrix(matrixOptions)
}
val definition = module {
single {
LocaleProvider(context.resources)
}
}.invoke()
}
}

View File

@ -10,8 +10,8 @@ import org.koin.android.ext.android.inject
class MainActivity : RiotActivity() {
private val matrix by inject<Matrix>()
private val authenticator = matrix.authenticator()
private val authenticator = Matrix.getInstance().authenticator()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

View File

@ -24,7 +24,7 @@ class HomeActivity : RiotActivity(), HomeNavigator, ToolbarConfigurable {
override fun onCreate(savedInstanceState: Bundle?) {
loadKoinModules(listOf(HomeModule(this)))
loadKoinModules(listOf(HomeModule(this).definition))
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
if (savedInstanceState == null) {

View File

@ -4,17 +4,11 @@ import im.vector.riotredesign.features.home.room.detail.timeline.MessageItemFact
import im.vector.riotredesign.features.home.room.detail.timeline.TextItemFactory
import im.vector.riotredesign.features.home.room.detail.timeline.TimelineDateFormatter
import im.vector.riotredesign.features.home.room.detail.timeline.TimelineEventController
import org.koin.dsl.context.ModuleDefinition
import org.koin.dsl.module.Module
import org.koin.dsl.module.module
class HomeModule(private val homeActivity: HomeActivity) : Module {
class HomeModule(private val homeActivity: HomeActivity) {
override fun invoke(): ModuleDefinition = module(override = true) {
factory {
homeActivity as HomeNavigator
}
val definition = module(override = true) {
single {
TimelineDateFormatter(get())
@ -28,9 +22,13 @@ class HomeModule(private val homeActivity: HomeActivity) : Module {
TextItemFactory()
}
factory {
homeActivity as HomeNavigator
}
factory { (roomId: String) ->
TimelineEventController(roomId, get(), get(), get())
}
}.invoke()
}
}

View File

@ -6,7 +6,6 @@ import com.airbnb.mvrx.MvRxViewModelFactory
import im.vector.matrix.android.api.Matrix
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.rx.rx
import org.koin.android.ext.android.get
class HomeViewModel(initialState: HomeViewState, private val session: Session) : BaseMvRxViewModel<HomeViewState>(initialState) {
@ -14,8 +13,7 @@ class HomeViewModel(initialState: HomeViewState, private val session: Session) :
@JvmStatic
override fun create(activity: FragmentActivity, state: HomeViewState): HomeViewModel {
val matrix = activity.get<Matrix>()
val currentSession = matrix.currentSession
val currentSession = Matrix.getInstance().currentSession
return HomeViewModel(state, currentSession)
}
}
@ -27,8 +25,8 @@ class HomeViewModel(initialState: HomeViewState, private val session: Session) :
fun accept(action: HomeActions) {
when (action) {
is HomeActions.SelectRoom -> handleSelectRoom(action)
is HomeActions.SelectGroup -> handleSelectGroup(action)
is HomeActions.SelectRoom -> handleSelectRoom(action)
is HomeActions.SelectGroup -> handleSelectGroup(action)
is HomeActions.RoomDisplayed -> setState { copy(shouldOpenRoomDetail = false) }
}
}
@ -64,9 +62,9 @@ class HomeViewModel(initialState: HomeViewState, private val session: Session) :
val groupRooms = summaries?.filter { !it.isDirect } ?: emptyList()
val selectedRoom = selectedRoom
?: session.lastSelectedRoom()
?: directRooms.firstOrNull()
?: groupRooms.firstOrNull()
?: session.lastSelectedRoom()
?: directRooms.firstOrNull()
?: groupRooms.firstOrNull()
copy(
asyncRooms = async,

View File

@ -38,8 +38,7 @@ class RoomDetailFragment : RiotFragment(), TimelineEventController.Callback {
}
}
private val matrix by inject<Matrix>()
private val currentSession = matrix.currentSession
private val currentSession = Matrix.getInstance().currentSession
private var roomId: String by UnsafeFragmentArgumentDelegate()
private var eventId: String? by FragmentArgumentDelegate()
private val timelineEventController by inject<TimelineEventController> { parametersOf(roomId) }

View File

@ -13,12 +13,10 @@ import im.vector.riotredesign.R
import im.vector.riotredesign.core.platform.RiotActivity
import im.vector.riotredesign.features.home.HomeActivity
import kotlinx.android.synthetic.main.activity_login.*
import org.koin.android.ext.android.inject
class LoginActivity : RiotActivity() {
private val matrix by inject<Matrix>()
private val authenticator = matrix.authenticator()
private val authenticator = Matrix.getInstance().authenticator()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -38,8 +36,8 @@ class LoginActivity : RiotActivity() {
authenticator.authenticate(homeServerConnectionConfig, login, password, object : MatrixCallback<Session> {
override fun onSuccess(data: Session) {
matrix.currentSession = data
matrix.currentSession.open()
Matrix.getInstance().currentSession = data
Matrix.getInstance().currentSession.open()
goToHome()
}