mirror of
https://github.com/element-hq/element-android
synced 2024-11-27 03:48:12 +03:00
Adding confirmation dialog before signout process
This commit is contained in:
parent
0f8e5919da
commit
727c7462df
4 changed files with 71 additions and 11 deletions
|
@ -51,6 +51,7 @@ import im.vector.app.features.settings.devices.v2.list.SESSION_IS_MARKED_AS_INAC
|
||||||
import im.vector.app.features.settings.devices.v2.list.SecurityRecommendationView
|
import im.vector.app.features.settings.devices.v2.list.SecurityRecommendationView
|
||||||
import im.vector.app.features.settings.devices.v2.list.SecurityRecommendationViewState
|
import im.vector.app.features.settings.devices.v2.list.SecurityRecommendationViewState
|
||||||
import im.vector.app.features.settings.devices.v2.list.SessionInfoViewState
|
import im.vector.app.features.settings.devices.v2.list.SessionInfoViewState
|
||||||
|
import im.vector.app.features.settings.devices.v2.signout.BuildConfirmSignoutDialogUseCase
|
||||||
import org.matrix.android.sdk.api.auth.data.LoginFlowTypes
|
import org.matrix.android.sdk.api.auth.data.LoginFlowTypes
|
||||||
import org.matrix.android.sdk.api.session.crypto.model.RoomEncryptionTrustLevel
|
import org.matrix.android.sdk.api.session.crypto.model.RoomEncryptionTrustLevel
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -75,6 +76,8 @@ class VectorSettingsDevicesFragment :
|
||||||
|
|
||||||
@Inject lateinit var stringProvider: StringProvider
|
@Inject lateinit var stringProvider: StringProvider
|
||||||
|
|
||||||
|
@Inject lateinit var buildConfirmSignoutDialogUseCase: BuildConfirmSignoutDialogUseCase
|
||||||
|
|
||||||
private val viewModel: DevicesViewModel by fragmentViewModel()
|
private val viewModel: DevicesViewModel by fragmentViewModel()
|
||||||
|
|
||||||
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentSettingsDevicesBinding {
|
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentSettingsDevicesBinding {
|
||||||
|
@ -140,8 +143,7 @@ class VectorSettingsDevicesFragment :
|
||||||
views.deviceListHeaderOtherSessions.setOnMenuItemClickListener { menuItem ->
|
views.deviceListHeaderOtherSessions.setOnMenuItemClickListener { menuItem ->
|
||||||
when (menuItem.itemId) {
|
when (menuItem.itemId) {
|
||||||
R.id.otherSessionsHeaderMultiSignout -> {
|
R.id.otherSessionsHeaderMultiSignout -> {
|
||||||
// TODO ask for confirmation
|
confirmMultiSignoutOtherSessions()
|
||||||
viewModel.handle(DevicesAction.MultiSignoutOtherSessions)
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
else -> false
|
else -> false
|
||||||
|
@ -149,6 +151,17 @@ class VectorSettingsDevicesFragment :
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun confirmMultiSignoutOtherSessions() {
|
||||||
|
activity?.let {
|
||||||
|
buildConfirmSignoutDialogUseCase.execute(it, this::multiSignoutOtherSessions)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun multiSignoutOtherSessions() {
|
||||||
|
viewModel.handle(DevicesAction.MultiSignoutOtherSessions)
|
||||||
|
}
|
||||||
|
|
||||||
private fun initOtherSessionsView() {
|
private fun initOtherSessionsView() {
|
||||||
views.deviceListOtherSessions.callback = this
|
views.deviceListOtherSessions.callback = this
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ import im.vector.app.features.settings.devices.v2.filter.DeviceManagerFilterType
|
||||||
import im.vector.app.features.settings.devices.v2.list.OtherSessionsView
|
import im.vector.app.features.settings.devices.v2.list.OtherSessionsView
|
||||||
import im.vector.app.features.settings.devices.v2.list.SESSION_IS_MARKED_AS_INACTIVE_AFTER_DAYS
|
import im.vector.app.features.settings.devices.v2.list.SESSION_IS_MARKED_AS_INACTIVE_AFTER_DAYS
|
||||||
import im.vector.app.features.settings.devices.v2.more.SessionLearnMoreBottomSheet
|
import im.vector.app.features.settings.devices.v2.more.SessionLearnMoreBottomSheet
|
||||||
|
import im.vector.app.features.settings.devices.v2.signout.BuildConfirmSignoutDialogUseCase
|
||||||
import im.vector.app.features.themes.ThemeUtils
|
import im.vector.app.features.themes.ThemeUtils
|
||||||
import org.matrix.android.sdk.api.auth.data.LoginFlowTypes
|
import org.matrix.android.sdk.api.auth.data.LoginFlowTypes
|
||||||
import org.matrix.android.sdk.api.extensions.orFalse
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
|
@ -70,6 +71,8 @@ class OtherSessionsFragment :
|
||||||
|
|
||||||
@Inject lateinit var viewNavigator: OtherSessionsViewNavigator
|
@Inject lateinit var viewNavigator: OtherSessionsViewNavigator
|
||||||
|
|
||||||
|
@Inject lateinit var buildConfirmSignoutDialogUseCase: BuildConfirmSignoutDialogUseCase
|
||||||
|
|
||||||
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentOtherSessionsBinding {
|
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentOtherSessionsBinding {
|
||||||
return FragmentOtherSessionsBinding.inflate(layoutInflater, container, false)
|
return FragmentOtherSessionsBinding.inflate(layoutInflater, container, false)
|
||||||
}
|
}
|
||||||
|
@ -124,13 +127,24 @@ class OtherSessionsFragment :
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.otherSessionsMultiSignout -> {
|
R.id.otherSessionsMultiSignout -> {
|
||||||
viewModel.handle(OtherSessionsAction.MultiSignout)
|
confirmMultiSignout()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun confirmMultiSignout() {
|
||||||
|
activity?.let {
|
||||||
|
buildConfirmSignoutDialogUseCase.execute(it, this::multiSignout)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun multiSignout() {
|
||||||
|
viewModel.handle(OtherSessionsAction.MultiSignout)
|
||||||
|
}
|
||||||
|
|
||||||
private fun enableSelectMode(isEnabled: Boolean, deviceId: String? = null) {
|
private fun enableSelectMode(isEnabled: Boolean, deviceId: String? = null) {
|
||||||
val action = if (isEnabled) OtherSessionsAction.EnableSelectMode(deviceId) else OtherSessionsAction.DisableSelectMode
|
val action = if (isEnabled) OtherSessionsAction.EnableSelectMode(deviceId) else OtherSessionsAction.DisableSelectMode
|
||||||
viewModel.handle(action)
|
viewModel.handle(action)
|
||||||
|
|
|
@ -29,7 +29,6 @@ import androidx.core.view.isVisible
|
||||||
import com.airbnb.mvrx.Success
|
import com.airbnb.mvrx.Success
|
||||||
import com.airbnb.mvrx.fragmentViewModel
|
import com.airbnb.mvrx.fragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.date.VectorDateFormatter
|
import im.vector.app.core.date.VectorDateFormatter
|
||||||
|
@ -45,6 +44,7 @@ import im.vector.app.features.crypto.recover.SetupMode
|
||||||
import im.vector.app.features.settings.devices.v2.list.SessionInfoViewState
|
import im.vector.app.features.settings.devices.v2.list.SessionInfoViewState
|
||||||
import im.vector.app.features.settings.devices.v2.more.SessionLearnMoreBottomSheet
|
import im.vector.app.features.settings.devices.v2.more.SessionLearnMoreBottomSheet
|
||||||
import im.vector.app.features.settings.devices.v2.notification.NotificationsStatus
|
import im.vector.app.features.settings.devices.v2.notification.NotificationsStatus
|
||||||
|
import im.vector.app.features.settings.devices.v2.signout.BuildConfirmSignoutDialogUseCase
|
||||||
import im.vector.app.features.workers.signout.SignOutUiWorker
|
import im.vector.app.features.workers.signout.SignOutUiWorker
|
||||||
import org.matrix.android.sdk.api.auth.data.LoginFlowTypes
|
import org.matrix.android.sdk.api.auth.data.LoginFlowTypes
|
||||||
import org.matrix.android.sdk.api.extensions.orFalse
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
|
@ -69,6 +69,8 @@ class SessionOverviewFragment :
|
||||||
|
|
||||||
@Inject lateinit var stringProvider: StringProvider
|
@Inject lateinit var stringProvider: StringProvider
|
||||||
|
|
||||||
|
@Inject lateinit var buildConfirmSignoutDialogUseCase: BuildConfirmSignoutDialogUseCase
|
||||||
|
|
||||||
private val viewModel: SessionOverviewViewModel by fragmentViewModel()
|
private val viewModel: SessionOverviewViewModel by fragmentViewModel()
|
||||||
|
|
||||||
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentSessionOverviewBinding {
|
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentSessionOverviewBinding {
|
||||||
|
@ -134,13 +136,7 @@ class SessionOverviewFragment :
|
||||||
|
|
||||||
private fun confirmSignoutOtherSession() {
|
private fun confirmSignoutOtherSession() {
|
||||||
activity?.let {
|
activity?.let {
|
||||||
MaterialAlertDialogBuilder(it)
|
buildConfirmSignoutDialogUseCase.execute(it, this::signoutSession)
|
||||||
.setTitle(R.string.action_sign_out)
|
|
||||||
.setMessage(R.string.action_sign_out_confirmation_simple)
|
|
||||||
.setPositiveButton(R.string.action_sign_out) { _, _ ->
|
|
||||||
signoutSession()
|
|
||||||
}
|
|
||||||
.setNegativeButton(R.string.action_cancel, null)
|
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.settings.devices.v2.signout
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.appcompat.app.AlertDialog
|
||||||
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
|
import im.vector.app.R
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class BuildConfirmSignoutDialogUseCase @Inject constructor() {
|
||||||
|
|
||||||
|
fun execute(context: Context, onConfirm: () -> Unit): AlertDialog {
|
||||||
|
return MaterialAlertDialogBuilder(context)
|
||||||
|
.setTitle(R.string.action_sign_out)
|
||||||
|
.setMessage(R.string.action_sign_out_confirmation_simple)
|
||||||
|
.setPositiveButton(R.string.action_sign_out) { _, _ ->
|
||||||
|
onConfirm()
|
||||||
|
}
|
||||||
|
.setNegativeButton(R.string.action_cancel, null)
|
||||||
|
.create()
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue