Bug 1844557 - Disable the switch control when the add-on is blockedlisted.

fenix/120.0
Arturo Mejia 1 year ago committed by mergify[bot]
parent 6e813a62c7
commit 9740f5ed0a

@ -118,11 +118,24 @@ class InstalledAddonDetailsFragment : Fragment() {
bindRemoveButton()
}
@VisibleForTesting
internal fun provideEnableSwitch() = binding.enableSwitch
@VisibleForTesting
internal fun providePrivateBrowsingSwitch() = binding.allowInPrivateBrowsingSwitch
@VisibleForTesting
@SuppressWarnings("LongMethod")
private fun bindEnableSwitch() {
val switch = binding.enableSwitch
val privateBrowsingSwitch = binding.allowInPrivateBrowsingSwitch
internal fun bindEnableSwitch() {
val switch = provideEnableSwitch()
val privateBrowsingSwitch = providePrivateBrowsingSwitch()
switch.setState(addon.isEnabled())
// When the ad-on is blocklisted, we do not want to enable the toggle switch
// because users shouldn't be able to re-enable a blocklisted add-on.
if (addon.isDisabledAsBlocklisted()) {
switch.isEnabled = false
return
}
switch.setOnCheckedChangeListener { v, isChecked ->
val addonManager = v.context.components.addonManager
switch.isClickable = false

@ -4,6 +4,7 @@
package org.mozilla.fenix.addons
import com.google.android.material.switchmaterial.SwitchMaterial
import io.mockk.Runs
import io.mockk.every
import io.mockk.just
@ -62,4 +63,38 @@ class InstalledAddonDetailsFragmentTest {
verify { addonManager.enableAddon(addon, EnableSource.APP_SUPPORT, any(), any()) }
verify { addonManager.enableAddon(capturedAddon.captured, EnableSource.USER, any(), any()) }
}
@Test
fun `GIVEN blocklisted addon WHEN biding the enable switch THEN disable the switch`() {
val addon = mockk<Addon>()
val enableSwitch = mockk<SwitchMaterial>(relaxed = true)
val privateBrowsingSwitch = mockk<SwitchMaterial>(relaxed = true)
every { fragment.provideEnableSwitch() } returns enableSwitch
every { fragment.providePrivateBrowsingSwitch() } returns privateBrowsingSwitch
every { addon.isEnabled() } returns true
every { addon.isDisabledAsBlocklisted() } returns true
every { fragment.addon } returns addon
fragment.bindEnableSwitch()
verify { enableSwitch.isEnabled = false }
}
@Test
fun `GIVEN enabled addon WHEN biding the enable switch THEN do not disable the switch`() {
val addon = mockk<Addon>()
val enableSwitch = mockk<SwitchMaterial>(relaxed = true)
val privateBrowsingSwitch = mockk<SwitchMaterial>(relaxed = true)
every { fragment.provideEnableSwitch() } returns enableSwitch
every { fragment.providePrivateBrowsingSwitch() } returns privateBrowsingSwitch
every { addon.isDisabledAsBlocklisted() } returns false
every { addon.isEnabled() } returns true
every { fragment.addon } returns addon
fragment.bindEnableSwitch()
verify(exactly = 0) { enableSwitch.isEnabled = false }
}
}

Loading…
Cancel
Save