parent
cb1cd1e4c7
commit
dd1433733a
|
@ -19,16 +19,26 @@ import org.mozilla.fenix.ext.isOnline
|
||||||
|
|
||||||
class AppRequestInterceptor(private val context: Context) : RequestInterceptor {
|
class AppRequestInterceptor(private val context: Context) : RequestInterceptor {
|
||||||
override fun onLoadRequest(
|
override fun onLoadRequest(
|
||||||
session: EngineSession,
|
engineSession: EngineSession,
|
||||||
uri: String
|
uri: String,
|
||||||
|
hasUserGesture: Boolean,
|
||||||
|
isSameDomain: Boolean
|
||||||
): RequestInterceptor.InterceptionResponse? {
|
): RequestInterceptor.InterceptionResponse? {
|
||||||
adjustTrackingProtection(context, session)
|
adjustTrackingProtection(context, engineSession)
|
||||||
|
var result: RequestInterceptor.InterceptionResponse? = null
|
||||||
|
|
||||||
// WebChannel-driven authentication does not require a separate redirect interceptor.
|
// WebChannel-driven authentication does not require a separate redirect interceptor.
|
||||||
return if (context.isInExperiment(Experiments.asFeatureWebChannelsDisabled)) {
|
if (context.isInExperiment(Experiments.asFeatureWebChannelsDisabled)) {
|
||||||
context.components.services.accountsAuthFeature.interceptor.onLoadRequest(session, uri)
|
result = context.components.services.accountsAuthFeature.interceptor.onLoadRequest(
|
||||||
} else {
|
engineSession, uri, hasUserGesture, isSameDomain)
|
||||||
null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (result == null) {
|
||||||
|
result = context.components.services.appLinksInterceptor.onLoadRequest(
|
||||||
|
engineSession, uri, hasUserGesture, isSameDomain)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun adjustTrackingProtection(context: Context, session: EngineSession) {
|
private fun adjustTrackingProtection(context: Context, session: EngineSession) {
|
||||||
|
|
|
@ -78,6 +78,7 @@ import org.mozilla.fenix.downloads.DownloadNotificationBottomSheetDialog
|
||||||
import org.mozilla.fenix.downloads.DownloadService
|
import org.mozilla.fenix.downloads.DownloadService
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.ext.enterToImmersiveMode
|
import org.mozilla.fenix.ext.enterToImmersiveMode
|
||||||
|
import org.mozilla.fenix.ext.getPreferenceKey
|
||||||
import org.mozilla.fenix.ext.getRootView
|
import org.mozilla.fenix.ext.getRootView
|
||||||
import org.mozilla.fenix.ext.hideToolbar
|
import org.mozilla.fenix.ext.hideToolbar
|
||||||
import org.mozilla.fenix.ext.metrics
|
import org.mozilla.fenix.ext.metrics
|
||||||
|
@ -304,8 +305,10 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
|
||||||
context,
|
context,
|
||||||
sessionManager = sessionManager,
|
sessionManager = sessionManager,
|
||||||
sessionId = customTabSessionId,
|
sessionId = customTabSessionId,
|
||||||
interceptLinkClicks = true,
|
fragmentManager = parentFragmentManager,
|
||||||
fragmentManager = parentFragmentManager
|
launchInApp = { context.settings().preferences.getBoolean(
|
||||||
|
context.getPreferenceKey(R.string.pref_key_open_links_in_external_app), false)
|
||||||
|
}
|
||||||
),
|
),
|
||||||
owner = this,
|
owner = this,
|
||||||
view = view
|
view = view
|
||||||
|
@ -403,9 +406,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
|
||||||
url: String,
|
url: String,
|
||||||
triggeredByRedirect: Boolean,
|
triggeredByRedirect: Boolean,
|
||||||
triggeredByWebContent: Boolean
|
triggeredByWebContent: Boolean
|
||||||
): Boolean {
|
) {
|
||||||
browserToolbarView.expand()
|
browserToolbarView.expand()
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
}, owner = viewLifecycleOwner)
|
}, owner = viewLifecycleOwner)
|
||||||
|
|
||||||
|
|
|
@ -10,12 +10,16 @@ import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import mozilla.components.feature.accounts.FirefoxAccountsAuthFeature
|
import mozilla.components.feature.accounts.FirefoxAccountsAuthFeature
|
||||||
|
import mozilla.components.feature.app.links.AppLinksInterceptor
|
||||||
import mozilla.components.service.fxa.manager.FxaAccountManager
|
import mozilla.components.service.fxa.manager.FxaAccountManager
|
||||||
import mozilla.components.support.ktx.android.content.hasCamera
|
import mozilla.components.support.ktx.android.content.hasCamera
|
||||||
import org.mozilla.fenix.Experiments
|
import org.mozilla.fenix.Experiments
|
||||||
import org.mozilla.fenix.NavGraphDirections
|
import org.mozilla.fenix.NavGraphDirections
|
||||||
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.components.metrics.Event
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
|
import org.mozilla.fenix.ext.getPreferenceKey
|
||||||
|
import org.mozilla.fenix.ext.settings
|
||||||
import org.mozilla.fenix.isInExperiment
|
import org.mozilla.fenix.isInExperiment
|
||||||
import org.mozilla.fenix.settings.SupportUtils
|
import org.mozilla.fenix.settings.SupportUtils
|
||||||
import org.mozilla.fenix.test.Mockable
|
import org.mozilla.fenix.test.Mockable
|
||||||
|
@ -28,6 +32,7 @@ class Services(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
private val accountManager: FxaAccountManager
|
private val accountManager: FxaAccountManager
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val fxaRedirectUrl = FxaServer.redirectUrl(context)
|
val fxaRedirectUrl = FxaServer.redirectUrl(context)
|
||||||
|
|
||||||
val accountsAuthFeature by lazy {
|
val accountsAuthFeature by lazy {
|
||||||
|
@ -42,6 +47,17 @@ class Services(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val appLinksInterceptor by lazy {
|
||||||
|
AppLinksInterceptor(
|
||||||
|
context,
|
||||||
|
interceptLinkClicks = true,
|
||||||
|
launchInApp = {
|
||||||
|
context.settings().preferences.getBoolean(
|
||||||
|
context.getPreferenceKey(R.string.pref_key_open_links_in_external_app), false)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Launches the sign in and pairing custom tab from any screen in the app.
|
* Launches the sign in and pairing custom tab from any screen in the app.
|
||||||
* @param context the current Context
|
* @param context the current Context
|
||||||
|
|
|
@ -233,7 +233,7 @@ class DefaultBrowserToolbarController(
|
||||||
sessionManager.selectedSession?.let {
|
sessionManager.selectedSession?.let {
|
||||||
val redirect = getRedirect.invoke(it.url)
|
val redirect = getRedirect.invoke(it.url)
|
||||||
redirect.appIntent?.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
redirect.appIntent?.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
appLinksUseCases.openAppLink.invoke(redirect)
|
appLinksUseCases.openAppLink.invoke(redirect.appIntent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ToolbarMenu.Item.Bookmark -> {
|
ToolbarMenu.Item.Bookmark -> {
|
||||||
|
|
|
@ -43,6 +43,7 @@ class Settings private constructor(
|
||||||
const val autoBounceMaximumCount = 2
|
const val autoBounceMaximumCount = 2
|
||||||
const val trackingProtectionOnboardingMaximumCount = 2
|
const val trackingProtectionOnboardingMaximumCount = 2
|
||||||
const val FENIX_PREFERENCES = "fenix_preferences"
|
const val FENIX_PREFERENCES = "fenix_preferences"
|
||||||
|
|
||||||
private const val BLOCKED_INT = 0
|
private const val BLOCKED_INT = 0
|
||||||
private const val ASK_TO_ALLOW_INT = 1
|
private const val ASK_TO_ALLOW_INT = 1
|
||||||
private const val CFR_COUNT_CONDITION_FOCUS_INSTALLED = 1
|
private const val CFR_COUNT_CONDITION_FOCUS_INSTALLED = 1
|
||||||
|
|
|
@ -119,6 +119,7 @@
|
||||||
|
|
||||||
<!-- Privacy Settings -->
|
<!-- Privacy Settings -->
|
||||||
<string name="pref_key_open_links_in_a_private_tab" translatable="false">pref_key_open_links_in_a_private_tab</string>
|
<string name="pref_key_open_links_in_a_private_tab" translatable="false">pref_key_open_links_in_a_private_tab</string>
|
||||||
|
<string name="pref_key_open_links_in_external_app" translatable="false">pref_key_open_links_in_external_app</string>
|
||||||
|
|
||||||
<!-- Quick Action Sheet -->
|
<!-- Quick Action Sheet -->
|
||||||
<string name="pref_key_bounce_quick_action" translatable="false">pref_key_bounce_quick_action</string>
|
<string name="pref_key_bounce_quick_action" translatable="false">pref_key_bounce_quick_action</string>
|
||||||
|
|
|
@ -35,7 +35,7 @@ object Versions {
|
||||||
const val androidx_work = "2.2.0"
|
const val androidx_work = "2.2.0"
|
||||||
const val google_material = "1.1.0-beta01"
|
const val google_material = "1.1.0-beta01"
|
||||||
|
|
||||||
const val mozilla_android_components = "26.0.0-SNAPSHOT"
|
const val mozilla_android_components = "27.0.0-SNAPSHOT"
|
||||||
// Note that android-components also depends on application-services,
|
// Note that android-components also depends on application-services,
|
||||||
// and in fact is our main source of appservices-related functionality.
|
// and in fact is our main source of appservices-related functionality.
|
||||||
// The version number below tracks the application-services version
|
// The version number below tracks the application-services version
|
||||||
|
|
Loading…
Reference in New Issue