Display device information (name, id and key) in Cryptography setting screen (#1784)

This commit is contained in:
Benoit Marty 2020-08-12 18:00:43 +02:00 committed by Benoit Marty
parent 3c8a4b80d2
commit e6f89b0b22
4 changed files with 76 additions and 66 deletions

View File

@ -6,6 +6,7 @@ Features ✨:
Improvements 🙌:
- Give user the possibility to prevent accidental call (#1869)
- Display device information (name, id and key) in Cryptography setting screen (#1784)
Bugfix 🐛:
- Fix invisible toolbar (Status.im theme) (#1746)

View File

@ -34,12 +34,6 @@ import androidx.preference.PreferenceCategory
import androidx.preference.SwitchPreference
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.textfield.TextInputEditText
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.internal.crypto.crosssigning.isVerified
import org.matrix.android.sdk.internal.crypto.model.ImportRoomKeysResult
import org.matrix.android.sdk.internal.crypto.model.rest.DeviceInfo
import org.matrix.android.sdk.internal.crypto.model.rest.DevicesListResponse
import org.matrix.android.sdk.rx.SecretsSynchronisationInfo
import im.vector.app.R
import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.core.dialogs.ExportKeysDialog
@ -50,6 +44,7 @@ import im.vector.app.core.intent.getFilenameFromUri
import im.vector.app.core.platform.SimpleTextWatcher
import im.vector.app.core.preference.VectorPreference
import im.vector.app.core.preference.VectorPreferenceCategory
import im.vector.app.core.utils.copyToClipboard
import im.vector.app.core.utils.openFileSelection
import im.vector.app.core.utils.toast
import im.vector.app.features.crypto.keys.KeysExporter
@ -65,6 +60,13 @@ import im.vector.app.features.themes.ThemeUtils
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import me.gujun.android.span.span
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.extensions.getFingerprintHumanReadable
import org.matrix.android.sdk.internal.crypto.crosssigning.isVerified
import org.matrix.android.sdk.internal.crypto.model.ImportRoomKeysResult
import org.matrix.android.sdk.internal.crypto.model.rest.DeviceInfo
import org.matrix.android.sdk.internal.crypto.model.rest.DevicesListResponse
import org.matrix.android.sdk.rx.SecretsSynchronisationInfo
import org.matrix.android.sdk.rx.rx
import javax.inject.Inject
@ -85,6 +87,18 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor(
findPreference<PreferenceCategory>(VectorPreferences.SETTINGS_CRYPTOGRAPHY_PREFERENCE_KEY)!!
}
private val cryptoInfoDeviceNamePreference by lazy {
findPreference<VectorPreference>("SETTINGS_ENCRYPTION_INFORMATION_DEVICE_NAME_PREFERENCE_KEY")!!
}
private val cryptoInfoDeviceIdPreference by lazy {
findPreference<VectorPreference>("SETTINGS_ENCRYPTION_INFORMATION_DEVICE_ID_PREFERENCE_KEY")!!
}
private val cryptoInfoDeviceKeyPreference by lazy {
findPreference<VectorPreference>("SETTINGS_ENCRYPTION_INFORMATION_DEVICE_KEY_PREFERENCE_KEY")!!
}
private val mCrossSigningStatePreference by lazy {
findPreference<VectorPreference>(VectorPreferences.SETTINGS_ENCRYPTION_CROSS_SIGNING_PREFERENCE_KEY)!!
}
@ -488,58 +502,48 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor(
/**
* Build the cryptography preference section.
*
* @param aMyDeviceInfo the device info
*/
private fun refreshCryptographyPreference(devices: List<DeviceInfo>) {
showDeviceListPref.isEnabled = devices.isNotEmpty()
showDeviceListPref.summary = resources.getQuantityString(R.plurals.settings_active_sessions_count, devices.size, devices.size)
// val userId = session.myUserId
// val deviceId = session.sessionParams.deviceId
// device name
// if (null != aMyDeviceInfo) {
// cryptoInfoDeviceNamePreference.summary = aMyDeviceInfo.displayName
//
// cryptoInfoDeviceNamePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
// // TODO device can be rename only from the device list screen for the moment
// // displayDeviceRenameDialog(aMyDeviceInfo)
// true
// }
//
// cryptoInfoDeviceNamePreference.onPreferenceLongClickListener = object : VectorPreference.OnPreferenceLongClickListener {
// override fun onPreferenceLongClick(preference: Preference): Boolean {
// activity?.let { copyToClipboard(it, aMyDeviceInfo.displayName!!) }
// return true
// }
// }
// }
//
// // crypto section: device ID
// if (!deviceId.isNullOrEmpty()) {
// cryptoInfoDeviceIdPreference.summary = deviceId
//
// cryptoInfoDeviceIdPreference.setOnPreferenceClickListener {
// activity?.let { copyToClipboard(it, deviceId) }
// true
// }
// }
//
// // crypto section: device key (fingerprint)
// if (!deviceId.isNullOrEmpty() && userId.isNotEmpty()) {
// val deviceInfo = session.getDeviceInfo(userId, deviceId)
//
// if (null != deviceInfo && !deviceInfo.fingerprint().isNullOrEmpty()) {
// cryptoInfoTextPreference.summary = deviceInfo.getFingerprintHumanReadable()
//
// cryptoInfoTextPreference.setOnPreferenceClickListener {
// deviceInfo.fingerprint()?.let {
// copyToClipboard(requireActivity(), it)
// }
// true
// }
// }
// }
val userId = session.myUserId
val deviceId = session.sessionParams.deviceId
val aMyDeviceInfo = devices.find { it.deviceId == deviceId }
// crypto section: device name
if (aMyDeviceInfo != null) {
cryptoInfoDeviceNamePreference.summary = aMyDeviceInfo.displayName
cryptoInfoDeviceNamePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
copyToClipboard(requireActivity(), aMyDeviceInfo.displayName ?: "")
true
}
}
// crypto section: device ID
if (!deviceId.isNullOrEmpty()) {
cryptoInfoDeviceIdPreference.summary = deviceId
cryptoInfoDeviceIdPreference.setOnPreferenceClickListener {
copyToClipboard(requireActivity(), deviceId)
true
}
}
// crypto section: device key (fingerprint)
val deviceInfo = session.cryptoService().getDeviceInfo(userId, deviceId)
val fingerprint = deviceInfo?.fingerprint()
if (fingerprint?.isNotEmpty() == true) {
cryptoInfoDeviceKeyPreference.summary = deviceInfo.getFingerprintHumanReadable()
cryptoInfoDeviceKeyPreference.setOnPreferenceClickListener {
copyToClipboard(requireActivity(), fingerprint)
true
}
}
sendToUnverifiedDevicesPref.isChecked = session.cryptoService().getGlobalBlacklistUnverifiedDevices()

View File

@ -1054,7 +1054,7 @@
<string name="encryption_information_device_name_with_warning">Public name (visible to people you communicate with)</string>
<string name="device_name_warning">"A session's public name is visible to people you communicate with"</string>
<string name="encryption_information_name">Public name</string>
<string name="encryption_information_device_id">ID</string>
<string name="encryption_information_device_id">Session ID</string>
<string name="encryption_information_device_key">Session key</string>
<string name="encryption_information_verification">Verification</string>
<string name="encryption_information_ed25519_fingerprint">Ed25519 fingerprint</string>

View File

@ -7,9 +7,9 @@
android:icon="@drawable/ic_notification_privacy_warning"
android:key="SETTINGS_CRYPTOGRAPHY_HS_ADMIN_DISABLED_E2E_DEFAULT"
android:persistent="false"
tools:summary="@string/settings_hs_admin_e2e_disabled"
app:isPreferenceVisible="false"
tools:isPreferenceVisible="true">
tools:isPreferenceVisible="true"
tools:summary="@string/settings_hs_admin_e2e_disabled">
</im.vector.app.core.preference.VectorPreference>
@ -25,18 +25,23 @@
tools:icon="@drawable/ic_shield_trusted"
tools:summary="@string/encryption_information_dg_xsigning_complete" />
<im.vector.app.core.preference.VectorPreference
android:key="SETTINGS_ENCRYPTION_INFORMATION_DEVICE_NAME_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/encryption_information_device_name"
tools:summary="My public device name" />
<!-- <im.vector.app.core.preference.VectorPreference-->
<!-- android:key="SETTINGS_ENCRYPTION_INFORMATION_DEVICE_NAME_PREFERENCE_KEY"-->
<!-- android:title="@string/encryption_information_device_name" />-->
<im.vector.app.core.preference.VectorPreference
android:key="SETTINGS_ENCRYPTION_INFORMATION_DEVICE_ID_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/encryption_information_device_id"
tools:summary="VZRHETBEER" />
<!-- <im.vector.app.core.preference.VectorPreference-->
<!-- android:key="SETTINGS_ENCRYPTION_INFORMATION_DEVICE_ID_PREFERENCE_KEY"-->
<!-- android:title="@string/encryption_information_device_id" />-->
<!-- <im.vector.app.core.preference.VectorPreference-->
<!-- android:key="SETTINGS_ENCRYPTION_INFORMATION_DEVICE_KEY_PREFERENCE_KEY"-->
<!-- android:title="@string/encryption_information_device_key" />-->
<im.vector.app.core.preference.VectorPreference
android:key="SETTINGS_ENCRYPTION_INFORMATION_DEVICE_KEY_PREFERENCE_KEY"
android:persistent="false"
android:title="@string/encryption_information_device_key"
tools:summary="3To0 8c/K VRJd 4Njb DUgv 6r8A SNp9 ETZt pMwU CpE4 XJE" />
<im.vector.app.core.preference.VectorSwitchPreference
android:enabled="true"