From 8115e2eb0feb517f95e86baaf8873398b30c3cf4 Mon Sep 17 00:00:00 2001 From: Jarno Rankinen Date: Sat, 7 Oct 2023 13:54:36 +0300 Subject: [PATCH] Add setting in Labs to hide the encyption shields from next to messages in rooms --- library/ui-strings/src/main/res/values/strings.xml | 3 +++ .../app/features/debug/features/DebugVectorFeatures.kt | 4 ++++ vector-config/src/main/res/values/config-settings.xml | 1 + .../main/java/im/vector/app/features/VectorFeatures.kt | 2 ++ .../timeline/helper/MessageInformationDataFactory.kt | 4 +++- .../im/vector/app/features/settings/VectorPreferences.kt | 9 +++++++++ .../features/settings/labs/VectorSettingsLabsFragment.kt | 4 ++++ vector/src/main/res/xml/vector_settings_labs.xml | 6 ++++++ 8 files changed, 32 insertions(+), 1 deletion(-) diff --git a/library/ui-strings/src/main/res/values/strings.xml b/library/ui-strings/src/main/res/values/strings.xml index 9f842a5741..f63e36b577 100644 --- a/library/ui-strings/src/main/res/values/strings.xml +++ b/library/ui-strings/src/main/res/values/strings.xml @@ -463,6 +463,9 @@ Enable new layout A simplified Element with optional tabs + Hide encryption shields + Hide encryption shields next to messages in rooms + Enable deferred DMs Create DM only on first message diff --git a/vector-app/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt b/vector-app/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt index 2134c8cf2c..33fb3a2b1f 100644 --- a/vector-app/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt +++ b/vector-app/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt @@ -76,6 +76,9 @@ class DebugVectorFeatures( override fun isNewAppLayoutFeatureEnabled(): Boolean = read(DebugFeatureKeys.newAppLayoutEnabled) ?: vectorFeatures.isNewAppLayoutFeatureEnabled() + override fun isShieldVisibilityDisabled(): Boolean = read(DebugFeatureKeys.shieldVisibilityDisabled) + ?: vectorFeatures.isShieldVisibilityDisabled() + override fun isQrCodeLoginEnabled() = read(DebugFeatureKeys.qrCodeLoginEnabled) ?: vectorFeatures.isQrCodeLoginEnabled() @@ -150,6 +153,7 @@ object DebugFeatureKeys { val screenSharing = booleanPreferencesKey("screen-sharing") val forceUsageOfOpusEncoder = booleanPreferencesKey("force-usage-of-opus-encoder") val newAppLayoutEnabled = booleanPreferencesKey("new-app-layout-enabled") + val shieldVisibilityDisabled = booleanPreferencesKey("shield-visibility-disabled") val qrCodeLoginEnabled = booleanPreferencesKey("qr-code-login-enabled") val qrCodeLoginForAllServers = booleanPreferencesKey("qr-code-login-for-all-servers") val reciprocateQrCodeLogin = booleanPreferencesKey("reciprocate-qr-code-login") diff --git a/vector-config/src/main/res/values/config-settings.xml b/vector-config/src/main/res/values/config-settings.xml index a8695eed44..25d74c0e48 100755 --- a/vector-config/src/main/res/values/config-settings.xml +++ b/vector-config/src/main/res/values/config-settings.xml @@ -41,6 +41,7 @@ true true true + true false true false diff --git a/vector/src/main/java/im/vector/app/features/VectorFeatures.kt b/vector/src/main/java/im/vector/app/features/VectorFeatures.kt index 99abc15f81..8a4fd96317 100644 --- a/vector/src/main/java/im/vector/app/features/VectorFeatures.kt +++ b/vector/src/main/java/im/vector/app/features/VectorFeatures.kt @@ -40,6 +40,7 @@ interface VectorFeatures { * use [VectorPreferences.isNewAppLayoutEnabled] instead. */ fun isNewAppLayoutFeatureEnabled(): Boolean + fun isShieldVisibilityDisabled(): Boolean fun isQrCodeLoginEnabled(): Boolean fun isQrCodeLoginForAllServers(): Boolean fun isReciprocateQrCodeLogin(): Boolean @@ -60,6 +61,7 @@ class DefaultVectorFeatures : VectorFeatures { override fun isLocationSharingEnabled() = Config.ENABLE_LOCATION_SHARING override fun forceUsageOfOpusEncoder(): Boolean = false override fun isNewAppLayoutFeatureEnabled(): Boolean = true + override fun isShieldVisibilityDisabled(): Boolean = true override fun isQrCodeLoginEnabled(): Boolean = true override fun isQrCodeLoginForAllServers(): Boolean = false override fun isReciprocateQrCodeLogin(): Boolean = false diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt index 7f0d40a0aa..2d7f6ee66a 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt @@ -26,6 +26,7 @@ import im.vector.app.features.home.room.detail.timeline.item.MessageInformationD import im.vector.app.features.home.room.detail.timeline.item.ReferencesInfoData import im.vector.app.features.home.room.detail.timeline.item.SendStateDecoration import im.vector.app.features.home.room.detail.timeline.style.TimelineMessageLayoutFactory +import im.vector.app.features.settings.VectorPreferences import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.crypto.model.MessageVerificationState @@ -55,6 +56,7 @@ class MessageInformationDataFactory @Inject constructor( private val messageLayoutFactory: TimelineMessageLayoutFactory, private val reactionsSummaryFactory: ReactionsSummaryFactory, private val pollResponseDataFactory: PollResponseDataFactory, + private val vectorPreferences: VectorPreferences, ) { fun create(params: TimelineItemFactoryParams): MessageInformationData { @@ -147,7 +149,7 @@ class MessageInformationDataFactory @Inject constructor( } private fun getE2EDecorationV2(roomSummary: RoomSummary?, event: Event): E2EDecoration { - if (roomSummary?.isEncrypted != true) { + if (roomSummary?.isEncrypted != true || vectorPreferences.isShieldVisibilityDisabled()) { // No decoration for clear room // Questionable? what if the event is E2E? return E2EDecoration.NONE diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt index 0dd8d14460..b1d2677ded 100755 --- a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt @@ -70,6 +70,7 @@ class VectorPreferences @Inject constructor( const val SETTINGS_BACKGROUND_SYNC_DIVIDER_PREFERENCE_KEY = "SETTINGS_BACKGROUND_SYNC_DIVIDER_PREFERENCE_KEY" const val SETTINGS_LABS_PREFERENCE_KEY = "SETTINGS_LABS_PREFERENCE_KEY" const val SETTINGS_LABS_NEW_APP_LAYOUT_KEY = "SETTINGS_LABS_NEW_APP_LAYOUT_KEY" + const val SETTINGS_LABS_HIDE_SHIELDS_KEY = "SETTINGS_LABS_HIDE_SHIELDS_KEY" const val SETTINGS_LABS_DEFERRED_DM_KEY = "SETTINGS_LABS_DEFERRED_DM_KEY" const val SETTINGS_LABS_RICH_TEXT_EDITOR_KEY = "SETTINGS_LABS_RICH_TEXT_EDITOR_KEY" const val SETTINGS_LABS_NEW_SESSION_MANAGER_KEY = "SETTINGS_LABS_NEW_SESSION_MANAGER_KEY" @@ -1217,6 +1218,14 @@ class VectorPreferences @Inject constructor( defaultPrefs.getBoolean(SETTINGS_LABS_NEW_APP_LAYOUT_KEY, getDefault(R.bool.settings_labs_new_app_layout_default)) } + /** + * Indicates if the encryption shields in rooms next to messages are hidden + */ + fun isShieldVisibilityDisabled() : Boolean { + return vectorFeatures.isShieldVisibilityDisabled() && + defaultPrefs.getBoolean(SETTINGS_LABS_HIDE_SHIELDS_KEY, getDefault(R.bool.settings_labs_hide_shields_default)) + } + /** * Indicates whether or not deferred DMs are enabled. */ diff --git a/vector/src/main/java/im/vector/app/features/settings/labs/VectorSettingsLabsFragment.kt b/vector/src/main/java/im/vector/app/features/settings/labs/VectorSettingsLabsFragment.kt index 73a2eb1b73..d159dff54b 100644 --- a/vector/src/main/java/im/vector/app/features/settings/labs/VectorSettingsLabsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/labs/VectorSettingsLabsFragment.kt @@ -96,6 +96,10 @@ class VectorSettingsLabsFragment : } } + findPreference(VectorPreferences.SETTINGS_LABS_HIDE_SHIELDS_KEY)?.let { pref -> + pref.isChecked = vectorFeatures.isShieldVisibilityDisabled() + } + findPreference(VectorPreferences.SETTINGS_LABS_VOICE_BROADCAST_KEY)?.let { pref -> // Voice Broadcast recording is not available on Android < 10 pref.isVisible = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && vectorFeatures.isVoiceBroadcastEnabled() diff --git a/vector/src/main/res/xml/vector_settings_labs.xml b/vector/src/main/res/xml/vector_settings_labs.xml index 15a255753a..84761bd8ad 100644 --- a/vector/src/main/res/xml/vector_settings_labs.xml +++ b/vector/src/main/res/xml/vector_settings_labs.xml @@ -89,6 +89,12 @@ android:summary="@string/labs_enable_new_app_layout_summary" android:title="@string/labs_enable_new_app_layout_title" /> + +