Clear history (#1933)

This commit is contained in:
Benoit Marty 2020-12-14 16:20:36 +01:00
parent 5a69b33600
commit 09040b7095
7 changed files with 34 additions and 8 deletions

View File

@ -13,6 +13,7 @@ Improvements 🙌:
- Add Setting Item to Change PIN (#2462) - Add Setting Item to Change PIN (#2462)
- Improve room history visibility setting UX (#1579) - Improve room history visibility setting UX (#1579)
- Matrix.to deeplink custom scheme support - Matrix.to deeplink custom scheme support
- Homeserver history (#1933)
Bugfix 🐛: Bugfix 🐛:
- Fix cancellation of sending event (#2438) - Fix cancellation of sending event (#2438)

View File

@ -24,9 +24,7 @@ import dagger.Module
import dagger.Provides import dagger.Provides
import io.realm.RealmConfiguration import io.realm.RealmConfiguration
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import org.matrix.android.sdk.api.auth.HomeServerHistoryService
import org.matrix.android.sdk.api.raw.RawService import org.matrix.android.sdk.api.raw.RawService
import org.matrix.android.sdk.internal.auth.DefaultHomeServerHistoryService
import org.matrix.android.sdk.internal.database.RealmKeysUtils import org.matrix.android.sdk.internal.database.RealmKeysUtils
import org.matrix.android.sdk.internal.di.GlobalDatabase import org.matrix.android.sdk.internal.di.GlobalDatabase
import org.matrix.android.sdk.internal.di.MatrixScope import org.matrix.android.sdk.internal.di.MatrixScope
@ -61,6 +59,7 @@ internal abstract class RawModule {
.name("matrix-sdk-global.realm") .name("matrix-sdk-global.realm")
.schemaVersion(GlobalRealmMigration.SCHEMA_VERSION) .schemaVersion(GlobalRealmMigration.SCHEMA_VERSION)
.migration(GlobalRealmMigration) .migration(GlobalRealmMigration)
.allowWritesOnUiThread(true)
.modules(GlobalRealmModule()) .modules(GlobalRealmModule())
.build() .build()
} }

View File

@ -60,6 +60,9 @@ sealed class LoginAction : VectorViewModelAction {
object ResetLogin : ResetAction() object ResetLogin : ResetAction()
object ResetResetPassword : ResetAction() object ResetResetPassword : ResetAction()
// Homeserver history
object ClearHomeServerHistory : LoginAction()
// For the soft logout case // For the soft logout case
data class SetupSsoForSessionRecovery(val homeServerUrl: String, data class SetupSsoForSessionRecovery(val homeServerUrl: String,
val deviceId: String, val deviceId: String,

View File

@ -21,10 +21,12 @@ import android.os.Bundle
import android.view.View import android.view.View
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import androidx.core.view.isInvisible
import androidx.core.view.isVisible import androidx.core.view.isVisible
import butterknife.OnClick import butterknife.OnClick
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import com.jakewharton.rxbinding3.widget.textChanges import com.jakewharton.rxbinding3.widget.textChanges
import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.extensions.hideKeyboard
import im.vector.app.core.utils.ensureProtocol import im.vector.app.core.utils.ensureProtocol
@ -84,7 +86,7 @@ class LoginServerUrlFormFragment @Inject constructor() : AbstractLoginFragment()
loginServerUrlFormNotice.text = getString(R.string.login_server_url_form_common_notice) loginServerUrlFormNotice.text = getString(R.string.login_server_url_form_common_notice)
} }
} }
val completions = state.knownCustomHomeServersUrls val completions = state.knownCustomHomeServersUrls + if (BuildConfig.DEBUG) listOf("http://10.0.2.2:8080") else emptyList()
loginServerUrlFormHomeServerUrl.setAdapter(ArrayAdapter( loginServerUrlFormHomeServerUrl.setAdapter(ArrayAdapter(
requireContext(), requireContext(),
R.layout.item_completion_homeserver, R.layout.item_completion_homeserver,
@ -100,6 +102,11 @@ class LoginServerUrlFormFragment @Inject constructor() : AbstractLoginFragment()
openUrlInChromeCustomTab(requireActivity(), null, EMS_LINK) openUrlInChromeCustomTab(requireActivity(), null, EMS_LINK)
} }
@OnClick(R.id.loginServerUrlFormClearHistory)
fun clearHistory() {
loginViewModel.handle(LoginAction.ClearHomeServerHistory)
}
override fun resetViewModel() { override fun resetViewModel() {
loginViewModel.handle(LoginAction.ResetHomeServerUrl) loginViewModel.handle(LoginAction.ResetHomeServerUrl)
} }
@ -141,6 +148,8 @@ class LoginServerUrlFormFragment @Inject constructor() : AbstractLoginFragment()
override fun updateWithState(state: LoginViewState) { override fun updateWithState(state: LoginViewState) {
setupUi(state) setupUi(state)
loginServerUrlFormClearHistory.isInvisible = state.knownCustomHomeServersUrls.isEmpty()
if (state.loginMode != LoginMode.Unknown) { if (state.loginMode != LoginMode.Unknown) {
// The home server url is valid // The home server url is valid
loginViewModel.handle(LoginAction.PostViewEvent(LoginViewEvents.OnLoginFlowRetrieved)) loginViewModel.handle(LoginAction.PostViewEvent(LoginViewEvents.OnLoginFlowRetrieved))

View File

@ -28,7 +28,6 @@ import com.airbnb.mvrx.Uninitialized
import com.airbnb.mvrx.ViewModelContext import com.airbnb.mvrx.ViewModelContext
import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.Assisted
import com.squareup.inject.assisted.AssistedInject import com.squareup.inject.assisted.AssistedInject
import im.vector.app.BuildConfig
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.core.extensions.configureAndStart import im.vector.app.core.extensions.configureAndStart
@ -80,10 +79,7 @@ class LoginViewModel @AssistedInject constructor(
private fun getKnownCustomHomeServersUrls() { private fun getKnownCustomHomeServersUrls() {
setState { setState {
copy( copy(knownCustomHomeServersUrls = homeServerHistoryService.getKnownServersUrls())
knownCustomHomeServersUrls = homeServerHistoryService.getKnownServersUrls()
+ if (BuildConfig.DEBUG) listOf("http://10.0.2.2:8080") else emptyList()
)
} }
} }
@ -137,6 +133,7 @@ class LoginViewModel @AssistedInject constructor(
is LoginAction.ResetAction -> handleResetAction(action) is LoginAction.ResetAction -> handleResetAction(action)
is LoginAction.SetupSsoForSessionRecovery -> handleSetupSsoForSessionRecovery(action) is LoginAction.SetupSsoForSessionRecovery -> handleSetupSsoForSessionRecovery(action)
is LoginAction.UserAcceptCertificate -> handleUserAcceptCertificate(action) is LoginAction.UserAcceptCertificate -> handleUserAcceptCertificate(action)
LoginAction.ClearHomeServerHistory -> handleClearHomeServerHistory()
is LoginAction.PostViewEvent -> _viewEvents.post(action.viewEvent) is LoginAction.PostViewEvent -> _viewEvents.post(action.viewEvent)
}.exhaustive }.exhaustive
} }
@ -167,6 +164,11 @@ class LoginViewModel @AssistedInject constructor(
getKnownCustomHomeServersUrls() getKnownCustomHomeServersUrls()
} }
private fun handleClearHomeServerHistory() {
homeServerHistoryService.clearHistory()
getKnownCustomHomeServersUrls()
}
private fun handleLoginWithToken(action: LoginAction.LoginWithToken) { private fun handleLoginWithToken(action: LoginAction.LoginWithToken) {
val safeLoginWizard = loginWizard val safeLoginWizard = loginWizard

View File

@ -70,6 +70,17 @@
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/loginServerUrlFormClearHistory"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:text="@string/login_clear_homeserver_history"
android:textAppearance="@style/TextAppearance.Vector.Login.Text.Small"
android:textColor="@color/riotx_accent"
android:visibility="invisible"
tools:visibility="visible" />
<TextView <TextView
android:id="@+id/loginServerUrlFormNotice" android:id="@+id/loginServerUrlFormNotice"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@ -2001,6 +2001,7 @@
<string name="login_signup">Sign Up</string> <string name="login_signup">Sign Up</string>
<string name="login_signin">Sign In</string> <string name="login_signin">Sign In</string>
<string name="login_signin_sso">Continue with SSO</string> <string name="login_signin_sso">Continue with SSO</string>
<string name="login_clear_homeserver_history">Clear history</string>
<string name="login_server_url_form_modular_hint">Element Matrix Services Address</string> <string name="login_server_url_form_modular_hint">Element Matrix Services Address</string>
<string name="login_server_url_form_other_hint">Address</string> <string name="login_server_url_form_other_hint">Address</string>