mirror of
https://github.com/element-hq/element-android
synced 2024-11-23 09:55:40 +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.SecurityRecommendationViewState
|
||||
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.session.crypto.model.RoomEncryptionTrustLevel
|
||||
import javax.inject.Inject
|
||||
|
@ -75,6 +76,8 @@ class VectorSettingsDevicesFragment :
|
|||
|
||||
@Inject lateinit var stringProvider: StringProvider
|
||||
|
||||
@Inject lateinit var buildConfirmSignoutDialogUseCase: BuildConfirmSignoutDialogUseCase
|
||||
|
||||
private val viewModel: DevicesViewModel by fragmentViewModel()
|
||||
|
||||
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentSettingsDevicesBinding {
|
||||
|
@ -140,8 +143,7 @@ class VectorSettingsDevicesFragment :
|
|||
views.deviceListHeaderOtherSessions.setOnMenuItemClickListener { menuItem ->
|
||||
when (menuItem.itemId) {
|
||||
R.id.otherSessionsHeaderMultiSignout -> {
|
||||
// TODO ask for confirmation
|
||||
viewModel.handle(DevicesAction.MultiSignoutOtherSessions)
|
||||
confirmMultiSignoutOtherSessions()
|
||||
true
|
||||
}
|
||||
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() {
|
||||
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.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.signout.BuildConfirmSignoutDialogUseCase
|
||||
import im.vector.app.features.themes.ThemeUtils
|
||||
import org.matrix.android.sdk.api.auth.data.LoginFlowTypes
|
||||
import org.matrix.android.sdk.api.extensions.orFalse
|
||||
|
@ -70,6 +71,8 @@ class OtherSessionsFragment :
|
|||
|
||||
@Inject lateinit var viewNavigator: OtherSessionsViewNavigator
|
||||
|
||||
@Inject lateinit var buildConfirmSignoutDialogUseCase: BuildConfirmSignoutDialogUseCase
|
||||
|
||||
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentOtherSessionsBinding {
|
||||
return FragmentOtherSessionsBinding.inflate(layoutInflater, container, false)
|
||||
}
|
||||
|
@ -124,13 +127,24 @@ class OtherSessionsFragment :
|
|||
true
|
||||
}
|
||||
R.id.otherSessionsMultiSignout -> {
|
||||
viewModel.handle(OtherSessionsAction.MultiSignout)
|
||||
confirmMultiSignout()
|
||||
true
|
||||
}
|
||||
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) {
|
||||
val action = if (isEnabled) OtherSessionsAction.EnableSelectMode(deviceId) else OtherSessionsAction.DisableSelectMode
|
||||
viewModel.handle(action)
|
||||
|
|
|
@ -29,7 +29,6 @@ import androidx.core.view.isVisible
|
|||
import com.airbnb.mvrx.Success
|
||||
import com.airbnb.mvrx.fragmentViewModel
|
||||
import com.airbnb.mvrx.withState
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.R
|
||||
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.more.SessionLearnMoreBottomSheet
|
||||
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 org.matrix.android.sdk.api.auth.data.LoginFlowTypes
|
||||
import org.matrix.android.sdk.api.extensions.orFalse
|
||||
|
@ -69,6 +69,8 @@ class SessionOverviewFragment :
|
|||
|
||||
@Inject lateinit var stringProvider: StringProvider
|
||||
|
||||
@Inject lateinit var buildConfirmSignoutDialogUseCase: BuildConfirmSignoutDialogUseCase
|
||||
|
||||
private val viewModel: SessionOverviewViewModel by fragmentViewModel()
|
||||
|
||||
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentSessionOverviewBinding {
|
||||
|
@ -134,13 +136,7 @@ class SessionOverviewFragment :
|
|||
|
||||
private fun confirmSignoutOtherSession() {
|
||||
activity?.let {
|
||||
MaterialAlertDialogBuilder(it)
|
||||
.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)
|
||||
buildConfirmSignoutDialogUseCase.execute(it, this::signoutSession)
|
||||
.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