forked from GitHub-Mirror/riotX-android
Login : quickly add homeserver url field
This commit is contained in:
parent
4a6b28aca1
commit
2380499af2
@ -55,8 +55,9 @@ dependencies {
|
|||||||
|
|
||||||
// rx
|
// rx
|
||||||
implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0'
|
implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0'
|
||||||
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
|
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
|
||||||
implementation 'com.jakewharton.rxrelay2:rxrelay:2.1.0'
|
implementation 'com.jakewharton.rxrelay2:rxrelay:2.1.0'
|
||||||
|
implementation 'com.jakewharton.rxbinding2:rxbinding:2.2.0'
|
||||||
|
|
||||||
implementation("com.airbnb.android:epoxy:$epoxy_version")
|
implementation("com.airbnb.android:epoxy:$epoxy_version")
|
||||||
kapt "com.airbnb.android:epoxy-processor:$epoxy_version"
|
kapt "com.airbnb.android:epoxy-processor:$epoxy_version"
|
||||||
@ -69,6 +70,7 @@ dependencies {
|
|||||||
implementation 'com.github.bumptech.glide:glide:4.8.0'
|
implementation 'com.github.bumptech.glide:glide:4.8.0'
|
||||||
kapt 'com.github.bumptech.glide:compiler:4.8.0'
|
kapt 'com.github.bumptech.glide:compiler:4.8.0'
|
||||||
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
|
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
|
||||||
|
implementation 'com.google.android.material:material:1.1.0-alpha02'
|
||||||
|
|
||||||
// DI
|
// DI
|
||||||
implementation "org.koin:koin-android:$koin_version"
|
implementation "org.koin:koin-android:$koin_version"
|
||||||
|
@ -1,5 +1,16 @@
|
|||||||
package im.vector.riotredesign.core.platform
|
package im.vector.riotredesign.core.platform
|
||||||
|
|
||||||
import com.airbnb.mvrx.BaseMvRxActivity
|
import com.airbnb.mvrx.BaseMvRxActivity
|
||||||
|
import io.reactivex.disposables.CompositeDisposable
|
||||||
|
import io.reactivex.disposables.Disposable
|
||||||
|
|
||||||
abstract class RiotActivity : BaseMvRxActivity()
|
abstract class RiotActivity : BaseMvRxActivity() {
|
||||||
|
|
||||||
|
private val uiDisposables = CompositeDisposable()
|
||||||
|
|
||||||
|
protected fun Disposable.disposeOnDestroy(): Disposable {
|
||||||
|
uiDisposables.add(this)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -5,6 +5,8 @@ import android.content.Intent
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import arrow.core.Try
|
||||||
|
import com.jakewharton.rxbinding2.widget.RxTextView
|
||||||
import im.vector.matrix.android.api.Matrix
|
import im.vector.matrix.android.api.Matrix
|
||||||
import im.vector.matrix.android.api.MatrixCallback
|
import im.vector.matrix.android.api.MatrixCallback
|
||||||
import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
|
import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
|
||||||
@ -12,8 +14,15 @@ import im.vector.matrix.android.api.session.Session
|
|||||||
import im.vector.riotredesign.R
|
import im.vector.riotredesign.R
|
||||||
import im.vector.riotredesign.core.platform.RiotActivity
|
import im.vector.riotredesign.core.platform.RiotActivity
|
||||||
import im.vector.riotredesign.features.home.HomeActivity
|
import im.vector.riotredesign.features.home.HomeActivity
|
||||||
|
import io.reactivex.Observable
|
||||||
|
import io.reactivex.functions.Function3
|
||||||
|
import io.reactivex.rxkotlin.subscribeBy
|
||||||
import kotlinx.android.synthetic.main.activity_login.*
|
import kotlinx.android.synthetic.main.activity_login.*
|
||||||
|
|
||||||
|
private const val DEFAULT_HOME_SERVER_URI = "https://matrix.org"
|
||||||
|
private const val DEFAULT_IDENTITY_SERVER_URI = "https://vector.im"
|
||||||
|
private const val DEFAULT_ANTIVIRUS_SERVER_URI = "https://matrix.org"
|
||||||
|
|
||||||
class LoginActivity : RiotActivity() {
|
class LoginActivity : RiotActivity() {
|
||||||
|
|
||||||
private val authenticator = Matrix.getInstance().authenticator()
|
private val authenticator = Matrix.getInstance().authenticator()
|
||||||
@ -21,19 +30,21 @@ class LoginActivity : RiotActivity() {
|
|||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_login)
|
setContentView(R.layout.activity_login)
|
||||||
authenticateButton.setOnClickListener { authenticate() }
|
setupAuthButton()
|
||||||
|
homeServerField.setText(DEFAULT_HOME_SERVER_URI)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun authenticate() {
|
private fun authenticate() {
|
||||||
val login = loginField.text.trim().toString()
|
val login = loginField.text?.trim().toString()
|
||||||
val password = passwordField.text.trim().toString()
|
val password = passwordField.text?.trim().toString()
|
||||||
progressBar.visibility = View.VISIBLE
|
buildHomeServerConnectionConfig().fold(
|
||||||
val homeServerConnectionConfig = HomeServerConnectionConfig.Builder()
|
{ Toast.makeText(this@LoginActivity, "Authenticate failure: $it", Toast.LENGTH_LONG).show() },
|
||||||
.withHomeServerUri("https://matrix.org/")
|
{ authenticateWith(it, login, password) }
|
||||||
.withIdentityServerUri("https://vector.im")
|
)
|
||||||
.withAntiVirusServerUri("https://matrix.org/")
|
}
|
||||||
.build()
|
|
||||||
|
|
||||||
|
private fun authenticateWith(homeServerConnectionConfig: HomeServerConnectionConfig, login: String, password: String) {
|
||||||
|
progressBar.visibility = View.VISIBLE
|
||||||
authenticator.authenticate(homeServerConnectionConfig, login, password, object : MatrixCallback<Session> {
|
authenticator.authenticate(homeServerConnectionConfig, login, password, object : MatrixCallback<Session> {
|
||||||
override fun onSuccess(data: Session) {
|
override fun onSuccess(data: Session) {
|
||||||
Matrix.getInstance().currentSession = data
|
Matrix.getInstance().currentSession = data
|
||||||
@ -48,6 +59,31 @@ class LoginActivity : RiotActivity() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun buildHomeServerConnectionConfig(): Try<HomeServerConnectionConfig> {
|
||||||
|
return Try {
|
||||||
|
val homeServerUri = homeServerField.text?.trim().toString()
|
||||||
|
HomeServerConnectionConfig.Builder()
|
||||||
|
.withHomeServerUri(homeServerUri)
|
||||||
|
.withIdentityServerUri(DEFAULT_IDENTITY_SERVER_URI)
|
||||||
|
.withAntiVirusServerUri(DEFAULT_ANTIVIRUS_SERVER_URI)
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupAuthButton() {
|
||||||
|
Observable
|
||||||
|
.combineLatest(
|
||||||
|
RxTextView.textChanges(loginField).map { it.trim().isNotEmpty() },
|
||||||
|
RxTextView.textChanges(passwordField).map { it.trim().isNotEmpty() },
|
||||||
|
RxTextView.textChanges(homeServerField).map { it.trim().isNotEmpty() },
|
||||||
|
Function3<Boolean, Boolean, Boolean, Boolean> { isLoginNotEmpty, isPasswordNotEmpty, isHomeServerNotEmpty ->
|
||||||
|
isLoginNotEmpty && isPasswordNotEmpty && isHomeServerNotEmpty
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.subscribeBy { authenticateButton.isEnabled = it }
|
||||||
|
.disposeOnDestroy()
|
||||||
|
authenticateButton.setOnClickListener { authenticate() }
|
||||||
|
}
|
||||||
|
|
||||||
private fun goToHome() {
|
private fun goToHome() {
|
||||||
val intent = HomeActivity.newIntent(this)
|
val intent = HomeActivity.newIntent(this)
|
||||||
|
@ -23,25 +23,50 @@
|
|||||||
android:layout_height="100dp"
|
android:layout_height="100dp"
|
||||||
android:src="@drawable/logo_login" />
|
android:src="@drawable/logo_login" />
|
||||||
|
|
||||||
<EditText
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/loginField"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="24dp"
|
android:layout_marginTop="16dp"
|
||||||
android:hint="Username"
|
android:hint="Username">
|
||||||
android:inputType="textEmailAddress"
|
|
||||||
android:maxLines="1" />
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
|
android:id="@+id/loginField"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inputType="textEmailAddress"
|
||||||
|
android:maxLines="1" />
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
|
||||||
<EditText
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:id="@+id/passwordField"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="16dp"
|
||||||
android:ems="10"
|
android:hint="Password">
|
||||||
android:hint="Password"
|
|
||||||
android:inputType="textPassword"
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
android:maxLines="1" />
|
android:id="@+id/passwordField"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ems="10"
|
||||||
|
android:inputType="textPassword"
|
||||||
|
android:maxLines="1" />
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:hint="Homeserver url">
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
|
android:id="@+id/homeServerField"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inputType="textUri"
|
||||||
|
android:maxLines="1" />
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
Loading…
Reference in New Issue
Block a user