From a1b2a41683bc5fad9f1f2b8504e60c19a49a6486 Mon Sep 17 00:00:00 2001 From: celenity Date: Tue, 8 Apr 2025 17:19:34 -0400 Subject: [PATCH] feat: Prevent fetching/configuring settings from Nimbus Signed-off-by: celenity --- patches/disable-nimbus.patch | 439 +++++++++++++++++++++++++++++++++++ scripts/patches.sh | 3 + 2 files changed, 442 insertions(+) create mode 100644 patches/disable-nimbus.patch diff --git a/patches/disable-nimbus.patch b/patches/disable-nimbus.patch new file mode 100644 index 00000000..2f0842ec --- /dev/null +++ b/patches/disable-nimbus.patch @@ -0,0 +1,439 @@ +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +index 0a8b8b4e38..aadfd0d4a6 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +@@ -53,7 +53,6 @@ import org.mozilla.fenix.ext.requireComponents + import org.mozilla.fenix.ext.runIfFragmentIsAttached + import org.mozilla.fenix.ext.settings + import org.mozilla.fenix.home.HomeFragment +-import org.mozilla.fenix.nimbus.FxNimbus + import org.mozilla.fenix.settings.quicksettings.protections.cookiebanners.getCookieBannerUIMode + import org.mozilla.fenix.shortcut.PwaOnboardingObserver + import org.mozilla.fenix.theme.ThemeManager +@@ -168,12 +167,6 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { + } + + private fun initTranslationsAction(context: Context, view: View) { +- if ( +- !FxNimbus.features.translations.value().mainFlowToolbarEnabled +- ) { +- return +- } +- + val translationsAction = Toolbar.ActionButton( + AppCompatResources.getDrawable( + context, +@@ -662,7 +655,6 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { + + override fun navToQuickSettingsSheet(tab: SessionState, sitePermissions: SitePermissions?) { + val useCase = requireComponents.useCases.trackingProtectionUseCases +- FxNimbus.features.cookieBanners.recordExposure() + useCase.containsException(tab.id) { hasTrackingProtectionException -> + lifecycleScope.launch { + val cookieBannersStorage = requireComponents.core.cookieBannersStorage +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt +index 760259e9fd..c3e014b6c5 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt +@@ -75,7 +75,6 @@ import org.mozilla.fenix.components.menu.store.MenuStore + import org.mozilla.fenix.components.menu.store.WebExtensionMenuItem + import org.mozilla.fenix.ext.runIfFragmentIsAttached + import org.mozilla.fenix.ext.settings +-import org.mozilla.fenix.nimbus.FxNimbus + import org.mozilla.fenix.settings.SupportUtils + import org.mozilla.fenix.settings.deletebrowsingdata.deleteAndQuit + import org.mozilla.fenix.theme.FirefoxTheme +@@ -300,8 +299,7 @@ class MenuDialogFragment : BottomSheetDialogFragment() { + val isTranslationEngineSupported = + browserStore.state.translationEngine.isEngineSupported ?: false + val isTranslationSupported = +- isTranslationEngineSupported && +- FxNimbus.features.translations.value().mainFlowBrowserMenuEnabled ++ isTranslationEngineSupported + val isPdf = selectedTab?.content?.isPdf ?: false + val isWebCompatEnabled by store.observeAsState(store.state.isWebCompatEnabled) { + it.isWebCompatEnabled +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +index 92c7c8b36c..ab22458d0e 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +@@ -42,7 +42,6 @@ import org.mozilla.fenix.R + import org.mozilla.fenix.components.accounts.FenixAccountManager + import org.mozilla.fenix.ext.components + import org.mozilla.fenix.ext.settings +-import org.mozilla.fenix.nimbus.FxNimbus + import org.mozilla.fenix.theme.ThemeManager + + /** +@@ -82,7 +81,6 @@ open class DefaultToolbarMenu( + get() = store.state.selectedTab + + override val menuBuilder by lazy { +- FxNimbus.features.print.recordExposure() + WebExtensionBrowserMenuBuilder( + items = coreMenuItems, + endOfMenuAlwaysVisible = shouldUseBottomToolbar, +@@ -203,12 +201,8 @@ open class DefaultToolbarMenu( + @VisibleForTesting(otherwise = PRIVATE) + fun shouldShowTranslations(): Boolean { + val isEngineSupported = store.state.translationEngine.isEngineSupported +- if (isEngineSupported == true) { +- FxNimbus.features.translations.recordExposure() +- } + return selectedSession?.let { +- isEngineSupported == true && +- FxNimbus.features.translations.value().mainFlowBrowserMenuEnabled ++ isEngineSupported == true + } ?: false + } + +@@ -457,7 +451,7 @@ open class DefaultToolbarMenu( + addAppToHomeScreenItem.apply { visible = ::canAddAppToHomescreen }, + if (shouldShowTopSites) addRemoveTopSitesItem else null, + saveToCollectionItem, +- if (FxNimbus.features.print.value().browserPrintEnabled) printPageItem else null, ++ printPageItem, + BrowserMenuDivider(), + settingsItem, + if (shouldDeleteDataOnQuit) deleteDataOnQuit else null, +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt +index a6f3b77a47..b2ce30c78f 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt +@@ -33,7 +33,6 @@ class FenixOnboarding(context: Context) : PreferencesHolder { + // - We would like to evaluate the configuration only once (and thus it's kept in memory + // and not re-evaluated) + val config by lazy { +- FxNimbus.features.onboarding.recordExposure() + FxNimbus.features.onboarding.value() + } + +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt +index 3d7ff49e55..7022c5aa59 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt +@@ -55,8 +55,8 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { + } + + requirePreference(R.string.pref_key_nimbus_use_preview).apply { +- isVisible = true +- isChecked = context.settings().nimbusUsePreview ++ isVisible = false ++ isChecked = false + onPreferenceChangeListener = SharedPreferenceUpdater() + } + +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +index 1b318ffee7..22d17989d4 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +@@ -64,7 +64,6 @@ import org.mozilla.fenix.ext.openSetDefaultBrowserOption + import org.mozilla.fenix.ext.requireComponents + import org.mozilla.fenix.ext.settings + import org.mozilla.fenix.ext.showToolbar +-import org.mozilla.fenix.nimbus.FxNimbus + import org.mozilla.fenix.perf.ProfilerViewModel + import org.mozilla.fenix.settings.account.AccountUiView + import org.mozilla.fenix.snackbar.FenixSnackbarDelegate +@@ -174,8 +173,7 @@ class SettingsFragment : PreferenceFragmentCompat() { + + findPreference( + getPreferenceKey(R.string.pref_key_translation), +- )?.isVisible = FxNimbus.features.translations.value().globalSettingsEnabled && +- requireContext().components.core.store.state.translationEngine.isEngineSupported == true ++ )?.isVisible = requireContext().components.core.store.state.translationEngine.isEngineSupported == true + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { +@@ -203,11 +201,8 @@ class SettingsFragment : PreferenceFragmentCompat() { + override fun onResume() { + super.onResume() + +- // Use nimbus to set the title, and a trivial addition +- val nimbusValidation = FxNimbus.features.nimbusValidation.value() +- +- val title = nimbusValidation.settingsTitle +- val suffix = nimbusValidation.settingsPunctuation ++ val title = getString(R.string.settings_title) ++ val suffix = "" + + showToolbar("$title$suffix") + +@@ -758,7 +753,6 @@ class SettingsFragment : PreferenceFragmentCompat() { + + @VisibleForTesting + internal fun setupCookieBannerPreference() { +- FxNimbus.features.cookieBanners.recordExposure() + if (context?.settings()?.shouldShowCookieBannerUI == false) return + with(requirePreference(R.string.pref_key_cookie_banner_private_mode)) { + isVisible = context.settings().shouldShowCookieBannerUI +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt +index 1a02f82498..b7658c03e3 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationSettingsFragment.kt +@@ -28,7 +28,6 @@ import org.mozilla.fenix.R + import org.mozilla.fenix.ext.requireComponents + import org.mozilla.fenix.ext.settings + import org.mozilla.fenix.ext.showToolbar +-import org.mozilla.fenix.nimbus.FxNimbus + import org.mozilla.fenix.theme.FirefoxTheme + + /** +@@ -51,9 +50,9 @@ class TranslationSettingsFragment : Fragment(), UserInteractionHandler { + FirefoxTheme { + TranslationSettings( + translationSwitchList = getTranslationSwitchItemList(), +- showAutomaticTranslations = FxNimbus.features.translations.value().globalLangSettingsEnabled, +- showNeverTranslate = FxNimbus.features.translations.value().globalSiteSettingsEnabled, +- showDownloads = FxNimbus.features.translations.value().downloadsEnabled, ++ showAutomaticTranslations = true, ++ showNeverTranslate = true, ++ showDownloads = true, + pageSettingsError = browserStore.observeAsComposableState { state -> + state.selectedTab?.translationsState?.settingsError + }.value, +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsDialogFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsDialogFragment.kt +index 2b38fffaf3..09edddb9c2 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsDialogFragment.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsDialogFragment.kt +@@ -43,7 +43,6 @@ import org.mozilla.fenix.ext.components + import org.mozilla.fenix.ext.requireComponents + import org.mozilla.fenix.ext.runIfFragmentIsAttached + import org.mozilla.fenix.ext.settings +-import org.mozilla.fenix.nimbus.FxNimbus + import org.mozilla.fenix.settings.SupportUtils + import org.mozilla.fenix.theme.FirefoxTheme + import org.mozilla.fenix.translations.preferences.downloadlanguages.DownloadLanguageFileDialog +@@ -173,7 +172,7 @@ class TranslationsDialogFragment : BottomSheetDialogFragment() { + translationsDialogState?.let { + TranslationsDialogContent( + learnMoreUrl = learnMoreUrl, +- showPageSettings = FxNimbus.features.translations.value().pageSettingsEnabled, ++ showPageSettings = true, + translationsDialogState = it, + onSettingClicked = { + Translations.action.record( +@@ -199,7 +198,7 @@ class TranslationsDialogFragment : BottomSheetDialogFragment() { + ) { + TranslationsOptionsDialogContent( + learnMoreUrl = learnMoreUrl, +- showGlobalSettings = FxNimbus.features.translations.value().globalSettingsEnabled, ++ showGlobalSettings = true, + isTranslated = translationsDialogState?.isTranslated == true, + initialFrom = translationsDialogState?.initialFrom, + onBackClicked = { translationsVisibility = true }, +diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +index b800c22431..4df6de4ffe 100644 +--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ++++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +@@ -148,10 +148,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates whether or not top sites should be shown on the home screen. + */ +- var showTopSitesFeature by lazyFeatureFlagPreference( ++ var showTopSitesFeature by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_show_top_sites), +- featureFlag = true, +- default = { homescreenSections[HomeScreenSection.TOP_SITES] == true }, ++ default = true, + ) + + var numberOfAppLaunches by intPreference( +@@ -197,10 +196,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + default = "", + ) + +- var nimbusExperimentsFetched by booleanPreference( +- appContext.getPreferenceKey(R.string.pref_key_nimbus_experiments_fetched), +- default = false, +- ) ++ var nimbusExperimentsFetched = true + + var utmParamsKnown by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_utm_params_known), +@@ -471,10 +467,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + default = false, + ) + +- var nimbusUsePreview by booleanPreference( +- appContext.getPreferenceKey(R.string.pref_key_nimbus_use_preview), +- default = false, +- ) ++ var nimbusUsePreview = false + + var isFirstNimbusRun: Boolean by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_is_first_run), +@@ -764,18 +757,15 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates if the re-engagement notification feature is enabled + */ +- var reEngagementNotificationEnabled by lazyFeatureFlagPreference( ++ var reEngagementNotificationEnabled by booleanPreference( + key = appContext.getPreferenceKey(R.string.pref_key_re_engagement_notification_enabled), +- default = { FxNimbus.features.reEngagementNotification.value().enabled }, +- featureFlag = true, ++ default = false, + ) + + /** + * Indicates if the re-engagement notification feature is enabled + */ +- val reEngagementNotificationType: Int +- get() = +- FxNimbus.features.reEngagementNotification.value().type ++ val reEngagementNotificationType: Int = 0 + + val shouldUseAutoBatteryTheme by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_auto_battery_theme), +@@ -1586,10 +1576,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { + get() = + FxNimbus.features.homescreen.value().sectionsEnabled + +- var historyMetadataUIFeature by lazyFeatureFlagPreference( ++ var historyMetadataUIFeature by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_history_metadata_feature), +- default = { homescreenSections[HomeScreenSection.RECENT_EXPLORATIONS] == true }, +- featureFlag = true, ++ default = true, + ) + + /** +@@ -1914,19 +1903,17 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates if the Compose Homepage is enabled. + */ +- var enableComposeHomepage by lazyFeatureFlagPreference( ++ var enableComposeHomepage by booleanPreference( + key = appContext.getPreferenceKey(R.string.pref_key_enable_compose_homepage), +- default = { FxNimbus.features.composeHomepage.value().enabled }, +- featureFlag = true, ++ default = false, + ) + + /** + * Indicates if the menu redesign is enabled. + */ +- var enableMenuRedesign by lazyFeatureFlagPreference( ++ var enableMenuRedesign by booleanPreference( + key = appContext.getPreferenceKey(R.string.pref_key_enable_menu_redesign), +- default = { FxNimbus.features.menuRedesign.value().enabled }, +- featureFlag = true, ++ default = false, + ) + + /** +@@ -2062,8 +2049,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates if the feature to close synced tabs is enabled. + */ +- val enableCloseSyncedTabs: Boolean +- get() = FxNimbus.features.remoteTabManagement.value().closeTabsEnabled ++ val enableCloseSyncedTabs: Boolean = true + + /** + * Returns the height of the bottom toolbar. +@@ -2146,10 +2132,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates if the user is shown the new navigation toolbar. + */ +- var navigationToolbarEnabled by lazyFeatureFlagPreference( ++ var navigationToolbarEnabled by booleanPreference( + key = appContext.getPreferenceKey(R.string.pref_key_toolbar_show_navigation_toolbar), +- default = { FxNimbus.features.navigationToolbar.value().enabled }, +- featureFlag = true, ++ default = false, + ) + + /** +@@ -2172,10 +2157,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates if the Set as default browser prompt for existing users feature is enabled. + */ +- var setAsDefaultBrowserPromptForExistingUsersEnabled by lazyFeatureFlagPreference( ++ var setAsDefaultBrowserPromptForExistingUsersEnabled by booleanPreference( + key = appContext.getPreferenceKey(R.string.pref_key_set_as_default_browser_prompt_enabled), +- default = { FxNimbus.features.setAsDefaultPrompt.value().enabled }, +- featureFlag = true, ++ default = false, + ) + + /** +@@ -2290,10 +2274,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { + /** + * Indicates whether or not we should use the new bookmarks UI. + */ +- var useNewBookmarks by lazyFeatureFlagPreference( ++ var useNewBookmarks by booleanPreference( + key = appContext.getPreferenceKey(R.string.pref_key_use_new_bookmarks_ui), +- default = { FxNimbus.features.bookmarks.value().newComposeUi }, +- featureFlag = true, ++ default = false, + ) + + var lastSavedInFolderGuid by stringPreference( +diff --git a/mobile/android/fenix/app/src/main/res/xml/preferences.xml b/mobile/android/fenix/app/src/main/res/xml/preferences.xml +index 3b85a2a548..43b833bca8 100644 +--- a/mobile/android/fenix/app/src/main/res/xml/preferences.xml ++++ b/mobile/android/fenix/app/src/main/res/xml/preferences.xml +@@ -232,11 +232,6 @@ + app:iconSpaceReserved="false" + android:title="@string/preferences_debug_info" + app:isPreferenceVisible="false" /> +- +