diff --git a/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt b/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt index eebdc56cf..54a2a69ff 100644 --- a/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt @@ -26,8 +26,10 @@ import mozilla.components.feature.addons.AddonManager import mozilla.components.feature.addons.AddonManagerException import mozilla.components.feature.addons.ui.AddonsManagerAdapter import mozilla.components.support.base.feature.ViewBoundFeatureWrapper +import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.Config +import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.databinding.FragmentAddOnsManagementBinding @@ -98,6 +100,7 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management) val managementView = AddonsManagementView( navController = findNavController(), onInstallButtonClicked = ::installAddon, + onMoreAddonsButtonClicked = ::openAMO, ) val recyclerView = binding?.addOnsList @@ -257,7 +260,20 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management) } } + private fun openAMO() { + (activity as HomeActivity).openToBrowserAndLoad( + searchTermOrURL = AMO_HOMEPAGE_FOR_ANDROID, + newTab = true, + from = BrowserDirection.FromGlobal, + ) + } + companion object { private const val BUNDLE_KEY_INSTALL_EXTERNAL_ADDON_COMPLETE = "INSTALL_EXTERNAL_ADDON_COMPLETE" + + // 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 = "https://addons.mozilla.org/android/" } } diff --git a/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementView.kt b/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementView.kt index a58fa9596..117c3f8e5 100644 --- a/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementView.kt +++ b/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementView.kt @@ -7,6 +7,7 @@ package org.mozilla.fenix.addons import androidx.navigation.NavController import mozilla.components.feature.addons.Addon import mozilla.components.feature.addons.ui.AddonsManagerAdapterDelegate +import org.mozilla.fenix.Config import org.mozilla.fenix.R import org.mozilla.fenix.ext.navigateSafe @@ -16,6 +17,7 @@ import org.mozilla.fenix.ext.navigateSafe class AddonsManagementView( private val navController: NavController, private val onInstallButtonClicked: (Addon) -> Unit, + private val onMoreAddonsButtonClicked: () -> Unit, ) : AddonsManagerAdapterDelegate { override fun onAddonItemClicked(addon: Addon) { @@ -34,6 +36,14 @@ class AddonsManagementView( showNotYetSupportedAddonFragment(unsupportedAddons) } + override fun shouldShowFindMoreAddonsButton(): Boolean { + return !Config.channel.isRelease + } + + override fun onFindMoreAddonsButtonClicked() { + onMoreAddonsButtonClicked() + } + private fun showInstalledAddonDetailsFragment(addon: Addon) { val directions = AddonsManagementFragmentDirections.actionAddonsManagementFragmentToInstalledAddonDetails( diff --git a/app/src/test/java/org/mozilla/fenix/addons/AddonsManagementViewTest.kt b/app/src/test/java/org/mozilla/fenix/addons/AddonsManagementViewTest.kt index 70129360f..e998ee47a 100644 --- a/app/src/test/java/org/mozilla/fenix/addons/AddonsManagementViewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/addons/AddonsManagementViewTest.kt @@ -31,10 +31,13 @@ class AddonsManagementViewTest { private var showPermissionDialog: (Addon) -> Unit = { permissionDialogDisplayed = true } private var permissionDialogDisplayed = false + private var onMoreAddonsButtonClicked: () -> Unit = { moreAddonsButtonClicked = true } + private var moreAddonsButtonClicked = false + @Before fun setup() { MockKAnnotations.init(this) - managementView = AddonsManagementView(navController, showPermissionDialog) + managementView = AddonsManagementView(navController, showPermissionDialog, onMoreAddonsButtonClicked) } @Test @@ -128,4 +131,10 @@ class AddonsManagementViewTest { navController.navigate(directionsEq(expected)) } } + + @Test + fun `onFindMoreAddonsButtonClicked calls onMoreAddonsButtonClicked`() { + managementView.onFindMoreAddonsButtonClicked() + assertTrue(moreAddonsButtonClicked) + } }