Bug 1850783 - Add button to open AMO from the fenix add-on manager

fenix/119.0
William Durand 1 year ago committed by mergify[bot]
parent b3c8e1f3ee
commit 46e6dc3569

@ -26,8 +26,10 @@ import mozilla.components.feature.addons.AddonManager
import mozilla.components.feature.addons.AddonManagerException import mozilla.components.feature.addons.AddonManagerException
import mozilla.components.feature.addons.ui.AddonsManagerAdapter import mozilla.components.feature.addons.ui.AddonsManagerAdapter
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.Config import org.mozilla.fenix.Config
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.databinding.FragmentAddOnsManagementBinding import org.mozilla.fenix.databinding.FragmentAddOnsManagementBinding
@ -98,6 +100,7 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management)
val managementView = AddonsManagementView( val managementView = AddonsManagementView(
navController = findNavController(), navController = findNavController(),
onInstallButtonClicked = ::installAddon, onInstallButtonClicked = ::installAddon,
onMoreAddonsButtonClicked = ::openAMO,
) )
val recyclerView = binding?.addOnsList 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 { companion object {
private const val BUNDLE_KEY_INSTALL_EXTERNAL_ADDON_COMPLETE = "INSTALL_EXTERNAL_ADDON_COMPLETE" 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/"
} }
} }

@ -7,6 +7,7 @@ package org.mozilla.fenix.addons
import androidx.navigation.NavController import androidx.navigation.NavController
import mozilla.components.feature.addons.Addon import mozilla.components.feature.addons.Addon
import mozilla.components.feature.addons.ui.AddonsManagerAdapterDelegate import mozilla.components.feature.addons.ui.AddonsManagerAdapterDelegate
import org.mozilla.fenix.Config
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.ext.navigateSafe import org.mozilla.fenix.ext.navigateSafe
@ -16,6 +17,7 @@ import org.mozilla.fenix.ext.navigateSafe
class AddonsManagementView( class AddonsManagementView(
private val navController: NavController, private val navController: NavController,
private val onInstallButtonClicked: (Addon) -> Unit, private val onInstallButtonClicked: (Addon) -> Unit,
private val onMoreAddonsButtonClicked: () -> Unit,
) : AddonsManagerAdapterDelegate { ) : AddonsManagerAdapterDelegate {
override fun onAddonItemClicked(addon: Addon) { override fun onAddonItemClicked(addon: Addon) {
@ -34,6 +36,14 @@ class AddonsManagementView(
showNotYetSupportedAddonFragment(unsupportedAddons) showNotYetSupportedAddonFragment(unsupportedAddons)
} }
override fun shouldShowFindMoreAddonsButton(): Boolean {
return !Config.channel.isRelease
}
override fun onFindMoreAddonsButtonClicked() {
onMoreAddonsButtonClicked()
}
private fun showInstalledAddonDetailsFragment(addon: Addon) { private fun showInstalledAddonDetailsFragment(addon: Addon) {
val directions = val directions =
AddonsManagementFragmentDirections.actionAddonsManagementFragmentToInstalledAddonDetails( AddonsManagementFragmentDirections.actionAddonsManagementFragmentToInstalledAddonDetails(

@ -31,10 +31,13 @@ class AddonsManagementViewTest {
private var showPermissionDialog: (Addon) -> Unit = { permissionDialogDisplayed = true } private var showPermissionDialog: (Addon) -> Unit = { permissionDialogDisplayed = true }
private var permissionDialogDisplayed = false private var permissionDialogDisplayed = false
private var onMoreAddonsButtonClicked: () -> Unit = { moreAddonsButtonClicked = true }
private var moreAddonsButtonClicked = false
@Before @Before
fun setup() { fun setup() {
MockKAnnotations.init(this) MockKAnnotations.init(this)
managementView = AddonsManagementView(navController, showPermissionDialog) managementView = AddonsManagementView(navController, showPermissionDialog, onMoreAddonsButtonClicked)
} }
@Test @Test
@ -128,4 +131,10 @@ class AddonsManagementViewTest {
navController.navigate(directionsEq(expected)) navController.navigate(directionsEq(expected))
} }
} }
@Test
fun `onFindMoreAddonsButtonClicked calls onMoreAddonsButtonClicked`() {
managementView.onFindMoreAddonsButtonClicked()
assertTrue(moreAddonsButtonClicked)
}
} }

Loading…
Cancel
Save