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 package org.mozilla.fenix.components
import android.content.Context import android.content.Context
import android.content.SharedPreferences
import android.content.res.Configuration import android.content.res.Configuration
import android.os.Bundle import android.os.Bundle
import android.preference.PreferenceManager
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async import kotlinx.coroutines.async
@ -60,13 +58,11 @@ class Core(private val context: Context) {
* configuration (see build variants). * configuration (see build variants).
*/ */
val engine: Engine by lazy { val engine: Engine by lazy {
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
val defaultSettings = DefaultSettings( val defaultSettings = DefaultSettings(
requestInterceptor = AppRequestInterceptor(context), requestInterceptor = AppRequestInterceptor(context),
remoteDebuggingEnabled = Settings.getInstance(context).isRemoteDebuggingEnabled, remoteDebuggingEnabled = Settings.getInstance(context).isRemoteDebuggingEnabled,
testingModeEnabled = false, testingModeEnabled = false,
trackingProtectionPolicy = createTrackingProtectionPolicy(prefs), trackingProtectionPolicy = createTrackingProtectionPolicy(),
historyTrackingDelegate = HistoryDelegate(historyStorage) historyTrackingDelegate = HistoryDelegate(historyStorage)
) )
@ -133,17 +129,14 @@ class Core(private val context: Context) {
/** /**
* Constructs a [TrackingProtectionPolicy] based on current preferences. * 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 * @param normalMode whether or not tracking protection should be enabled
* in normal browsing mode, defaults to the current preference value. * in normal browsing mode, defaults to the current preference value.
* @param privateMode whether or not tracking protection should be enabled * @param privateMode whether or not tracking protection should be enabled
* in private browsing mode, default to the current preference value. * in private browsing mode, default to the current preference value.
* @return the constructed tracking protection policy based on preferences. * @return the constructed tracking protection policy based on preferences.
*/ */
fun createTrackingProtectionPolicy( private fun createTrackingProtectionPolicy(
prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context), normalMode: Boolean = Settings.getInstance(context).shouldUseTrackingProtection,
normalMode: Boolean = true,
privateMode: Boolean = true privateMode: Boolean = true
): TrackingProtectionPolicy { ): TrackingProtectionPolicy {
val trackingProtectionPolicy = TrackingProtectionPolicy.select( 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 * 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
import org.mozilla.fenix.R.string.pref_key_account_category 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_search_engine_settings
import org.mozilla.fenix.R.string.pref_key_tracking_protection_settings
import org.mozilla.fenix.utils.ItsNotBrokenSnack import org.mozilla.fenix.utils.ItsNotBrokenSnack
@SuppressWarnings("TooManyFunctions") @SuppressWarnings("TooManyFunctions")
@ -99,6 +100,9 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse
resources.getString(pref_key_search_engine_settings) -> { resources.getString(pref_key_search_engine_settings) -> {
navigateToSearchEngineSettings() navigateToSearchEngineSettings()
} }
resources.getString(pref_key_tracking_protection_settings) -> {
navigateToTrackingProtectionSettings()
}
resources.getString(pref_key_site_permissions) -> { resources.getString(pref_key_site_permissions) -> {
navigateToSitePermissions() navigateToSitePermissions()
} }
@ -221,6 +225,11 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope, AccountObse
Navigation.findNavController(view!!).navigate(directions) Navigation.findNavController(view!!).navigate(directions)
} }
private fun navigateToTrackingProtectionSettings() {
val directions = SettingsFragmentDirections.actionSettingsFragmentToTrackingProtectionFragment()
Navigation.findNavController(view!!).navigate(directions)
}
private fun navigateToThemeSettings() { private fun navigateToThemeSettings() {
val directions = SettingsFragmentDirections.actionSettingsFragmentToThemeFragment() val directions = SettingsFragmentDirections.actionSettingsFragmentToThemeFragment()
Navigation.findNavController(view!!).navigate(directions) 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 false
) )
val shouldUseTrackingProtection: Boolean
get() = preferences.getBoolean(
appContext.getPreferenceKey(R.string.pref_key_tracking_protection),
true
)
val shouldUseAutoBatteryTheme: Boolean val shouldUseAutoBatteryTheme: Boolean
get() = preferences.getBoolean( get() = preferences.getBoolean(
appContext.getPreferenceKey(R.string.pref_key_auto_battery_theme), 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 <action
android:id="@+id/action_settingsFragment_to_themeFragment" android:id="@+id/action_settingsFragment_to_themeFragment"
app:destination="@id/themeFragment" /> app:destination="@id/themeFragment" />
<action
android:id="@+id/action_settingsFragment_to_trackingProtectionFragment"
app:destination="@id/trackingProtectionFragment" />
</fragment> </fragment>
<fragment android:id="@+id/dataChoicesFragment" android:name="org.mozilla.fenix.settings.DataChoicesFragment" <fragment android:id="@+id/dataChoicesFragment" android:name="org.mozilla.fenix.settings.DataChoicesFragment"
android:label="DataChoicesFragment"/> android:label="DataChoicesFragment"/>
@ -240,4 +243,8 @@
android:id="@+id/themeFragment" android:id="@+id/themeFragment"
android:name="org.mozilla.fenix.settings.ThemeFragment" android:name="org.mozilla.fenix.settings.ThemeFragment"
android:label="ThemeFragment" /> android:label="ThemeFragment" />
<fragment
android:id="@+id/trackingProtectionFragment"
android:name="org.mozilla.fenix.settings.TrackingProtectionFragment"
android:label="TrackingProtectionFragment" />
</navigation> </navigation>

View File

@ -55,4 +55,9 @@
<string name="pref_key_dark_theme" translatable="false">pref_key_dark_theme</string> <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_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> <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> </resources>

View File

@ -156,6 +156,15 @@
<string name="sync_never_synced_summary">Last synced: never</string> <string name="sync_never_synced_summary">Last synced: never</string>
<!-- Advanced Preferences --> <!-- 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 --> <!-- Preference switch for Telemetry -->
<string name="preferences_telemetry">Telemetry</string> <string name="preferences_telemetry">Telemetry</string>
<!-- Preference switch for crash reporter --> <!-- Preference switch for crash reporter -->

View File

@ -55,6 +55,10 @@
<androidx.preference.PreferenceCategory <androidx.preference.PreferenceCategory
android:title="@string/preferences_category_advanced" android:title="@string/preferences_category_advanced"
app:iconSpaceReserved="false"> 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 <androidx.preference.Preference
android:icon="@drawable/ic_permission" android:icon="@drawable/ic_permission"
android:key="@string/pref_key_site_permissions" 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>