forked from GitHub-Mirror/riotX-android
Refactor Matrix instance creation (using ContentProvider) + isolate Koin in matrix
This commit is contained in:
@ -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())
|
||||
}
|
||||
|
||||
}
|
@ -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()
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
@ -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) {
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
@ -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,
|
||||
|
@ -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) }
|
||||
|
@ -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()
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user