/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.fenix.settings import android.os.Bundle import androidx.core.content.edit import androidx.navigation.fragment.findNavController import androidx.preference.EditTextPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.Config import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar class SecretSettingsFragment : PreferenceFragmentCompat() { override fun onResume() { super.onResume() showToolbar(getString(R.string.preferences_debug_settings)) } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.secret_settings_preferences, rootKey) requirePreference(R.string.pref_key_allow_third_party_root_certs).apply { isVisible = true isChecked = context.settings().allowThirdPartyRootCerts onPreferenceChangeListener = object : SharedPreferenceUpdater() { override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { context.components.core.engine.settings.enterpriseRootsEnabled = newValue as Boolean return super.onPreferenceChange(preference, newValue) } } } requirePreference(R.string.pref_key_nimbus_use_preview).apply { isVisible = true isChecked = context.settings().nimbusUsePreview onPreferenceChangeListener = SharedPreferenceUpdater() } requirePreference(R.string.pref_key_enable_tabs_tray_to_compose).apply { isVisible = true isChecked = context.settings().enableTabsTrayToCompose onPreferenceChangeListener = SharedPreferenceUpdater() } requirePreference(R.string.pref_key_enable_compose_top_sites).apply { isVisible = Config.channel.isNightlyOrDebug isChecked = context.settings().enableComposeTopSites onPreferenceChangeListener = SharedPreferenceUpdater() } requirePreference(R.string.pref_key_enable_shopping_experience).apply { isVisible = Config.channel.isNightlyOrDebug isChecked = context.settings().enableShoppingExperience onPreferenceChangeListener = SharedPreferenceUpdater() } requirePreference(R.string.pref_key_enable_translations).apply { isVisible = FeatureFlags.translations isChecked = context.settings().enableTranslations onPreferenceChangeListener = SharedPreferenceUpdater() } requirePreference(R.string.pref_key_enable_fxsuggest).apply { isVisible = FeatureFlags.fxSuggest isChecked = context.settings().enableFxSuggest onPreferenceChangeListener = object : Preference.OnPreferenceChangeListener { override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { val newBooleanValue = newValue as? Boolean ?: return false val ingestionScheduler = requireContext().components.fxSuggest.ingestionScheduler if (newBooleanValue) { ingestionScheduler.startPeriodicIngestion() } else { ingestionScheduler.stopPeriodicIngestion() } requireContext().settings().preferences.edit { putBoolean(preference.key, newBooleanValue) } return true } } } // for performance reasons, this is only available in Nightly or Debug builds requirePreference(R.string.pref_key_custom_glean_server_url).apply { isVisible = Config.channel.isNightlyOrDebug && BuildConfig.GLEAN_CUSTOM_URL.isNullOrEmpty() } requirePreference(R.string.pref_key_custom_sponsored_stories_parameters).apply { isVisible = Config.channel.isNightlyOrDebug } } override fun onPreferenceTreeClick(preference: Preference): Boolean { when (preference.key) { getString(R.string.pref_key_custom_sponsored_stories_parameters) -> findNavController().nav( R.id.secretSettingsPreference, SecretSettingsFragmentDirections.actionSecretSettingsFragmentToSponsoredStoriesSettings(), ) } return super.onPreferenceTreeClick(preference) } }