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 18b059b75..bd2d4a124 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Core.kt @@ -5,10 +5,8 @@ package org.mozilla.fenix.components import android.content.Context -import android.content.SharedPreferences import android.content.res.Configuration import android.os.Bundle -import android.preference.PreferenceManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.async @@ -60,13 +58,11 @@ class Core(private val context: Context) { * configuration (see build variants). */ val engine: Engine by lazy { - val prefs = PreferenceManager.getDefaultSharedPreferences(context) - val defaultSettings = DefaultSettings( requestInterceptor = AppRequestInterceptor(context), remoteDebuggingEnabled = Settings.getInstance(context).isRemoteDebuggingEnabled, testingModeEnabled = false, - trackingProtectionPolicy = createTrackingProtectionPolicy(prefs), + trackingProtectionPolicy = createTrackingProtectionPolicy(), historyTrackingDelegate = HistoryDelegate(historyStorage) ) @@ -133,17 +129,14 @@ class Core(private val context: Context) { /** * Constructs a [TrackingProtectionPolicy] based on current preferences. * - * @param prefs the shared preferences to use when reading tracking - * protection settings. * @param normalMode whether or not tracking protection should be enabled * in normal browsing mode, defaults to the current preference value. * @param privateMode whether or not tracking protection should be enabled * in private browsing mode, default to the current preference value. * @return the constructed tracking protection policy based on preferences. */ - fun createTrackingProtectionPolicy( - prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context), - normalMode: Boolean = true, + private fun createTrackingProtectionPolicy( + normalMode: Boolean = Settings.getInstance(context).shouldUseTrackingProtection, privateMode: Boolean = true ): TrackingProtectionPolicy { val trackingProtectionPolicy = TrackingProtectionPolicy.select( @@ -160,6 +153,11 @@ class Core(private val context: Context) { } } + fun updateTrackingProtection(newValue: Boolean) { + engine.settings.trackingProtectionPolicy = + createTrackingProtectionPolicy(normalMode = newValue) + } + /** * Sets Preferred Color scheme based on Dark/Light Theme Settings or Current Configuration */ 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 8f7ae35b3..e281337cc 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt @@ -47,6 +47,7 @@ import org.mozilla.fenix.R.string.pref_key_theme 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_search_engine_settings +import org.mozilla.fenix.R.string.pref_key_tracking_protection_settings import org.mozilla.fenix.utils.ItsNotBrokenSnack @SuppressWarnings("TooManyFunctions") @@ -99,6 +100,9 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse resources.getString(pref_key_search_engine_settings) -> { navigateToSearchEngineSettings() } + resources.getString(pref_key_tracking_protection_settings) -> { + navigateToTrackingProtectionSettings() + } resources.getString(pref_key_site_permissions) -> { navigateToSitePermissions() } @@ -221,6 +225,11 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse Navigation.findNavController(view!!).navigate(directions) } + private fun navigateToTrackingProtectionSettings() { + val directions = SettingsFragmentDirections.actionSettingsFragmentToTrackingProtectionFragment() + Navigation.findNavController(view!!).navigate(directions) + } + private fun navigateToThemeSettings() { val directions = SettingsFragmentDirections.actionSettingsFragmentToThemeFragment() Navigation.findNavController(view!!).navigate(directions) diff --git a/app/src/main/java/org/mozilla/fenix/settings/TrackingProtectionFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/TrackingProtectionFragment.kt new file mode 100644 index 000000000..72f61f7bb --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/settings/TrackingProtectionFragment.kt @@ -0,0 +1,51 @@ +/* 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.appcompat.app.AppCompatActivity +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat +import org.mozilla.fenix.R +import org.mozilla.fenix.ext.getPreferenceKey +import org.mozilla.fenix.ext.requireComponents + +class TrackingProtectionFragment : PreferenceFragmentCompat() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as AppCompatActivity).title = getString(R.string.preferences_tracking_protection) + (activity as AppCompatActivity).supportActionBar?.show() + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.tracking_protection_preferences, rootKey) + } + + override fun onResume() { + super.onResume() + // Tracking Protection Switch + val trackingProtectionKey = + context!!.getPreferenceKey(R.string.pref_key_tracking_protection) + val preferenceTP = findPreference(trackingProtectionKey) + preferenceTP?.onPreferenceChangeListener = + Preference.OnPreferenceChangeListener { _, newValue -> + requireComponents.core.updateTrackingProtection(newValue as Boolean) + true + } + + // Exceptions + val exceptions = + context!!.getPreferenceKey(R.string.pref_key_tracking_protection_exceptions) + val preferenceExceptions = findPreference(exceptions) + preferenceExceptions?.onPreferenceClickListener = getClickListenerForSignOut() + } + + private fun getClickListenerForSignOut(): Preference.OnPreferenceClickListener { + return Preference.OnPreferenceClickListener { + // TODO go to Exceptions Fragment + true + } + } +} 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 95979d9d5..63c2134ce 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -79,6 +79,12 @@ class Settings private constructor(context: Context) { false ) + val shouldUseTrackingProtection: Boolean + get() = preferences.getBoolean( + appContext.getPreferenceKey(R.string.pref_key_tracking_protection), + true + ) + val shouldUseAutoBatteryTheme: Boolean get() = preferences.getBoolean( appContext.getPreferenceKey(R.string.pref_key_auto_battery_theme), diff --git a/app/src/main/res/drawable/ic_tracking_protection.xml b/app/src/main/res/drawable/ic_tracking_protection.xml new file mode 100644 index 000000000..7600a698b --- /dev/null +++ b/app/src/main/res/drawable/ic_tracking_protection.xml @@ -0,0 +1,14 @@ + + + + + diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index f6df84c12..2acb4eefd 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -198,6 +198,9 @@ + @@ -240,4 +243,8 @@ android:id="@+id/themeFragment" android:name="org.mozilla.fenix.settings.ThemeFragment" android:label="ThemeFragment" /> + \ No newline at end of file diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 33805b6b4..251148571 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -55,4 +55,9 @@ pref_key_dark_theme pref_key_auto_battery_theme pref_key_follow_device_theme + + + pref_key_tracking_protection_settings + pref_key_tracking_protection + pref_key_tracking_protection_exceptions diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f7e8a1357..60e8e9565 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -156,6 +156,15 @@ Last synced: never + + Tracking Protection + + Tracking Protection + + Block content and scripts that track you online + + Exceptions + Telemetry diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 50c166e25..a048f31e3 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -55,6 +55,10 @@ + + + + + +