From c52e4fd9f5f157cb5c5da32f7a623c861f68db7b Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Fri, 7 Aug 2020 01:03:07 -0400 Subject: [PATCH] For issue #7620: Add support for external download managers --- app/src/main/java/org/mozilla/fenix/FeatureFlags.kt | 5 +++++ .../java/org/mozilla/fenix/browser/BaseBrowserFragment.kt | 8 ++++++++ .../java/org/mozilla/fenix/settings/SettingsFragment.kt | 4 +++- app/src/main/res/values/preference_keys.xml | 1 + app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences.xml | 6 ++++++ 6 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt index c98f1b555..da2c235cf 100644 --- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt @@ -48,4 +48,9 @@ object FeatureFlags { * Enables wait til first contentful paint */ val waitUntilPaintToDraw = Config.channel.isNightlyOrDebug + + /** + * Enables downloads with external download managers. + */ + val externalDownloadManager = Config.channel.isNightlyOrDebug } diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index c7c350808..eda8ef749 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -21,6 +21,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController +import androidx.preference.PreferenceManager import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.fragment_browser.* import kotlinx.android.synthetic.main.fragment_browser.view.* @@ -96,6 +97,7 @@ import org.mozilla.fenix.components.toolbar.ToolbarIntegration import org.mozilla.fenix.components.toolbar.ToolbarPosition import org.mozilla.fenix.downloads.DownloadService import org.mozilla.fenix.downloads.DynamicDownloadDialog +import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.ext.accessibilityManager import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.enterToImmersiveMode @@ -346,6 +348,11 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session view = view ) + val shouldForwardToThirdParties = + PreferenceManager.getDefaultSharedPreferences(context).getBoolean( + context.getPreferenceKey(R.string.pref_key_external_download_manager), false + ) + val downloadFeature = DownloadsFeature( context.applicationContext, store = store, @@ -357,6 +364,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session store, DownloadService::class ), + shouldForwardToThirdParties = { shouldForwardToThirdParties }, promptsStyling = DownloadsFeature.PromptsStyling( gravity = Gravity.BOTTOM, shouldWidthMatchParent = true, diff --git a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt index 469c5397d..ee9bc6fb6 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt @@ -29,6 +29,7 @@ import mozilla.components.support.ktx.android.content.hasCamera import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.Config import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.application @@ -301,7 +302,7 @@ class SettingsFragment : PreferenceFragmentCompat() { private fun setupPreferences() { val leakKey = getPreferenceKey(R.string.pref_key_leakcanary) val debuggingKey = getPreferenceKey(R.string.pref_key_remote_debugging) - + val preferenceExternalDownloadManager = requirePreference(R.string.pref_key_make_default_browser) val preferenceLeakCanary = findPreference(leakKey) val preferenceRemoteDebugging = findPreference(debuggingKey) val preferenceMakeDefaultBrowser = requirePreference(R.string.pref_key_make_default_browser) @@ -314,6 +315,7 @@ class SettingsFragment : PreferenceFragmentCompat() { } } + preferenceExternalDownloadManager.isVisible = FeatureFlags.externalDownloadManager preferenceRemoteDebugging?.setOnPreferenceChangeListener { preference, newValue -> preference.context.settings().preferences.edit() .putBoolean(preference.key, newValue).apply() diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 700697231..317651afd 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -149,6 +149,7 @@ pref_key_open_links_in_a_private_tab pref_key_open_links_in_external_app + pref_key_external_download_manager pref_key_allow_screenshots_in_private_mode diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0047a3592..3040ca5cd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -296,6 +296,8 @@ Account settings Open links in apps + + External download manager Add-ons diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 8e6062573..04de02720 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -132,6 +132,12 @@ android:key="@string/pref_key_open_links_in_external_app" android:title="@string/preferences_open_links_in_apps" /> + +