From ce4293c8c8126ed8acc62b287d87bd71ea78e768 Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Mon, 9 Mar 2020 15:23:57 -0400 Subject: [PATCH] For issue #8908 Notify users when previously unsupported add-ons become available --- .../java/org/mozilla/fenix/FenixApplication.kt | 1 + .../java/org/mozilla/fenix/GlobalDirections.kt | 4 ++++ .../org/mozilla/fenix/components/Components.kt | 16 ++++++++++++++++ .../fenix/home/intent/DeepLinkIntentProcessor.kt | 2 ++ app/src/main/res/navigation/nav_graph.xml | 4 ++++ .../home/intent/DeepLinkIntentProcessorTest.kt | 8 ++++++++ 6 files changed, 35 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index bfac06236..25d4c8fb4 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -336,6 +336,7 @@ open class FenixApplication : LocaleAwareApplication() { }, onExtensionsLoaded = { extensions -> components.addonUpdater.registerForFutureUpdates(extensions) + components.supportedAddChecker.registerForChecks() }, onUpdatePermissionRequest = components.addonUpdater::onUpdatePermissionRequest ) diff --git a/app/src/main/java/org/mozilla/fenix/GlobalDirections.kt b/app/src/main/java/org/mozilla/fenix/GlobalDirections.kt index 76cdd6971..315f673b4 100644 --- a/app/src/main/java/org/mozilla/fenix/GlobalDirections.kt +++ b/app/src/main/java/org/mozilla/fenix/GlobalDirections.kt @@ -33,5 +33,9 @@ enum class GlobalDirections(val navDirections: NavDirections, val destinationId: DeleteData( NavGraphDirections.actionGlobalDeleteBrowsingDataFragment(), R.id.deleteBrowsingDataFragment + ), + SettingsAddonManager( + NavGraphDirections.actionGlobalSettingsAddonsManagementFragment(), + R.id.addonsManagementFragment ) } diff --git a/app/src/main/java/org/mozilla/fenix/components/Components.kt b/app/src/main/java/org/mozilla/fenix/components/Components.kt index aa8552b85..29d84cac6 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Components.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Components.kt @@ -5,13 +5,18 @@ package org.mozilla.fenix.components import android.content.Context +import android.content.Intent +import androidx.core.net.toUri import mozilla.components.feature.addons.AddonManager import mozilla.components.feature.addons.amo.AddonCollectionProvider import mozilla.components.feature.addons.update.AddonUpdater import mozilla.components.feature.addons.update.DefaultAddonUpdater +import mozilla.components.feature.addons.migration.SupportedAddonsChecker +import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.migration.state.MigrationStore +import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.test.Mockable import org.mozilla.fenix.utils.ClipboardHandler import java.util.concurrent.TimeUnit @@ -68,6 +73,17 @@ class Components(private val context: Context) { DefaultAddonUpdater(context, AddonUpdater.Frequency(12, TimeUnit.HOURS)) } + @Suppress("MagicNumber") + val supportedAddChecker by lazy { + DefaultSupportedAddonsChecker(context, SupportedAddonsChecker.Frequency(16, TimeUnit.MINUTES), + onNotificationClickIntent = Intent(context, HomeActivity::class.java).apply { + action = Intent.ACTION_VIEW + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK + data = "fenix://settings_addon_manager".toUri() + } + ) + } + val addonManager by lazy { AddonManager(core.store, core.engine, addonCollectionProvider, addonUpdater) } diff --git a/app/src/main/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessor.kt b/app/src/main/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessor.kt index 3e71695c3..3e3c0f69c 100644 --- a/app/src/main/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessor.kt @@ -32,6 +32,7 @@ class DeepLinkIntentProcessor( } } + @Suppress("ComplexMethod") private fun handleDeepLink(deepLink: Uri, navController: NavController) { handleDeepLinkSideEffects(deepLink) @@ -42,6 +43,7 @@ class DeepLinkIntentProcessor( "settings_search_engine" -> GlobalDirections.SearchEngine "settings_accessibility" -> GlobalDirections.Accessibility "settings_delete_browsing_data" -> GlobalDirections.DeleteData + "settings_addon_manager" -> GlobalDirections.SettingsAddonManager else -> return } diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 71774d434..6e96515a0 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -35,6 +35,10 @@ android:id="@+id/action_global_settingsFragment" app:destination="@id/settingsFragment" /> + + diff --git a/app/src/test/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessorTest.kt b/app/src/test/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessorTest.kt index ba9c55ec7..8bd2173fb 100644 --- a/app/src/test/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessorTest.kt @@ -150,5 +150,13 @@ class DeepLinkIntentProcessorTest { verify { out wasNot Called } } + @Test + fun `process settings_addon_manager deep link`() { + assertTrue(processor.process(testIntent("fenix://settings_addon_manager"), navController, out)) + + verify { navController.navigate(NavGraphDirections.actionGlobalSettingsAddonsManagementFragment()) } + verify { out wasNot Called } + } + private fun testIntent(uri: String) = Intent("", uri.toUri()) }