SoftLogout: adapt wording depending if all keys are backed up or not
This commit is contained in:
parent
b9e8da1fbb
commit
efc1f38f8c
|
@ -19,6 +19,7 @@ package im.vector.riotx.core.extensions
|
|||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.ProcessLifecycleOwner
|
||||
import im.vector.matrix.android.api.session.Session
|
||||
import im.vector.matrix.android.api.session.crypto.keysbackup.KeysBackupState
|
||||
import im.vector.matrix.android.api.session.sync.FilterService
|
||||
import im.vector.riotx.features.notifications.PushRuleTriggerListener
|
||||
import im.vector.riotx.features.session.SessionListener
|
||||
|
@ -40,3 +41,11 @@ fun Session.configureAndStart(pushRuleTriggerListener: PushRuleTriggerListener,
|
|||
// @Inject lateinit var incomingVerificationRequestHandler: IncomingVerificationRequestHandler
|
||||
// @Inject lateinit var keyRequestHandler: KeyRequestHandler
|
||||
}
|
||||
|
||||
/**
|
||||
* Tell is the session has unsaved e2e keys in the backup
|
||||
*/
|
||||
fun Session.hasUnsavedKeys(): Boolean {
|
||||
return inboundGroupSessionsCount(false) > 0
|
||||
&& getKeysBackupService().state != KeysBackupState.ReadyToBackUp
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import android.os.Bundle
|
|||
import android.view.View
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.autofill.HintConstants
|
||||
import androidx.core.view.isVisible
|
||||
import butterknife.OnClick
|
||||
import com.airbnb.mvrx.*
|
||||
import com.jakewharton.rxbinding3.widget.textChanges
|
||||
|
@ -75,12 +76,18 @@ class SoftLogoutFragment @Inject constructor(
|
|||
}
|
||||
|
||||
@OnClick(R.id.softLogoutClearDataSubmit)
|
||||
fun clearData() {
|
||||
fun clearData() = withState(softLogoutViewModel) { state ->
|
||||
cleanupUi()
|
||||
|
||||
val messageResId = if (state.hasUnsavedKeys) {
|
||||
R.string.soft_logout_clear_data_dialog_content
|
||||
} else {
|
||||
R.string.soft_logout_clear_data_dialog_e2e_warning_content
|
||||
}
|
||||
|
||||
AlertDialog.Builder(requireActivity())
|
||||
.setTitle(R.string.soft_logout_clear_data_dialog_title)
|
||||
.setMessage(R.string.soft_logout_clear_data_dialog_content)
|
||||
.setMessage(messageResId)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.soft_logout_clear_data_submit) { _, _ ->
|
||||
MainActivity.restartApp(requireActivity(), MainActivityArgs(
|
||||
|
@ -103,6 +110,8 @@ class SoftLogoutFragment @Inject constructor(
|
|||
state.homeServerUrl,
|
||||
state.userDisplayName,
|
||||
state.userId)
|
||||
|
||||
softLogoutE2eWarningNotice.isVisible = state.hasUnsavedKeys
|
||||
}
|
||||
|
||||
private fun setupSubmitButton() {
|
||||
|
|
|
@ -23,6 +23,7 @@ import im.vector.matrix.android.api.MatrixCallback
|
|||
import im.vector.matrix.android.api.session.Session
|
||||
import im.vector.matrix.android.api.util.Cancelable
|
||||
import im.vector.riotx.core.di.ActiveSessionHolder
|
||||
import im.vector.riotx.core.extensions.hasUnsavedKeys
|
||||
import im.vector.riotx.core.extensions.toReducedUrl
|
||||
import im.vector.riotx.core.platform.VectorViewModel
|
||||
|
||||
|
@ -48,7 +49,8 @@ class SoftLogoutViewModel @AssistedInject constructor(
|
|||
return SoftLogoutViewState(
|
||||
homeServerUrl = activity.session.sessionParams.homeServerConnectionConfig.homeServerUri.toString().toReducedUrl(),
|
||||
userId = userId,
|
||||
userDisplayName = activity.session.getUser(userId)?.displayName ?: userId
|
||||
userDisplayName = activity.session.getUser(userId)?.displayName ?: userId,
|
||||
hasUnsavedKeys = activity.session.hasUnsavedKeys()
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,8 @@ data class SoftLogoutViewState(
|
|||
val asyncLoginAction: Async<Unit> = Uninitialized,
|
||||
val homeServerUrl: String,
|
||||
val userId: String,
|
||||
val userDisplayName: String
|
||||
val userDisplayName: String,
|
||||
val hasUnsavedKeys: Boolean
|
||||
) : MvRxState {
|
||||
|
||||
fun isLoading(): Boolean {
|
||||
|
|
|
@ -21,6 +21,7 @@ import androidx.appcompat.app.AlertDialog
|
|||
import androidx.fragment.app.FragmentActivity
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.core.di.ActiveSessionHolder
|
||||
import im.vector.riotx.core.extensions.hasUnsavedKeys
|
||||
import im.vector.riotx.core.extensions.vectorComponent
|
||||
import im.vector.riotx.features.MainActivity
|
||||
import im.vector.riotx.features.MainActivityArgs
|
||||
|
@ -32,7 +33,8 @@ class SignOutUiWorker(private val activity: FragmentActivity) {
|
|||
fun perform(context: Context) {
|
||||
activeSessionHolder = context.vectorComponent().activeSessionHolder()
|
||||
val session = activeSessionHolder.getActiveSession()
|
||||
if (SignOutViewModel.doYouNeedToBeDisplayed(session)) {
|
||||
if (session.hasUnsavedKeys()) {
|
||||
// The backup check on logout flow has to be displayed if there are keys in the store, and the keys backup state is not Ready
|
||||
val signOutDialog = SignOutBottomSheetDialogFragment.newInstance()
|
||||
signOutDialog.onSignOut = Runnable {
|
||||
doSignOut()
|
||||
|
|
|
@ -71,14 +71,4 @@ class SignOutViewModel @Inject constructor(private val session: Session) : ViewM
|
|||
session.getKeysBackupService().checkAndStartKeysBackup()
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
/**
|
||||
* The backup check on logout flow has to be displayed if there are keys in the store, and the keys backup state is not Ready
|
||||
*/
|
||||
fun doYouNeedToBeDisplayed(session: Session): Boolean {
|
||||
return session.inboundGroupSessionsCount(false) > 0
|
||||
&& session.getKeysBackupService().state != KeysBackupState.ReadyToBackUp
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,6 +43,17 @@
|
|||
android:textAppearance="@style/TextAppearance.Vector.Login.Text"
|
||||
tools:text="@string/soft_logout_signin_notice" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/softLogoutE2eWarningNotice"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:gravity="start"
|
||||
android:text="@string/soft_logout_signin_e2e_warning_notice"
|
||||
android:textAppearance="@style/TextAppearance.Vector.Login.Text"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/softLogoutPasswordContainer"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -148,6 +148,7 @@
|
|||
<string name="soft_logout_signin_title">Sign in</string>
|
||||
<!-- Replacement: homeserver url, user display name and userId -->
|
||||
<string name="soft_logout_signin_notice">Your homeserver (%1$s) admin has signed you out of your account %2$s (%3$s).</string>
|
||||
<string name="soft_logout_signin_e2e_warning_notice">Sign in to recover encryption keys stored exclusively on this device. You need them to read all of your secure messages on any device.</string>
|
||||
<string name="soft_logout_signin_submit">Sign in</string>
|
||||
<string name="soft_logout_signin_password_hint">Password</string>
|
||||
<string name="soft_logout_clear_data_title">Clear personal data</string>
|
||||
|
@ -156,6 +157,7 @@
|
|||
|
||||
<string name="soft_logout_clear_data_dialog_title">Clear data</string>
|
||||
<string name="soft_logout_clear_data_dialog_content">Clear all data currently stored on this device?\nSign in again to access your account data and messages.</string>
|
||||
<string name="soft_logout_clear_data_dialog_e2e_warning_content">You’ll lose access to secure messages unless you sign in to recover your encryption keys.</string>
|
||||
<string name="soft_logout_clear_data_dialog_submit">Clear data</string>
|
||||
|
||||
</resources>
|
||||
|
|
Loading…
Reference in New Issue