1
0
Fork 0

For #1084 - Add Setting to enable/disable TP

master
Emily Kager 2019-04-12 14:36:46 -07:00 committed by Colin Lee
parent 9b1c1b5f4d
commit 068744eb96
10 changed files with 129 additions and 10 deletions

View File

@ -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
*/

View File

@ -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)

View File

@ -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<Preference>(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<Preference>(exceptions)
preferenceExceptions?.onPreferenceClickListener = getClickListenerForSignOut()
}
private fun getClickListenerForSignOut(): Preference.OnPreferenceClickListener {
return Preference.OnPreferenceClickListener {
// TODO go to Exceptions Fragment
true
}
}
}

View File

@ -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),

File diff suppressed because one or more lines are too long

View File

@ -198,6 +198,9 @@
<action
android:id="@+id/action_settingsFragment_to_themeFragment"
app:destination="@id/themeFragment" />
<action
android:id="@+id/action_settingsFragment_to_trackingProtectionFragment"
app:destination="@id/trackingProtectionFragment" />
</fragment>
<fragment android:id="@+id/dataChoicesFragment" android:name="org.mozilla.fenix.settings.DataChoicesFragment"
android:label="DataChoicesFragment"/>
@ -240,4 +243,8 @@
android:id="@+id/themeFragment"
android:name="org.mozilla.fenix.settings.ThemeFragment"
android:label="ThemeFragment" />
<fragment
android:id="@+id/trackingProtectionFragment"
android:name="org.mozilla.fenix.settings.TrackingProtectionFragment"
android:label="TrackingProtectionFragment" />
</navigation>

View File

@ -55,4 +55,9 @@
<string name="pref_key_dark_theme" translatable="false">pref_key_dark_theme</string>
<string name="pref_key_auto_battery_theme" translatable="false">pref_key_auto_battery_theme</string>
<string name="pref_key_follow_device_theme" translatable="false">pref_key_follow_device_theme</string>
<!-- Tracking Protection Settings -->
<string name="pref_key_tracking_protection_settings" translatable="false">pref_key_tracking_protection_settings</string>
<string name="pref_key_tracking_protection" translatable="false">pref_key_tracking_protection</string>
<string name="pref_key_tracking_protection_exceptions" translatable="false">pref_key_tracking_protection_exceptions</string>
</resources>

View File

@ -156,6 +156,15 @@
<string name="sync_never_synced_summary">Last synced: never</string>
<!-- Advanced Preferences -->
<!-- Preference for tracking protection settings -->
<string name="preferences_tracking_protection_settings">Tracking Protection</string>
<!-- Preference switch for tracking protection -->
<string name="preferences_tracking_protection">Tracking Protection</string>
<!-- Preference switch description for tracking protection -->
<string name="preferences_tracking_protection_description">Block content and scripts that track you online</string>
<!-- Preference for tracking protection exceptions -->
<string name="preferences_tracking_protection_exceptions">Exceptions</string>
<!-- Preference switch for Telemetry -->
<string name="preferences_telemetry">Telemetry</string>
<!-- Preference switch for crash reporter -->

View File

@ -55,6 +55,10 @@
<androidx.preference.PreferenceCategory
android:title="@string/preferences_category_advanced"
app:iconSpaceReserved="false">
<androidx.preference.Preference
android:icon="@drawable/ic_tracking_protection"
android:key="@string/pref_key_tracking_protection_settings"
android:title="@string/preferences_tracking_protection" />
<androidx.preference.Preference
android:icon="@drawable/ic_permission"
android:key="@string/pref_key_site_permissions"

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreference
android:defaultValue="true"
android:icon="@drawable/ic_tracking_protection"
android:key="@string/pref_key_tracking_protection"
android:summary="@string/preferences_tracking_protection_description"
android:title="@string/preferences_tracking_protection" />
<Preference
android:icon="@drawable/ic_internet"
android:key="@string/pref_key_tracking_protection_exceptions"
android:title="@string/preferences_tracking_protection_exceptions" />
</androidx.preference.PreferenceScreen>