Merge pull request #7696 from vector-im/feature/mna/signout-all-other-sessions
[Session manager] Add action to signout all the other session (PSG-888)
This commit is contained in:
commit
b5f6dc0034
|
@ -0,0 +1 @@
|
|||
[Session manager] Add action to signout all the other session
|
|
@ -3363,6 +3363,7 @@
|
|||
<item quantity="one">Sign out of %1$d session</item>
|
||||
<item quantity="other">Sign out of %1$d sessions</item>
|
||||
</plurals>
|
||||
<string name="device_manager_signout_all_other_sessions">Sign out of all other sessions</string>
|
||||
<string name="device_manager_other_sessions_show_ip_address">Show IP address</string>
|
||||
<string name="device_manager_other_sessions_hide_ip_address">Hide IP address</string>
|
||||
<string name="device_manager_session_overview_signout">Sign out of this session</string>
|
||||
|
|
|
@ -53,6 +53,7 @@ import im.vector.app.features.settings.devices.v2.list.SecurityRecommendationVie
|
|||
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.extensions.orFalse
|
||||
import org.matrix.android.sdk.api.session.crypto.model.RoomEncryptionTrustLevel
|
||||
import javax.inject.Inject
|
||||
|
||||
|
@ -99,6 +100,7 @@ class VectorSettingsDevicesFragment :
|
|||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
initWaitingView()
|
||||
initCurrentSessionHeaderView()
|
||||
initOtherSessionsHeaderView()
|
||||
initOtherSessionsView()
|
||||
initSecurityRecommendationsView()
|
||||
|
@ -139,6 +141,18 @@ class VectorSettingsDevicesFragment :
|
|||
views.waitingView.waitingStatusText.isVisible = true
|
||||
}
|
||||
|
||||
private fun initCurrentSessionHeaderView() {
|
||||
views.deviceListHeaderCurrentSession.setOnMenuItemClickListener { menuItem ->
|
||||
when (menuItem.itemId) {
|
||||
R.id.currentSessionHeaderSignoutOtherSessions -> {
|
||||
confirmMultiSignoutOtherSessions()
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initOtherSessionsHeaderView() {
|
||||
views.deviceListHeaderOtherSessions.setOnMenuItemClickListener { menuItem ->
|
||||
when (menuItem.itemId) {
|
||||
|
@ -247,7 +261,7 @@ class VectorSettingsDevicesFragment :
|
|||
val otherDevices = devices?.filter { it.deviceInfo.deviceId != currentDeviceId }
|
||||
|
||||
renderSecurityRecommendations(state.inactiveSessionsCount, state.unverifiedSessionsCount, isCurrentSessionVerified)
|
||||
renderCurrentDevice(currentDeviceInfo)
|
||||
renderCurrentSessionView(currentDeviceInfo, hasOtherDevices = otherDevices?.isNotEmpty().orFalse())
|
||||
renderOtherSessionsView(otherDevices, state.isShowingIpAddress)
|
||||
} else {
|
||||
hideSecurityRecommendations()
|
||||
|
@ -310,11 +324,11 @@ class VectorSettingsDevicesFragment :
|
|||
hideOtherSessionsView()
|
||||
} else {
|
||||
views.deviceListHeaderOtherSessions.isVisible = true
|
||||
val color = colorProvider.getColorFromAttribute(R.attr.colorError)
|
||||
val colorDestructive = colorProvider.getColorFromAttribute(R.attr.colorError)
|
||||
val multiSignoutItem = views.deviceListHeaderOtherSessions.menu.findItem(R.id.otherSessionsHeaderMultiSignout)
|
||||
val nbDevices = otherDevices.size
|
||||
multiSignoutItem.title = stringProvider.getQuantityString(R.plurals.device_manager_other_sessions_multi_signout_all, nbDevices, nbDevices)
|
||||
multiSignoutItem.setTextColor(color)
|
||||
multiSignoutItem.setTextColor(colorDestructive)
|
||||
views.deviceListOtherSessions.isVisible = true
|
||||
val devices = if (isShowingIpAddress) otherDevices else otherDevices.map { it.copy(deviceInfo = it.deviceInfo.copy(lastSeenIp = null)) }
|
||||
views.deviceListOtherSessions.render(
|
||||
|
@ -327,7 +341,7 @@ class VectorSettingsDevicesFragment :
|
|||
} else {
|
||||
stringProvider.getString(R.string.device_manager_other_sessions_show_ip_address)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun hideOtherSessionsView() {
|
||||
|
@ -335,9 +349,13 @@ class VectorSettingsDevicesFragment :
|
|||
views.deviceListOtherSessions.isVisible = false
|
||||
}
|
||||
|
||||
private fun renderCurrentDevice(currentDeviceInfo: DeviceFullInfo?) {
|
||||
private fun renderCurrentSessionView(currentDeviceInfo: DeviceFullInfo?, hasOtherDevices: Boolean) {
|
||||
currentDeviceInfo?.let {
|
||||
views.deviceListHeaderCurrentSession.isVisible = true
|
||||
val colorDestructive = colorProvider.getColorFromAttribute(R.attr.colorError)
|
||||
val signoutOtherSessionsItem = views.deviceListHeaderCurrentSession.menu.findItem(R.id.currentSessionHeaderSignoutOtherSessions)
|
||||
signoutOtherSessionsItem.setTextColor(colorDestructive)
|
||||
signoutOtherSessionsItem.isVisible = hasOtherDevices
|
||||
views.deviceListCurrentSession.isVisible = true
|
||||
val viewState = SessionInfoViewState(
|
||||
isCurrentSession = true,
|
||||
|
|
|
@ -67,6 +67,7 @@
|
|||
app:layout_constraintTop_toBottomOf="@id/deviceListSecurityRecommendationsDivider"
|
||||
app:sessionsListHeaderDescription=""
|
||||
app:sessionsListHeaderHasLearnMoreLink="false"
|
||||
app:sessionsListHeaderMenu="@menu/menu_current_session_header"
|
||||
app:sessionsListHeaderTitle="@string/device_manager_current_session_title" />
|
||||
|
||||
<im.vector.app.features.settings.devices.v2.list.SessionInfoView
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:ignore="AlwaysShowAction">
|
||||
|
||||
<item
|
||||
android:id="@+id/currentSessionHeaderSignoutOtherSessions"
|
||||
android:title="@string/device_manager_signout_all_other_sessions"
|
||||
app:showAsAction="withText|never" />
|
||||
|
||||
</menu>
|
Loading…
Reference in New Issue