From 40550e88de1f2a73a26364cd906b424e3c6a3e13 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Fri, 17 Apr 2020 16:24:20 -0400 Subject: [PATCH] Close #9960: Launch URI in Fenix if failed to launch in custom tab (#9964) --- app/build.gradle | 28 ++++++++++++++----- .../customtabs/ExternalAppBrowserFragment.kt | 20 ++++++------- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a99c75538..76cafe440 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -33,9 +33,11 @@ android { resValue "bool", "IS_DEBUG", "false" buildConfigField "boolean", "USE_RELEASE_VERSIONING", "false" buildConfigField "String", "AMO_COLLECTION", "\"7e8d6dc651b54ab385fb8791bf9dac\"" + def deepLinkSchemeValue = "fenix-dev" + buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" manifestPlaceholders = [ "isRaptorEnabled": "false", - "deepLinkScheme": "fenix-dev" + "deepLinkScheme": deepLinkSchemeValue ] } @@ -72,21 +74,29 @@ android { applicationIdSuffix ".fenix.nightly" buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" buildConfigField "String", "AMO_COLLECTION", "\"16f6e5d9a40448b8955db57ced6d75\"" - manifestPlaceholders = ["deepLinkScheme": "fenix-nightly"] + def deepLinkSchemeValue = "fenix-nightly" + buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" + manifestPlaceholders = ["deepLinkScheme": deepLinkSchemeValue] } fenixBeta releaseTemplate >> { applicationIdSuffix ".fenix.beta" buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" - manifestPlaceholders = ["deepLinkScheme": "fenix-beta"] + def deepLinkSchemeValue = "fenix-beta" + buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" + manifestPlaceholders = ["deepLinkScheme": deepLinkSchemeValue] } fenixProduction releaseTemplate >> { applicationIdSuffix ".fenix" buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" - manifestPlaceholders = ["deepLinkScheme": "fenix"] + def deepLinkSchemeValue = "fenix" + buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" + manifestPlaceholders = ["deepLinkScheme": deepLinkSchemeValue] } fennecProduction releaseTemplate >> { buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" applicationIdSuffix ".firefox" + def deepLinkSchemeValue = "fenix" + buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" manifestPlaceholders = [ // This release type is meant to replace Firefox (Release channel) and therefore needs to inherit // its sharedUserId for all eternity. See: @@ -96,12 +106,14 @@ android { // - https://issuetracker.google.com/issues/36924841 // - https://issuetracker.google.com/issues/36905922 "sharedUserId": "org.mozilla.firefox.sharedID", - "deepLinkScheme": "fenix" + "deepLinkScheme": deepLinkSchemeValue ] } fennecBeta releaseTemplate >> { buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" applicationIdSuffix ".firefox_beta" + def deepLinkSchemeValue = "fenix-beta" + buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" manifestPlaceholders = [ // This release type is meant to replace Firefox (Release channel) and therefore needs to inherit // its sharedUserId for all eternity. See: @@ -111,13 +123,15 @@ android { // - https://issuetracker.google.com/issues/36924841 // - https://issuetracker.google.com/issues/36905922 "sharedUserId": "org.mozilla.firefox.sharedID", - "deepLinkScheme": "fenix-beta" + "deepLinkScheme": deepLinkSchemeValue ] } fennecNightly releaseTemplate >> { buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" buildConfigField "String", "AMO_COLLECTION", "\"16f6e5d9a40448b8955db57ced6d75\"" applicationIdSuffix ".fennec_aurora" + def deepLinkSchemeValue = "fenix-nightly" + buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" manifestPlaceholders = [ // This release type is meant to replace Firefox (Release channel) and therefore needs to inherit // its sharedUserId for all eternity. See: @@ -127,7 +141,7 @@ android { // - https://issuetracker.google.com/issues/36924841 // - https://issuetracker.google.com/issues/36905922 "sharedUserId": "org.mozilla.fennec.sharedID", - "deepLinkScheme": "fenix-nightly" + "deepLinkScheme": deepLinkSchemeValue ] } } 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 667265066..108273281 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.customtabs import android.content.Context +import android.content.Intent import android.view.View import androidx.navigation.fragment.navArgs import kotlinx.android.synthetic.main.component_browser_top_toolbar.* @@ -28,13 +29,13 @@ import mozilla.components.lib.state.ext.consumeFrom import mozilla.components.support.base.feature.UserInteractionHandler import mozilla.components.support.base.feature.ViewBoundFeatureWrapper import mozilla.components.support.ktx.android.arch.lifecycle.addObservers +import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.browser.BaseBrowserFragment import org.mozilla.fenix.browser.CustomTabContextMenuCandidate import org.mozilla.fenix.browser.FenixSnackbarDelegate -import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.requireComponents @@ -85,15 +86,14 @@ class ExternalAppBrowserFragment : BaseBrowserFragment(), UserInteractionHandler components.core.store, customTabSessionId ) { uri -> - components.analytics.crashReporter.submitCaughtException(Exception("Unknown scheme error $uri")) - FenixSnackbar.make( - view = view.swipeRefresh, - duration = FenixSnackbar.LENGTH_LONG, - isDisplayedWithBrowserToolbar = true - ).apply { - setText(resources.getString(R.string.unknown_scheme_error_message)) - setAppropriateBackground(true) - }.show() + val intent = Intent.parseUri("${BuildConfig.DEEP_LINK_SCHEME}://open?url=$uri", 0) + if (intent.action == Intent.ACTION_VIEW) { + intent.addCategory(Intent.CATEGORY_BROWSABLE) + intent.component = null + intent.selector = null + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + } + activity.startActivity(intent) }, owner = this, view = view