Bug 1875229 - Add support for extensions not allowed in private windows

fenix/124.1.0
William Durand 4 months ago committed by mergify[bot]
parent 3e0231b3f7
commit 37138b62a1

@ -162,9 +162,10 @@ class InstalledAddonDetailsFragment : Fragment() {
runIfFragmentIsAttached {
this.addon = it
switch.isClickable = true
privateBrowsingSwitch.isVisible = it.isEnabled()
privateBrowsingSwitch.isChecked = it.isAllowedInPrivateBrowsing()
switch.setText(R.string.mozac_feature_addons_enabled)
privateBrowsingSwitch.isVisible = it.isEnabled()
privateBrowsingSwitch.isChecked =
it.incognito != Addon.Incognito.NOT_ALLOWED && it.isAllowedInPrivateBrowsing()
binding.settings.isVisible = shouldSettingsBeVisible()
enableButtons()
context?.let {
@ -203,8 +204,8 @@ class InstalledAddonDetailsFragment : Fragment() {
runIfFragmentIsAttached {
this.addon = it
switch.isClickable = true
privateBrowsingSwitch.isVisible = it.isEnabled()
switch.setText(R.string.mozac_feature_addons_disabled)
privateBrowsingSwitch.isVisible = it.isEnabled()
enableButtons()
context?.let {
showSnackBar(
@ -220,9 +221,8 @@ class InstalledAddonDetailsFragment : Fragment() {
onError = {
runIfFragmentIsAttached {
switch.isClickable = true
privateBrowsingSwitch.isClickable = true
enableButtons()
switch.setState(addon.isEnabled())
enableButtons()
context?.let {
showSnackBar(
binding.root,
@ -261,6 +261,45 @@ class InstalledAddonDetailsFragment : Fragment() {
}
}
@VisibleForTesting
internal fun bindAllowInPrivateBrowsingSwitch() {
val switch = providePrivateBrowsingSwitch()
switch.isVisible = addon.isEnabled()
if (addon.incognito == Addon.Incognito.NOT_ALLOWED) {
switch.isChecked = false
switch.isEnabled = false
switch.text = requireContext().getString(R.string.mozac_feature_addons_not_allowed_in_private_browsing)
return
}
switch.isChecked = addon.isAllowedInPrivateBrowsing()
switch.setOnCheckedChangeListener { v, isChecked ->
val addonManager = v.context.components.addonManager
switch.isClickable = false
disableButtons()
addonManager.setAddonAllowedInPrivateBrowsing(
addon,
isChecked,
onSuccess = {
runIfFragmentIsAttached {
this.addon = it
switch.isClickable = true
enableButtons()
}
},
onError = {
runIfFragmentIsAttached {
switch.isChecked = addon.isAllowedInPrivateBrowsing()
switch.isClickable = true
enableButtons()
}
},
)
}
}
private fun bindReportButton() {
binding.reportAddOn.setOnClickListener {
val shouldCreatePrivateSession = (activity as HomeActivity).browsingModeManager.mode.isPrivate
@ -325,35 +364,6 @@ class InstalledAddonDetailsFragment : Fragment() {
}
}
private fun bindAllowInPrivateBrowsingSwitch() {
val switch = binding.allowInPrivateBrowsingSwitch
switch.isChecked = addon.isAllowedInPrivateBrowsing()
switch.isVisible = addon.isEnabled()
switch.setOnCheckedChangeListener { v, isChecked ->
val addonManager = v.context.components.addonManager
switch.isClickable = false
disableButtons()
addonManager.setAddonAllowedInPrivateBrowsing(
addon,
isChecked,
onSuccess = {
runIfFragmentIsAttached {
this.addon = it
switch.isClickable = true
enableButtons()
}
},
onError = {
runIfFragmentIsAttached {
switch.isChecked = addon.isAllowedInPrivateBrowsing()
switch.isClickable = true
enableButtons()
}
},
)
}
}
private fun bindRemoveButton() {
binding.removeAddOn.setOnClickListener {
setAllInteractiveViewsClickable(binding, false)

@ -76,7 +76,7 @@ class InstalledAddonDetailsFragmentTest {
}
@Test
fun `GIVEN blocklisted addon WHEN biding the enable switch THEN disable the switch`() {
fun `GIVEN blocklisted addon WHEN binding the enable switch THEN disable the switch`() {
val addon = mockk<Addon>()
val enableSwitch = mockk<SwitchMaterial>(relaxed = true)
val privateBrowsingSwitch = mockk<SwitchMaterial>(relaxed = true)
@ -93,7 +93,7 @@ class InstalledAddonDetailsFragmentTest {
}
@Test
fun `GIVEN enabled addon WHEN biding the enable switch THEN do not disable the switch`() {
fun `GIVEN enabled addon WHEN binding 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)
@ -112,7 +112,7 @@ class InstalledAddonDetailsFragmentTest {
}
@Test
fun `GIVEN addon not correctly signed WHEN biding the enable switch THEN disable the switch`() {
fun `GIVEN addon not correctly signed WHEN binding the enable switch THEN disable the switch`() {
val addon = mockk<Addon>()
val enableSwitch = mockk<SwitchMaterial>(relaxed = true)
val privateBrowsingSwitch = mockk<SwitchMaterial>(relaxed = true)
@ -130,7 +130,7 @@ class InstalledAddonDetailsFragmentTest {
}
@Test
fun `GIVEN incompatible addon WHEN biding the enable switch THEN disable the switch`() {
fun `GIVEN incompatible addon WHEN binding the enable switch THEN disable the switch`() {
val addon = mockk<Addon>()
val enableSwitch = mockk<SwitchMaterial>(relaxed = true)
val privateBrowsingSwitch = mockk<SwitchMaterial>(relaxed = true)
@ -228,9 +228,27 @@ class InstalledAddonDetailsFragmentTest {
}
}
@Test
fun `GIVEN addon does not allow private browsing WHEN binding THEN update switch`() {
val addon = mockAddon()
val privateBrowsingSwitch = mockk<SwitchMaterial>(relaxed = true)
every { fragment.providePrivateBrowsingSwitch() } returns privateBrowsingSwitch
every { addon.incognito } returns Addon.Incognito.NOT_ALLOWED
every { fragment.addon } returns addon
every { fragment.context } returns testContext
fragment.bindAllowInPrivateBrowsingSwitch()
verify { privateBrowsingSwitch.isEnabled = false }
verify { privateBrowsingSwitch.isChecked = false }
verify { privateBrowsingSwitch.text = "Not allowed in private windows" }
}
private fun mockAddon(): Addon {
val addon: Addon = mockk()
every { addon.id } returns "some-addon-id"
every { addon.incognito } returns Addon.Incognito.SPANNING
every { addon.isEnabled() } returns true
every { addon.isDisabledAsBlocklisted() } returns false
every { addon.isDisabledAsNotCorrectlySigned() } returns false

Loading…
Cancel
Save