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

fenix/119.0
William Durand 9 months 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.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/"
}
}

@ -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(

@ -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)
}
}

Loading…
Cancel
Save