tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 14c7e4f62496366a0daad35654714f49c8e5d016
parent e3f52915c9c74a7eedec6cc291792f4e845aedae
Author: Titouan Thibaud <tthibaud@mozilla.com>
Date:   Tue, 14 Oct 2025 16:08:03 +0000

Bug 1994182 - Add the ability to set Open in App settings from tests. r=android-reviewers,Roger

Differential Revision: https://phabricator.services.mozilla.com/D268540

Diffstat:
Mmobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelper.kt | 14++++++++++++++
Mmobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelperDelegate.kt | 26++++++++++++++++++++++++++
Mmobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt | 5+++++
3 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelper.kt b/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelper.kt @@ -122,6 +122,14 @@ interface FeatureSettingsHelper { var isComposeLoginsEnabled: Boolean /** + * The Open links in External apps settings, between the following options: + * - Ask before opening + * - Never + * - Always open in app + */ + var openLinksInExternalApp: OpenLinksInApp + + /** * Enable or disable the translations prompt after a page that can be translated is loaded. */ fun enableOrDisablePageLoadTranslationsPrompt(enableTranslationsPrompt: Boolean) { @@ -149,3 +157,9 @@ enum class ETPPolicy { STRICT, CUSTOM, } + +enum class OpenLinksInApp { + ALWAYS, + NEVER, + ASK, +} diff --git a/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelperDelegate.kt b/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelperDelegate.kt @@ -49,6 +49,7 @@ class FeatureSettingsHelperDelegate : FeatureSettingsHelper { isTabSwipeCFREnabled = settings.hasShownTabSwipeCFR, isTermsOfServiceAccepted = settings.hasAcceptedTermsOfService, isComposeLoginsEnabled = settings.enableComposeLogins, + openLinksInApp = getOpenLinksInApp(settings), ) /** @@ -76,6 +77,7 @@ class FeatureSettingsHelperDelegate : FeatureSettingsHelper { override var isTabSwipeCFREnabled: Boolean by updatedFeatureFlags::isTabSwipeCFREnabled override var isTermsOfServiceAccepted: Boolean by updatedFeatureFlags::isTermsOfServiceAccepted override var isComposeLoginsEnabled: Boolean by updatedFeatureFlags::isComposeLoginsEnabled + override var openLinksInExternalApp: OpenLinksInApp by updatedFeatureFlags::openLinksInApp override fun applyFlagUpdates() { Log.i(TAG, "applyFlagUpdates: Trying to apply the updated feature flags: $updatedFeatureFlags") @@ -113,6 +115,7 @@ class FeatureSettingsHelperDelegate : FeatureSettingsHelper { settings.hasShownTabSwipeCFR = !featureFlags.isTabSwipeCFREnabled settings.hasAcceptedTermsOfService = featureFlags.isTermsOfServiceAccepted settings.enableComposeLogins = featureFlags.isComposeLoginsEnabled + setOpenLinksInApp(featureFlags.openLinksInApp) } } @@ -138,6 +141,7 @@ private data class FeatureFlags( var isTabSwipeCFREnabled: Boolean, var isTermsOfServiceAccepted: Boolean, var isComposeLoginsEnabled: Boolean, + var openLinksInApp: OpenLinksInApp, ) internal fun getETPPolicy(settings: Settings): ETPPolicy { @@ -195,6 +199,28 @@ private fun setETPPolicy(policy: ETPPolicy) { } } +internal fun getOpenLinksInApp(settings: Settings): OpenLinksInApp { + return when (settings.openLinksInExternalApp) { + appContext.getString(R.string.pref_key_open_links_in_apps_always) -> OpenLinksInApp.ALWAYS + appContext.getString(R.string.pref_key_open_links_in_apps_ask) -> OpenLinksInApp.ASK + appContext.getString(R.string.pref_key_open_links_in_apps_never) -> OpenLinksInApp.NEVER + else -> { + Log.i(TAG, "getOpenLinksInApp: Unknown preference value found: \"${settings.openLinksInExternalApp}\", defaulting to \"Ask before opening\".") + OpenLinksInApp.ASK + } + } +} + +private fun setOpenLinksInApp(value: OpenLinksInApp) { + val prefValue = when (value) { + OpenLinksInApp.ALWAYS -> appContext.getString(R.string.pref_key_open_links_in_apps_always) + OpenLinksInApp.ASK -> appContext.getString(R.string.pref_key_open_links_in_apps_ask) + OpenLinksInApp.NEVER -> appContext.getString(R.string.pref_key_open_links_in_apps_never) + } + settings.openLinksInExternalApp = prefValue + Log.i(TAG, "setOpenLinksInApp: Set the preference to \"$prefValue\".") +} + internal fun getFeaturePermission(feature: PhoneFeature, settings: Settings): SitePermissionsRules.Action { Log.i(TAG, "getFeaturePermission: The default permission for $feature is ${feature.getAction(settings)}.") return feature.getAction(settings) diff --git a/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt b/mobile/android/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt @@ -72,6 +72,7 @@ class HomeActivityTestRule( isTabSwipeCFREnabled: Boolean = false, isTermsOfServiceAccepted: Boolean = true, isComposeLoginsEnabled: Boolean = false, + openLinksInExternalApp: OpenLinksInApp = getOpenLinksInApp(settings), ) : this(initialTouchMode, launchActivity, skipOnboarding) { this.isHomepageHeaderEnabled = isHomepageHeaderEnabled this.isPocketEnabled = isPocketEnabled @@ -94,6 +95,7 @@ class HomeActivityTestRule( this.isTabSwipeCFREnabled = isTabSwipeCFREnabled this.isTermsOfServiceAccepted = isTermsOfServiceAccepted this.isComposeLoginsEnabled = isComposeLoginsEnabled + this.openLinksInExternalApp = openLinksInExternalApp } /** @@ -205,6 +207,7 @@ class HomeActivityIntentTestRule internal constructor( isTabSwipeCFREnabled: Boolean = false, isTermsOfServiceAccepted: Boolean = true, isComposeLoginsEnabled: Boolean = false, + openLinksInExternalApp: OpenLinksInApp = getOpenLinksInApp(settings), ) : this(initialTouchMode, launchActivity, skipOnboarding) { this.isHomepageHeaderEnabled = isHomepageHeaderEnabled this.isPocketEnabled = isPocketEnabled @@ -227,6 +230,7 @@ class HomeActivityIntentTestRule internal constructor( this.isTabSwipeCFREnabled = isTabSwipeCFREnabled this.isTermsOfServiceAccepted = isTermsOfServiceAccepted this.isComposeLoginsEnabled = isComposeLoginsEnabled + this.openLinksInExternalApp = openLinksInExternalApp } private val longTapUserPreference = getLongPressTimeout() @@ -301,6 +305,7 @@ class HomeActivityIntentTestRule internal constructor( isTabSwipeCFREnabled = !settings.hasShownTabSwipeCFR isTermsOfServiceAccepted = settings.hasAcceptedTermsOfService isComposeLoginsEnabled = settings.enableComposeLogins + openLinksInExternalApp = getOpenLinksInApp(settings) } companion object {