From ee4e1c8f39d0172d1b42ca259bac342deafd86ef Mon Sep 17 00:00:00 2001 From: Tiger Oakes Date: Thu, 14 Nov 2019 12:02:27 -0800 Subject: [PATCH] Fixes #5085 - Use CustomTabWindowFeature (#6603) Opens _blank links in new custom tab --- .../fenix/browser/BaseBrowserFragment.kt | 11 ---------- .../mozilla/fenix/browser/BrowserFragment.kt | 22 ++++++++++++++----- .../customtabs/ExternalAppBrowserFragment.kt | 12 ++++++++++ 3 files changed, 29 insertions(+), 16 deletions(-) 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 d87dca29f..639b6658a 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -53,7 +53,6 @@ import mozilla.components.feature.session.SwipeRefreshFeature import mozilla.components.feature.sitepermissions.SitePermissions import mozilla.components.feature.sitepermissions.SitePermissionsFeature import mozilla.components.feature.sitepermissions.SitePermissionsRules -import mozilla.components.feature.tabs.WindowFeature import mozilla.components.support.base.feature.BackHandler import mozilla.components.support.base.feature.PermissionsFeature import mozilla.components.support.base.feature.ViewBoundFeatureWrapper @@ -103,7 +102,6 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs protected val readerViewFeature = ViewBoundFeatureWrapper() private val sessionFeature = ViewBoundFeatureWrapper() - private val windowFeature = ViewBoundFeatureWrapper() private val contextMenuFeature = ViewBoundFeatureWrapper() private val downloadsFeature = ViewBoundFeatureWrapper() private val appLinksFeature = ViewBoundFeatureWrapper() @@ -243,15 +241,6 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs view = view ) - windowFeature.set( - feature = WindowFeature( - store = store, - tabsUseCases = context.components.useCases.tabsUseCases - ), - owner = this, - view = view - ) - val downloadFeature = DownloadsFeature( context.applicationContext, store = store, diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index b38020960..d888b85ac 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -22,18 +22,19 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.transition.TransitionInflater import com.google.android.material.snackbar.Snackbar -import kotlinx.android.synthetic.main.fragment_browser.view.browserLayout -import kotlinx.android.synthetic.main.fragment_browser.view.readerViewControlsBar -import kotlinx.android.synthetic.main.fragment_home.bottom_bar -import kotlinx.android.synthetic.main.tracking_protection_onboarding_popup.view.onboarding_message +import kotlinx.android.synthetic.main.fragment_browser.view.* +import kotlinx.android.synthetic.main.fragment_home.* +import kotlinx.android.synthetic.main.tracking_protection_onboarding_popup.view.* import kotlinx.coroutines.ExperimentalCoroutinesApi import mozilla.components.browser.session.Session import mozilla.components.feature.contextmenu.ContextMenuCandidate import mozilla.components.feature.readerview.ReaderViewFeature import mozilla.components.feature.session.TrackingProtectionUseCases import mozilla.components.feature.sitepermissions.SitePermissions +import mozilla.components.feature.tabs.WindowFeature import mozilla.components.lib.state.ext.consumeFrom import mozilla.components.support.base.feature.BackHandler +import mozilla.components.support.base.feature.ViewBoundFeatureWrapper import org.jetbrains.anko.dimen import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R @@ -54,9 +55,11 @@ import org.mozilla.fenix.mvi.getManagedEmitter * Fragment used for browsing the web within the main app. */ @ExperimentalCoroutinesApi -@Suppress("TooManyFunctions", "LargeClass") +@Suppress("TooManyFunctions") class BrowserFragment : BaseBrowserFragment(), BackHandler { + private val windowFeature = ViewBoundFeatureWrapper() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) postponeEnterTransition() @@ -100,6 +103,15 @@ class BrowserFragment : BaseBrowserFragment(), BackHandler { view = view ) + windowFeature.set( + feature = WindowFeature( + store = context.components.core.store, + tabsUseCases = context.components.useCases.tabsUseCases + ), + owner = this, + view = view + ) + if ((activity as HomeActivity).browsingModeManager.mode.isPrivate) { // We need to update styles for private mode programmatically for now: // https://github.com/mozilla-mobile/android-components/issues/3400 diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt index c10aa095e..891ca637c 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt @@ -16,6 +16,7 @@ import mozilla.components.browser.session.Session import mozilla.components.concept.engine.manifest.WebAppManifestParser import mozilla.components.concept.engine.manifest.getOrNull import mozilla.components.feature.contextmenu.ContextMenuCandidate +import mozilla.components.feature.customtabs.CustomTabWindowFeature import mozilla.components.feature.pwa.ext.getTrustedScope import mozilla.components.feature.pwa.ext.trustedOrigins import mozilla.components.feature.pwa.feature.ManifestUpdateFeature @@ -45,6 +46,7 @@ class ExternalAppBrowserFragment : BaseBrowserFragment(), BackHandler { private val args by navArgs() private val customTabsIntegration = ViewBoundFeatureWrapper() + private val windowFeature = ViewBoundFeatureWrapper() private val hideToolbarFeature = ViewBoundFeatureWrapper() @Suppress("LongMethod") @@ -71,6 +73,16 @@ class ExternalAppBrowserFragment : BaseBrowserFragment(), BackHandler { owner = this, view = view) + windowFeature.set( + feature = CustomTabWindowFeature( + activity, + components.core.store, + customTabSessionId + ), + owner = this, + view = view + ) + hideToolbarFeature.set( feature = WebAppHideToolbarFeature( requireComponents.core.sessionManager,