Add basic session management to avoid login each time

This commit is contained in:
ganfra 2018-10-11 09:58:28 +02:00
parent f9e6f4b533
commit 5baaecaea4
4 changed files with 26 additions and 2 deletions

View File

@ -23,6 +23,7 @@ class LoginActivity : RiotActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login) setContentView(R.layout.activity_login)
authenticateButton.setOnClickListener { authenticate() } authenticateButton.setOnClickListener { authenticate() }
checkActiveSessions()
} }


private fun authenticate() { private fun authenticate() {
@ -48,6 +49,13 @@ class LoginActivity : RiotActivity() {
}) })
} }


private fun checkActiveSessions() {
if (authenticator.hasActiveSessions()) {
matrix.currentSession = authenticator.getLastActiveSession()
goToHomeScreen()
}
}

private fun goToHomeScreen() { private fun goToHomeScreen() {
val intent = HomeActivity.newIntent(this) val intent = HomeActivity.newIntent(this)
startActivity(intent) startActivity(intent)

View File

@ -1,12 +1,17 @@
package im.vector.matrix.android.api.auth package im.vector.matrix.android.api.auth


import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.MatrixCallback
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.api.util.Cancelable import im.vector.matrix.android.api.util.Cancelable


interface Authenticator { interface Authenticator {


fun authenticate(homeServerConnectionConfig: HomeServerConnectionConfig, login: String, password: String, callback: MatrixCallback<Session>): Cancelable fun authenticate(homeServerConnectionConfig: HomeServerConnectionConfig, login: String, password: String, callback: MatrixCallback<Session>): Cancelable


fun hasActiveSessions(): Boolean

fun getLastActiveSession(): Session?


} }

View File

@ -25,6 +25,17 @@ class DefaultAuthenticator(private val retrofitBuilder: Retrofit.Builder,
private val coroutineDispatchers: MatrixCoroutineDispatchers, private val coroutineDispatchers: MatrixCoroutineDispatchers,
private val sessionParamsStore: SessionParamsStore) : Authenticator { private val sessionParamsStore: SessionParamsStore) : Authenticator {


override fun hasActiveSessions(): Boolean {
return sessionParamsStore.get() != null
}

override fun getLastActiveSession(): Session? {
val sessionParams = sessionParamsStore.get()
return sessionParams?.let {
DefaultSession(it)
}
}

override fun authenticate(homeServerConnectionConfig: HomeServerConnectionConfig, login: String, password: String, callback: MatrixCallback<Session>): Cancelable { override fun authenticate(homeServerConnectionConfig: HomeServerConnectionConfig, login: String, password: String, callback: MatrixCallback<Session>): Cancelable {
val authAPI = buildAuthAPI(homeServerConnectionConfig) val authAPI = buildAuthAPI(homeServerConnectionConfig)



View File

@ -20,7 +20,7 @@ class DefaultSession(sessionParams: SessionParams) : Session, KoinComponent {
val sessionModule = SessionModule(sessionParams) val sessionModule = SessionModule(sessionParams)
val syncModule = SyncModule() val syncModule = SyncModule()
StandAloneContext.loadKoinModules(listOf(sessionModule, syncModule)) StandAloneContext.loadKoinModules(listOf(sessionModule, syncModule))
scope = getKoin().createScope(SCOPE) scope = getKoin().getOrCreateScope(SCOPE)
} }


override fun synchronizer(): Synchronizer { override fun synchronizer(): Synchronizer {