diff --git a/library/ui-strings/src/main/res/values/strings.xml b/library/ui-strings/src/main/res/values/strings.xml
index a3c2e610be..7925ac02c4 100644
--- a/library/ui-strings/src/main/res/values/strings.xml
+++ b/library/ui-strings/src/main/res/values/strings.xml
@@ -3302,9 +3302,13 @@
Session name
Custom session names can help you recognize your devices more easily.
Please be aware that session names are also visible to people you communicate with.
+ Inactive sessions
Inactive sessions are sessions you have not used in some time, but they continue to receive encryption keys.\n\nRemoving inactive sessions improves security and performance, and makes it easier for you to identify if a new session is suspicious.
+ Unverified sessions
Unverified sessions are sessions that have logged in with your credentials but not been cross-verified.\n\nYou should make especially certain that you recognise these sessions as they could represent an unauthorised use of your account.
- This session has logged in with your credentials and then been verified, either using your secure passphrase or by cross-verifying.\n\nThis means it holds encryption keys for your previous messages, and confirms to other users you are communicating with that the session is really you.
+ Verified sessions
+ Verified sessions have logged in with your credentials and then been verified, either using your secure passphrase or by cross-verifying.\n\nThis means they hold encryption keys for your previous messages, and confirm to other users you are communicating with that these sessions are really you.
+ Renaming sessions
Other users in direct messages and rooms that you join are able to view a full list of your sessions.\n\nThis provides them with confidence that they are really speaking to you, but it also means they can see the session name you enter here.
diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt
index 5734b04089..610776e22e 100644
--- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/othersessions/OtherSessionsFragment.kt
@@ -20,6 +20,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.annotation.StringRes
import androidx.core.view.isVisible
import com.airbnb.mvrx.Success
import com.airbnb.mvrx.args
@@ -37,6 +38,7 @@ import im.vector.app.features.settings.devices.v2.filter.DeviceManagerFilterBott
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.themes.ThemeUtils
import javax.inject.Inject
@@ -121,6 +123,7 @@ class OtherSessionsFragment :
)
)
views.otherSessionsNotFoundTextView.text = getString(R.string.device_manager_other_sessions_no_verified_sessions_found)
+ updateSecurityLearnMoreButton(R.string.device_manager_learn_more_sessions_verified_title, R.string.device_manager_learn_more_sessions_verified)
}
DeviceManagerFilterType.UNVERIFIED -> {
views.otherSessionsSecurityRecommendationView.render(
@@ -132,6 +135,10 @@ class OtherSessionsFragment :
)
)
views.otherSessionsNotFoundTextView.text = getString(R.string.device_manager_other_sessions_no_unverified_sessions_found)
+ updateSecurityLearnMoreButton(
+ R.string.device_manager_learn_more_sessions_unverified_title,
+ R.string.device_manager_learn_more_sessions_unverified
+ )
}
DeviceManagerFilterType.INACTIVE -> {
views.otherSessionsSecurityRecommendationView.render(
@@ -147,8 +154,10 @@ class OtherSessionsFragment :
)
)
views.otherSessionsNotFoundTextView.text = getString(R.string.device_manager_other_sessions_no_inactive_sessions_found)
+ updateSecurityLearnMoreButton(R.string.device_manager_learn_more_sessions_inactive_title, R.string.device_manager_learn_more_sessions_inactive)
+ }
+ DeviceManagerFilterType.ALL_SESSIONS -> { /* NOOP. View is not visible */
}
- DeviceManagerFilterType.ALL_SESSIONS -> { /* NOOP. View is not visible */ }
}
if (devices.isNullOrEmpty()) {
@@ -161,6 +170,26 @@ class OtherSessionsFragment :
}
}
+ private fun updateSecurityLearnMoreButton(
+ @StringRes titleResId: Int,
+ @StringRes descriptionResId: Int,
+ ) {
+ views.otherSessionsSecurityRecommendationView.onLearnMoreClickListener = {
+ showLearnMoreInfo(titleResId, getString(descriptionResId))
+ }
+ }
+
+ private fun showLearnMoreInfo(
+ @StringRes titleResId: Int,
+ description: String,
+ ) {
+ val args = SessionLearnMoreBottomSheet.Args(
+ title = getString(titleResId),
+ description = description,
+ )
+ SessionLearnMoreBottomSheet.show(childFragmentManager, args)
+ }
+
override fun onOtherSessionClicked(deviceId: String) {
viewNavigator.navigateToSessionOverview(
context = requireActivity(),
diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/overview/SessionOverviewFragment.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/overview/SessionOverviewFragment.kt
index 2b216b8436..8c3b907070 100644
--- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/overview/SessionOverviewFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/overview/SessionOverviewFragment.kt
@@ -262,7 +262,7 @@ class SessionOverviewFragment :
R.string.device_manager_verification_status_unverified
}
val descriptionResId = if (isVerified) {
- R.string.device_manager_learn_more_session_verified
+ R.string.device_manager_learn_more_sessions_verified
} else {
R.string.device_manager_learn_more_sessions_unverified
}
diff --git a/vector/src/main/res/layout/fragment_other_sessions.xml b/vector/src/main/res/layout/fragment_other_sessions.xml
index 037f85ad28..e25b8b185f 100644
--- a/vector/src/main/res/layout/fragment_other_sessions.xml
+++ b/vector/src/main/res/layout/fragment_other_sessions.xml
@@ -53,11 +53,12 @@
android:id="@+id/deviceListHeaderOtherSessions"
android:layout_width="0dp"
android:layout_height="wrap_content"
- app:sessionsListHeaderDescription="@string/device_manager_sessions_other_description"
- app:sessionsListHeaderTitle=""
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@id/appBarLayout" />
+ app:layout_constraintTop_toBottomOf="@id/appBarLayout"
+ app:sessionsListHeaderDescription="@string/device_manager_sessions_other_description"
+ app:sessionsListHeaderHasLearnMoreLink="false"
+ app:sessionsListHeaderTitle="" />