From bb82fb0baa1ad2631d017eed3351fd68558ca357 Mon Sep 17 00:00:00 2001 From: Cris Barreiro Date: Wed, 12 Feb 2025 18:18:31 +0100 Subject: [PATCH] Check enableMaliciousSiteProtection flag to set settigns visibility (#5639) Task/Issue URL: https://app.asana.com/0/0/1209386990832086/f ### Description Check enableMaliciousSiteProtection flag to set settings visibility ### Steps to test this PR _Feature 1_ - [x] With enableMaliciousSiteProtection disabled, check MSP settings are not shown in general settings _Feature 2_ - [x] With enableMaliciousSiteProtection enabled, check MSP settings are shown in general settings and are functional --- .../GeneralSettingsActivity.kt | 19 ++++++++++++++----- .../GeneralSettingsViewModel.kt | 4 ++++ .../res/layout/activity_general_settings.xml | 1 + .../GeneralSettingsViewModelTest.kt | 5 +++++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/duckduckgo/app/generalsettings/GeneralSettingsActivity.kt b/app/src/main/java/com/duckduckgo/app/generalsettings/GeneralSettingsActivity.kt index 370a28d7cded..fc5d70cf7ca5 100644 --- a/app/src/main/java/com/duckduckgo/app/generalsettings/GeneralSettingsActivity.kt +++ b/app/src/main/java/com/duckduckgo/app/generalsettings/GeneralSettingsActivity.kt @@ -126,11 +126,20 @@ class GeneralSettingsActivity : DuckDuckGoActivity() { } else { binding.autocompleteRecentlyVisitedSitesToggle.isVisible = false } - binding.maliciousDisabledMessage.isVisible = !it.maliciousSiteProtectionEnabled - binding.maliciousToggle.quietlySetIsChecked( - newCheckedState = it.maliciousSiteProtectionEnabled, - changeListener = maliciousSiteProtectionToggleListener, - ) + if (it.maliciousSiteProtectionFeatureAvailable) { + binding.maliciousDisabledMessage.isVisible = !it.maliciousSiteProtectionEnabled + binding.maliciousToggle.quietlySetIsChecked( + newCheckedState = it.maliciousSiteProtectionEnabled, + changeListener = maliciousSiteProtectionToggleListener, + ) + } else { + binding.maliciousDisabledMessage.isVisible = false + } + binding.maliciousLearnMore.isVisible = it.maliciousSiteProtectionFeatureAvailable + binding.maliciousSiteDivider.isVisible = it.maliciousSiteProtectionFeatureAvailable + binding.maliciousSiteHeading.isVisible = it.maliciousSiteProtectionFeatureAvailable + binding.maliciousToggle.isVisible = it.maliciousSiteProtectionFeatureAvailable + if (it.showVoiceSearch) { binding.voiceSearchToggle.isVisible = true binding.voiceSearchToggle.quietlySetIsChecked(viewState.voiceSearchEnabled, voiceSearchChangeListener) diff --git a/app/src/main/java/com/duckduckgo/app/generalsettings/GeneralSettingsViewModel.kt b/app/src/main/java/com/duckduckgo/app/generalsettings/GeneralSettingsViewModel.kt index 769dc7e32001..939210b41dd3 100644 --- a/app/src/main/java/com/duckduckgo/app/generalsettings/GeneralSettingsViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/generalsettings/GeneralSettingsViewModel.kt @@ -27,6 +27,7 @@ import com.duckduckgo.app.pixels.AppPixelName.AUTOCOMPLETE_GENERAL_SETTINGS_TOGG import com.duckduckgo.app.pixels.AppPixelName.AUTOCOMPLETE_GENERAL_SETTINGS_TOGGLED_ON import com.duckduckgo.app.pixels.AppPixelName.AUTOCOMPLETE_RECENT_SITES_GENERAL_SETTINGS_TOGGLED_OFF import com.duckduckgo.app.pixels.AppPixelName.AUTOCOMPLETE_RECENT_SITES_GENERAL_SETTINGS_TOGGLED_ON +import com.duckduckgo.app.pixels.remoteconfig.AndroidBrowserConfigFeature import com.duckduckgo.app.settings.db.SettingsDataStore import com.duckduckgo.app.statistics.pixels.Pixel import com.duckduckgo.common.utils.DispatcherProvider @@ -59,6 +60,7 @@ class GeneralSettingsViewModel @Inject constructor( private val dispatcherProvider: DispatcherProvider, private val showOnAppLaunchFeature: ShowOnAppLaunchFeature, private val showOnAppLaunchOptionDataStore: ShowOnAppLaunchOptionDataStore, + private val androidBrowserConfigFeature: AndroidBrowserConfigFeature, ) : ViewModel() { data class ViewState( @@ -70,6 +72,7 @@ class GeneralSettingsViewModel @Inject constructor( val isShowOnAppLaunchOptionVisible: Boolean, val showOnAppLaunchSelectedOption: ShowOnAppLaunchOption, val maliciousSiteProtectionEnabled: Boolean, + val maliciousSiteProtectionFeatureAvailable: Boolean, ) sealed class Command { @@ -98,6 +101,7 @@ class GeneralSettingsViewModel @Inject constructor( isShowOnAppLaunchOptionVisible = showOnAppLaunchFeature.self().isEnabled(), showOnAppLaunchSelectedOption = showOnAppLaunchOptionDataStore.optionFlow.first(), maliciousSiteProtectionEnabled = settingsDataStore.maliciousSiteProtectionEnabled, + maliciousSiteProtectionFeatureAvailable = androidBrowserConfigFeature.enableMaliciousSiteProtection().isEnabled(), ) } diff --git a/app/src/main/res/layout/activity_general_settings.xml b/app/src/main/res/layout/activity_general_settings.xml index 93b7160f8f49..d334ae6aa8c7 100644 --- a/app/src/main/res/layout/activity_general_settings.xml +++ b/app/src/main/res/layout/activity_general_settings.xml @@ -81,6 +81,7 @@ tools:secondaryText="Last Opened Tab" /> diff --git a/app/src/test/java/com/duckduckgo/app/generalsettings/GeneralSettingsViewModelTest.kt b/app/src/test/java/com/duckduckgo/app/generalsettings/GeneralSettingsViewModelTest.kt index c84011b6a607..17e2730e74d4 100644 --- a/app/src/test/java/com/duckduckgo/app/generalsettings/GeneralSettingsViewModelTest.kt +++ b/app/src/test/java/com/duckduckgo/app/generalsettings/GeneralSettingsViewModelTest.kt @@ -28,6 +28,7 @@ import com.duckduckgo.app.generalsettings.showonapplaunch.model.ShowOnAppLaunchO import com.duckduckgo.app.generalsettings.showonapplaunch.store.FakeShowOnAppLaunchOptionDataStore import com.duckduckgo.app.pixels.AppPixelName import com.duckduckgo.app.pixels.AppPixelName.SETTINGS_GENERAL_APP_LAUNCH_PRESSED +import com.duckduckgo.app.pixels.remoteconfig.AndroidBrowserConfigFeature import com.duckduckgo.app.statistics.pixels.Pixel import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.Count import com.duckduckgo.common.test.CoroutineTestRule @@ -86,6 +87,8 @@ internal class GeneralSettingsViewModelTest { private val dispatcherProvider = coroutineTestRule.testDispatcherProvider + private val fakeBrowserConfigFeature = FakeFeatureToggleFactory.create(AndroidBrowserConfigFeature::class.java) + @Before fun before() { MockitoAnnotations.openMocks(this) @@ -363,6 +366,7 @@ internal class GeneralSettingsViewModelTest { isShowOnAppLaunchOptionVisible = fakeShowOnAppLaunchFeatureToggle.self().isEnabled(), showOnAppLaunchSelectedOption = LastOpenedTab, maliciousSiteProtectionEnabled = true, + maliciousSiteProtectionFeatureAvailable = false, ) private fun initTestee() { @@ -375,6 +379,7 @@ internal class GeneralSettingsViewModelTest { dispatcherProvider, fakeShowOnAppLaunchFeatureToggle, fakeShowOnAppLaunchOptionDataStore, + fakeBrowserConfigFeature, ) } }