mirror of
https://github.com/vector-im/element-android.git
synced 2024-11-15 01:35:07 +08:00
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
1
changelog.d/7693.feature
Normal file
1
changelog.d/7693.feature
Normal file
@ -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="one">Sign out of %1$d session</item>
|
||||||
<item quantity="other">Sign out of %1$d sessions</item>
|
<item quantity="other">Sign out of %1$d sessions</item>
|
||||||
</plurals>
|
</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_show_ip_address">Show IP address</string>
|
||||||
<string name="device_manager_other_sessions_hide_ip_address">Hide 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>
|
<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.list.SessionInfoViewState
|
||||||
import im.vector.app.features.settings.devices.v2.signout.BuildConfirmSignoutDialogUseCase
|
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.extensions.orFalse
|
||||||
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
|
||||||
|
|
||||||
@ -99,6 +100,7 @@ class VectorSettingsDevicesFragment :
|
|||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
initWaitingView()
|
initWaitingView()
|
||||||
|
initCurrentSessionHeaderView()
|
||||||
initOtherSessionsHeaderView()
|
initOtherSessionsHeaderView()
|
||||||
initOtherSessionsView()
|
initOtherSessionsView()
|
||||||
initSecurityRecommendationsView()
|
initSecurityRecommendationsView()
|
||||||
@ -139,6 +141,18 @@ class VectorSettingsDevicesFragment :
|
|||||||
views.waitingView.waitingStatusText.isVisible = true
|
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() {
|
private fun initOtherSessionsHeaderView() {
|
||||||
views.deviceListHeaderOtherSessions.setOnMenuItemClickListener { menuItem ->
|
views.deviceListHeaderOtherSessions.setOnMenuItemClickListener { menuItem ->
|
||||||
when (menuItem.itemId) {
|
when (menuItem.itemId) {
|
||||||
@ -247,7 +261,7 @@ class VectorSettingsDevicesFragment :
|
|||||||
val otherDevices = devices?.filter { it.deviceInfo.deviceId != currentDeviceId }
|
val otherDevices = devices?.filter { it.deviceInfo.deviceId != currentDeviceId }
|
||||||
|
|
||||||
renderSecurityRecommendations(state.inactiveSessionsCount, state.unverifiedSessionsCount, isCurrentSessionVerified)
|
renderSecurityRecommendations(state.inactiveSessionsCount, state.unverifiedSessionsCount, isCurrentSessionVerified)
|
||||||
renderCurrentDevice(currentDeviceInfo)
|
renderCurrentSessionView(currentDeviceInfo, hasOtherDevices = otherDevices?.isNotEmpty().orFalse())
|
||||||
renderOtherSessionsView(otherDevices, state.isShowingIpAddress)
|
renderOtherSessionsView(otherDevices, state.isShowingIpAddress)
|
||||||
} else {
|
} else {
|
||||||
hideSecurityRecommendations()
|
hideSecurityRecommendations()
|
||||||
@ -310,11 +324,11 @@ class VectorSettingsDevicesFragment :
|
|||||||
hideOtherSessionsView()
|
hideOtherSessionsView()
|
||||||
} else {
|
} else {
|
||||||
views.deviceListHeaderOtherSessions.isVisible = true
|
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 multiSignoutItem = views.deviceListHeaderOtherSessions.menu.findItem(R.id.otherSessionsHeaderMultiSignout)
|
||||||
val nbDevices = otherDevices.size
|
val nbDevices = otherDevices.size
|
||||||
multiSignoutItem.title = stringProvider.getQuantityString(R.plurals.device_manager_other_sessions_multi_signout_all, nbDevices, nbDevices)
|
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
|
views.deviceListOtherSessions.isVisible = true
|
||||||
val devices = if (isShowingIpAddress) otherDevices else otherDevices.map { it.copy(deviceInfo = it.deviceInfo.copy(lastSeenIp = null)) }
|
val devices = if (isShowingIpAddress) otherDevices else otherDevices.map { it.copy(deviceInfo = it.deviceInfo.copy(lastSeenIp = null)) }
|
||||||
views.deviceListOtherSessions.render(
|
views.deviceListOtherSessions.render(
|
||||||
@ -327,7 +341,7 @@ class VectorSettingsDevicesFragment :
|
|||||||
} else {
|
} else {
|
||||||
stringProvider.getString(R.string.device_manager_other_sessions_show_ip_address)
|
stringProvider.getString(R.string.device_manager_other_sessions_show_ip_address)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun hideOtherSessionsView() {
|
private fun hideOtherSessionsView() {
|
||||||
@ -335,9 +349,13 @@ class VectorSettingsDevicesFragment :
|
|||||||
views.deviceListOtherSessions.isVisible = false
|
views.deviceListOtherSessions.isVisible = false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderCurrentDevice(currentDeviceInfo: DeviceFullInfo?) {
|
private fun renderCurrentSessionView(currentDeviceInfo: DeviceFullInfo?, hasOtherDevices: Boolean) {
|
||||||
currentDeviceInfo?.let {
|
currentDeviceInfo?.let {
|
||||||
views.deviceListHeaderCurrentSession.isVisible = true
|
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
|
views.deviceListCurrentSession.isVisible = true
|
||||||
val viewState = SessionInfoViewState(
|
val viewState = SessionInfoViewState(
|
||||||
isCurrentSession = true,
|
isCurrentSession = true,
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
app:layout_constraintTop_toBottomOf="@id/deviceListSecurityRecommendationsDivider"
|
app:layout_constraintTop_toBottomOf="@id/deviceListSecurityRecommendationsDivider"
|
||||||
app:sessionsListHeaderDescription=""
|
app:sessionsListHeaderDescription=""
|
||||||
app:sessionsListHeaderHasLearnMoreLink="false"
|
app:sessionsListHeaderHasLearnMoreLink="false"
|
||||||
|
app:sessionsListHeaderMenu="@menu/menu_current_session_header"
|
||||||
app:sessionsListHeaderTitle="@string/device_manager_current_session_title" />
|
app:sessionsListHeaderTitle="@string/device_manager_current_session_title" />
|
||||||
|
|
||||||
<im.vector.app.features.settings.devices.v2.list.SessionInfoView
|
<im.vector.app.features.settings.devices.v2.list.SessionInfoView
|
||||||
|
12
vector/src/main/res/menu/menu_current_session_header.xml
Normal file
12
vector/src/main/res/menu/menu_current_session_header.xml
Normal file
@ -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
Block a user