diff --git a/app/src/main/java/org/mozilla/fenix/components/Core.kt b/app/src/main/java/org/mozilla/fenix/components/Core.kt index adb26abaae..99ca5d9fae 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Core.kt @@ -25,7 +25,7 @@ import mozilla.components.feature.session.HistoryDelegate import mozilla.components.feature.session.bundling.SessionBundleStorage import mozilla.components.lib.crash.handler.CrashHandlerService import org.mozilla.fenix.AppRequestInterceptor -import org.mozilla.fenix.ext.components +import org.mozilla.fenix.utils.Settings import org.mozilla.geckoview.GeckoRuntime import org.mozilla.geckoview.GeckoRuntimeSettings import java.util.concurrent.TimeUnit @@ -60,7 +60,7 @@ class Core(private val context: Context) { val defaultSettings = DefaultSettings( requestInterceptor = AppRequestInterceptor(context), - remoteDebuggingEnabled = false, + remoteDebuggingEnabled = Settings.getInstance(context).isRemoteDebuggingEnabled, testingModeEnabled = false, trackingProtectionPolicy = createTrackingProtectionPolicy(prefs), historyTrackingDelegate = HistoryDelegate(historyStorage) diff --git a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt index 0c5aa19c50..ec8aab594f 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt @@ -24,31 +24,32 @@ import kotlinx.coroutines.launch import mozilla.components.concept.sync.AccountObserver import mozilla.components.concept.sync.OAuthAccount import mozilla.components.concept.sync.Profile -import kotlin.coroutines.CoroutineContext -import java.io.File import mozilla.components.service.fxa.FxaUnauthorizedException import mozilla.components.support.ktx.android.graphics.toDataUri +import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.FenixApplication import org.mozilla.fenix.HomeActivity -import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.R -import org.mozilla.fenix.ext.getPreferenceKey -import org.mozilla.fenix.ext.requireComponents -import org.mozilla.fenix.R.string.pref_key_leakcanary +import org.mozilla.fenix.R.string.pref_key_about +import org.mozilla.fenix.R.string.pref_key_accessibility +import org.mozilla.fenix.R.string.pref_key_account +import org.mozilla.fenix.R.string.pref_key_account_category +import org.mozilla.fenix.R.string.pref_key_data_choices import org.mozilla.fenix.R.string.pref_key_feedback import org.mozilla.fenix.R.string.pref_key_help +import org.mozilla.fenix.R.string.pref_key_language +import org.mozilla.fenix.R.string.pref_key_leakcanary import org.mozilla.fenix.R.string.pref_key_make_default_browser import org.mozilla.fenix.R.string.pref_key_rate -import org.mozilla.fenix.R.string.pref_key_site_permissions -import org.mozilla.fenix.R.string.pref_key_accessibility -import org.mozilla.fenix.R.string.pref_key_language -import org.mozilla.fenix.R.string.pref_key_data_choices -import org.mozilla.fenix.R.string.pref_key_about -import org.mozilla.fenix.R.string.pref_key_sign_in -import org.mozilla.fenix.R.string.pref_key_account -import org.mozilla.fenix.R.string.pref_key_account_category +import org.mozilla.fenix.R.string.pref_key_remote_debugging import org.mozilla.fenix.R.string.pref_key_search_engine_settings +import org.mozilla.fenix.R.string.pref_key_sign_in +import org.mozilla.fenix.R.string.pref_key_site_permissions +import org.mozilla.fenix.ext.getPreferenceKey +import org.mozilla.fenix.ext.requireComponents +import java.io.File +import kotlin.coroutines.CoroutineContext @SuppressWarnings("TooManyFunctions") class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObserver { @@ -184,9 +185,11 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse private fun setupPreferences() { val makeDefaultBrowserKey = context!!.getPreferenceKey(pref_key_make_default_browser) val leakKey = context!!.getPreferenceKey(pref_key_leakcanary) + val debuggingKey = context!!.getPreferenceKey(pref_key_remote_debugging) val preferenceMakeDefaultBrowser = findPreference(makeDefaultBrowserKey) val preferenceLeakCanary = findPreference(leakKey) + val preferenceRemoteDebugging = findPreference(debuggingKey) preferenceMakeDefaultBrowser?.onPreferenceClickListener = getClickListenerForMakeDefaultBrowser() @@ -199,6 +202,12 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse true } } + + preferenceRemoteDebugging?.onPreferenceChangeListener = + Preference.OnPreferenceChangeListener { _, newValue -> + requireComponents.core.engine.settings.remoteDebuggingEnabled = newValue as Boolean + true + } } private val defaultClickListener = OnPreferenceClickListener { preference -> @@ -261,7 +270,8 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse override fun onError(error: Exception) { // TODO we could display some error states in this UI. when (error) { - is FxaUnauthorizedException -> {} + is FxaUnauthorizedException -> { + } } } diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index e3f9735ed4..b4f86878e4 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -41,6 +41,9 @@ class Settings private constructor(context: Context) { val isCrashReportingEnabled: Boolean get() = preferences.getBoolean(appContext.getPreferenceKey(R.string.pref_key_crash_reporter), true) + val isRemoteDebuggingEnabled: Boolean + get() = preferences.getBoolean(appContext.getPreferenceKey(R.string.pref_key_remote_debugging), false) + val isTelemetryEnabled: Boolean get() = preferences.getBoolean(appContext.getPreferenceKey(R.string.pref_key_telemetry), true) @@ -54,6 +57,7 @@ class Settings private constructor(context: Context) { preferences.edit().putInt(appContext.getPreferenceKey(R.string.pref_key_bounce_quick_action), autoBounceQuickActionSheetCount + 1).apply() } + fun setDefaultSearchEngineByName(name: String) { preferences.edit() .putString(appContext.getPreferenceKey(R.string.pref_key_search_engine), name) diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 45e2f5018b..2f062a7c5b 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -20,6 +20,7 @@ pref_key_private_mode pref_key_theme pref_key_leakcanary + pref_key_remote_debugging pref_key_telemetry diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 316c3df60c..01430014b0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -115,6 +115,10 @@ Data choices Leak Canary + + Developer tools + + Remote debugging via USB Show search suggestions diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 9078011b15..093608a127 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -73,6 +73,15 @@ android:defaultValue="false" /> + + + +