Bug 1847266 - Implement status message for blocklisted add-ons in the manager

fenix/120.0
William Durand 8 months ago committed by mergify[bot]
parent b51d385b3a
commit 38f82a2552

@ -40,4 +40,5 @@ enum class BrowserDirection(@IdRes val fragmentId: Int) {
FromTabsTray(R.id.tabsTrayFragment),
FromRecentlyClosed(R.id.recentlyClosedFragment),
FromReviewQualityCheck(R.id.reviewQualityCheckFragment),
FromAddonsManagementFragment(R.id.addonsManagementFragment),
}

@ -90,6 +90,7 @@ import org.mozilla.fenix.GleanMetrics.SplashScreen
import org.mozilla.fenix.GleanMetrics.StartOnHome
import org.mozilla.fenix.addons.AddonDetailsFragmentDirections
import org.mozilla.fenix.addons.AddonPermissionsDetailsFragmentDirections
import org.mozilla.fenix.addons.AddonsManagementFragmentDirections
import org.mozilla.fenix.addons.ExtensionProcessDisabledController
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
@ -1039,6 +1040,9 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
BrowserDirection.FromReviewQualityCheck -> ReviewQualityCheckFragmentDirections.actionGlobalBrowser(
customTabSessionId,
)
BrowserDirection.FromAddonsManagementFragment -> AddonsManagementFragmentDirections.actionGlobalBrowser(
customTabSessionId,
)
}
/**

@ -25,6 +25,7 @@ import mozilla.components.feature.addons.Addon
import mozilla.components.feature.addons.AddonManager
import mozilla.components.feature.addons.AddonManagerException
import mozilla.components.feature.addons.ui.AddonsManagerAdapter
import mozilla.components.feature.addons.ui.AddonsManagerAdapterDelegate
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.BuildConfig
@ -101,6 +102,7 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management)
navController = findNavController(),
onInstallButtonClicked = ::installAddon,
onMoreAddonsButtonClicked = ::openAMO,
onLearnMoreClicked = ::openLearnMoreLink,
)
val recyclerView = binding?.addOnsList
@ -261,10 +263,22 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management)
}
private fun openAMO() {
openLinkInNewTab(AMO_HOMEPAGE_FOR_ANDROID)
}
private fun openLearnMoreLink(link: AddonsManagerAdapterDelegate.LearnMoreLinks, addon: Addon) {
val url = when (link) {
AddonsManagerAdapterDelegate.LearnMoreLinks.BLOCKLISTED_ADDON ->
"${BuildConfig.AMO_BASE_URL}/android/blocked-addon/${addon.id}/"
}
openLinkInNewTab(url)
}
private fun openLinkInNewTab(url: String) {
(activity as HomeActivity).openToBrowserAndLoad(
searchTermOrURL = AMO_HOMEPAGE_FOR_ANDROID,
searchTermOrURL = url,
newTab = true,
from = BrowserDirection.FromGlobal,
from = BrowserDirection.FromAddonsManagementFragment,
)
}
@ -274,6 +288,6 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management)
// This is locale-less on purpose so that the content negotiation happens on the AMO side because the current
// user language might not be supported by AMO and/or the language might not be exactly what AMO is expecting
// (e.g. `en` instead of `en-US`).
private const val AMO_HOMEPAGE_FOR_ANDROID = BuildConfig.AMO_BASE_URL + "/android/"
private const val AMO_HOMEPAGE_FOR_ANDROID = "${BuildConfig.AMO_BASE_URL}/android/"
}
}

@ -17,6 +17,7 @@ class AddonsManagementView(
private val navController: NavController,
private val onInstallButtonClicked: (Addon) -> Unit,
private val onMoreAddonsButtonClicked: () -> Unit,
private val onLearnMoreClicked: (link: AddonsManagerAdapterDelegate.LearnMoreLinks, addon: Addon) -> Unit,
) : AddonsManagerAdapterDelegate {
override fun onAddonItemClicked(addon: Addon) {
@ -41,6 +42,10 @@ class AddonsManagementView(
onMoreAddonsButtonClicked()
}
override fun onLearnMoreLinkClicked(link: AddonsManagerAdapterDelegate.LearnMoreLinks, addon: Addon) {
onLearnMoreClicked(link, addon)
}
private fun showInstalledAddonDetailsFragment(addon: Addon) {
val directions =
AddonsManagementFragmentDirections.actionAddonsManagementFragmentToInstalledAddonDetails(

@ -34,10 +34,21 @@ class AddonsManagementViewTest {
private var onMoreAddonsButtonClicked: () -> Unit = { moreAddonsButtonClicked = true }
private var moreAddonsButtonClicked = false
private var onLearnMoreLinkClicked: (AddonsManagerAdapterDelegate.LearnMoreLinks, Addon) -> Unit = {
_: AddonsManagerAdapterDelegate.LearnMoreLinks, _: Addon ->
learnMoreLinkClicked = true
}
private var learnMoreLinkClicked = false
@Before
fun setup() {
MockKAnnotations.init(this)
managementView = AddonsManagementView(navController, showPermissionDialog, onMoreAddonsButtonClicked)
managementView = AddonsManagementView(
navController,
showPermissionDialog,
onMoreAddonsButtonClicked,
onLearnMoreLinkClicked,
)
}
@Test
@ -137,4 +148,11 @@ class AddonsManagementViewTest {
managementView.onFindMoreAddonsButtonClicked()
assertTrue(moreAddonsButtonClicked)
}
@Test
fun `onLearnMoreLinkClicked calls onLearnMore`() {
val addon: Addon = mockk()
managementView.onLearnMoreLinkClicked(AddonsManagerAdapterDelegate.LearnMoreLinks.BLOCKLISTED_ADDON, addon)
assertTrue(learnMoreLinkClicked)
}
}

Loading…
Cancel
Save