diff --git a/vector-app/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt b/vector-app/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt index 9118dea1e3..be25ffe0af 100644 --- a/vector-app/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt +++ b/vector-app/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt @@ -90,6 +90,11 @@ class DebugFeaturesStateFactory @Inject constructor( key = DebugFeatureKeys.newDeviceManagementEnabled, factory = VectorFeatures::isNewDeviceManagementEnabled ), + createBooleanFeature( + label = "Enable QR Code Login", + key = DebugFeatureKeys.qrCodeLoginEnabled, + factory = VectorFeatures::isQrCodeLoginEnabled + ), ) ) } 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 c01c058fc6..e4b151329d 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 @@ -79,6 +79,9 @@ class DebugVectorFeatures( override fun isNewDeviceManagementEnabled(): Boolean = read(DebugFeatureKeys.newDeviceManagementEnabled) ?: vectorFeatures.isNewDeviceManagementEnabled() + override fun isQrCodeLoginEnabled() = read(DebugFeatureKeys.qrCodeLoginEnabled) + ?: vectorFeatures.isQrCodeLoginEnabled() + fun override(value: T?, key: Preferences.Key) = updatePreferences { if (value == null) { it.remove(key) @@ -140,4 +143,5 @@ object DebugFeatureKeys { val startDmOnFirstMsg = booleanPreferencesKey("start-dm-on-first-msg") val newAppLayoutEnabled = booleanPreferencesKey("new-app-layout-enabled") val newDeviceManagementEnabled = booleanPreferencesKey("new-device-management-enabled") + val qrCodeLoginEnabled = booleanPreferencesKey("qr-code-login-enabled") } 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 e1c083db29..df952d8592 100644 --- a/vector/src/main/java/im/vector/app/features/VectorFeatures.kt +++ b/vector/src/main/java/im/vector/app/features/VectorFeatures.kt @@ -41,6 +41,7 @@ interface VectorFeatures { */ fun isNewAppLayoutFeatureEnabled(): Boolean fun isNewDeviceManagementEnabled(): Boolean + fun isQrCodeLoginEnabled(): Boolean } class DefaultVectorFeatures : VectorFeatures { @@ -57,4 +58,5 @@ class DefaultVectorFeatures : VectorFeatures { override fun forceUsageOfOpusEncoder(): Boolean = false override fun isNewAppLayoutFeatureEnabled(): Boolean = true override fun isNewDeviceManagementEnabled(): Boolean = false + override fun isQrCodeLoginEnabled(): Boolean = false } diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedLoginFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedLoginFragment.kt index 50a9d2c1ae..0a7ce22853 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedLoginFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedLoginFragment.kt @@ -36,6 +36,7 @@ import im.vector.app.core.extensions.setOnFocusLostListener import im.vector.app.core.extensions.setOnImeDoneListener import im.vector.app.core.extensions.toReducedUrl import im.vector.app.databinding.FragmentFtueCombinedLoginBinding +import im.vector.app.features.VectorFeatures import im.vector.app.features.login.LoginMode import im.vector.app.features.login.SSORedirectRouterActivity import im.vector.app.features.login.SocialLoginButtonsView @@ -57,6 +58,7 @@ class FtueAuthCombinedLoginFragment : @Inject lateinit var loginFieldsValidation: LoginFieldsValidation @Inject lateinit var loginErrorParser: LoginErrorParser + @Inject lateinit var vectorFeatures: VectorFeatures override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFtueCombinedLoginBinding { return FragmentFtueCombinedLoginBinding.inflate(inflater, container, false) @@ -72,15 +74,19 @@ class FtueAuthCombinedLoginFragment : viewModel.handle(OnboardingAction.UserNameEnteredAction.Login(views.loginInput.content())) } views.loginForgotPassword.debouncedClicks { viewModel.handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.OnForgetPasswordClicked)) } - views.loginWithQrCode.debouncedClicks { - navigator - .openLoginWithQrCode( - requireActivity(), - QrCodeLoginArgs( - loginType = QrCodeLoginType.LOGIN, - showQrCodeByDefault = false, - ) - ) + if (vectorFeatures.isQrCodeLoginEnabled()) { + views.loginWithQrCode.debouncedClicks { + navigator + .openLoginWithQrCode( + requireActivity(), + QrCodeLoginArgs( + loginType = QrCodeLoginType.LOGIN, + showQrCodeByDefault = false, + ) + ) + } + } else { + views.loginWithQrCode.isVisible = false } } diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt index cfd9703773..937d41e091 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/VectorSettingsDevicesFragment.kt @@ -35,6 +35,7 @@ import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.resources.ColorProvider import im.vector.app.core.resources.DrawableProvider import im.vector.app.databinding.FragmentSettingsDevicesBinding +import im.vector.app.features.VectorFeatures import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.crypto.verification.VerificationBottomSheet import im.vector.app.features.login.qr.QrCodeLoginArgs @@ -64,6 +65,8 @@ class VectorSettingsDevicesFragment : @Inject lateinit var colorProvider: ColorProvider + @Inject lateinit var vectorFeatures: VectorFeatures + private val viewModel: DevicesViewModel by fragmentViewModel() override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentSettingsDevicesBinding { @@ -154,6 +157,17 @@ class VectorSettingsDevicesFragment : } private fun initQrLoginView() { + if (!vectorFeatures.isQrCodeLoginEnabled()) { + views.deviceListHeaderSignInWithQrCode.isVisible = false + views.deviceListHeaderScanQrCodeButton.isVisible = false + views.deviceListHeaderShowQrCodeButton.isVisible = false + return + } + + views.deviceListHeaderSignInWithQrCode.isVisible = true + views.deviceListHeaderScanQrCodeButton.isVisible = true + views.deviceListHeaderShowQrCodeButton.isVisible = true + views.deviceListHeaderScanQrCodeButton.debouncedClicks { navigator .openLoginWithQrCode(