2 * Copyright 2016 Soren Stoutner <soren@stoutner.com>.
4 * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
6 * Privacy Browser is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * Privacy Browser is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Privacy Browser. If not, see <http://www.gnu.org/licenses/>.
20 package com.stoutner.privacybrowser;
22 import android.content.SharedPreferences;
23 import android.os.Build;
24 import android.os.Bundle;
25 import android.preference.Preference;
26 import android.preference.PreferenceFragment;
27 import android.view.MenuItem;
29 public class SettingsFragment extends PreferenceFragment {
30 private SharedPreferences.OnSharedPreferenceChangeListener preferencesListener;
31 private SharedPreferences savedPreferences;
34 public void onCreate(Bundle savedInstanceState) {
35 super.onCreate(savedInstanceState);
36 addPreferencesFromResource(R.xml.preferences);
38 final Preference homepagePreference = findPreference("homepage");
40 // Initialize savedPreferences.
41 savedPreferences = getPreferenceScreen().getSharedPreferences();
43 // Set the homepage URL as the summary text for the Homepage preference when the preference screen is loaded. The default is "https://www.duckduckgo.com".
44 homepagePreference.setSummary(savedPreferences.getString("homepage", "https://www.duckduckgo.com"));
46 // Listen for preference changes.
47 preferencesListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
49 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
51 // Several keys need to update the toggleJavaScript icon.
52 MenuItem toggleJavaScript = MainWebViewActivity.mainMenu.findItem(R.id.toggleJavaScript);
55 case "javascript_enabled":
56 // Set javaScriptEnabled to the new state. The default is false.
57 MainWebViewActivity.javaScriptEnabled = sharedPreferences.getBoolean("javascript_enabled", false);
59 // Update mainWebView and reload the website.
60 MainWebViewActivity.mainWebView.getSettings().setJavaScriptEnabled(MainWebViewActivity.javaScriptEnabled);
61 MainWebViewActivity.mainWebView.reload();
63 // Update the toggleJavaScript icon.
64 if (MainWebViewActivity.javaScriptEnabled) {
65 toggleJavaScript.setIcon(R.drawable.javascript_enabled);
67 if (MainWebViewActivity.firstPartyCookiesEnabled || MainWebViewActivity.domStorageEnabled) {
68 toggleJavaScript.setIcon(R.drawable.warning);
70 toggleJavaScript.setIcon(R.drawable.privacy_mode);
75 case "first_party_cookies_enabled":
76 // Set firstPartyCookiesEnabled to the new state. The default is false.
77 MainWebViewActivity.firstPartyCookiesEnabled = sharedPreferences.getBoolean("first_party_cookies_enabled", false);
79 // Update the checkbox in the options menu.
80 MenuItem firstPartyCookiesMenuItem = MainWebViewActivity.mainMenu.findItem(R.id.toggleFirstPartyCookies);
81 firstPartyCookiesMenuItem.setChecked(MainWebViewActivity.firstPartyCookiesEnabled);
83 // Update mainWebView and reload the website.
84 MainWebViewActivity.cookieManager.setAcceptCookie(MainWebViewActivity.firstPartyCookiesEnabled);
85 MainWebViewActivity.mainWebView.reload();
87 // Update the toggleJavaScript icon.
88 if (MainWebViewActivity.javaScriptEnabled) {
89 toggleJavaScript.setIcon(R.drawable.javascript_enabled);
91 if (MainWebViewActivity.firstPartyCookiesEnabled || MainWebViewActivity.domStorageEnabled) {
92 toggleJavaScript.setIcon(R.drawable.warning);
94 toggleJavaScript.setIcon(R.drawable.privacy_mode);
99 case "third_party_cookies_enabled":
100 // Set thirdPartyCookiesEnabled to the new state. The default is false.
101 MainWebViewActivity.thirdPartyCookiesEnabled = sharedPreferences.getBoolean("third_party_cookies_enabled", false);
103 // Update the checkbox in the options menu.
104 MenuItem thirdPartyCookiesMenuItem = MainWebViewActivity.mainMenu.findItem(R.id.toggleThirdPartyCookies);
105 thirdPartyCookiesMenuItem.setChecked(MainWebViewActivity.thirdPartyCookiesEnabled);
107 // Update mainWebView and reload the website if API >= 21.
108 if (Build.VERSION.SDK_INT >= 21) {
109 MainWebViewActivity.cookieManager.setAcceptThirdPartyCookies(MainWebViewActivity.mainWebView, MainWebViewActivity.thirdPartyCookiesEnabled);
110 MainWebViewActivity.mainWebView.reload();
114 case "dom_storage_enabled":
115 // Set domStorageEnabled to the new state. The default is false.
116 MainWebViewActivity.domStorageEnabled = sharedPreferences.getBoolean("dom_storage_enabled", false);
118 // Update the checkbox in the options menu.
119 MenuItem domStorageMenuItem = MainWebViewActivity.mainMenu.findItem(R.id.toggleDomStorage);
120 domStorageMenuItem.setChecked(MainWebViewActivity.domStorageEnabled);
122 // Update mainWebView and reload the website.
123 MainWebViewActivity.mainWebView.getSettings().setDomStorageEnabled(MainWebViewActivity.domStorageEnabled);
124 MainWebViewActivity.mainWebView.reload();
126 // Update the toggleJavaScript icon.
127 if (MainWebViewActivity.javaScriptEnabled) {
128 toggleJavaScript.setIcon(R.drawable.javascript_enabled);
130 if (MainWebViewActivity.firstPartyCookiesEnabled || MainWebViewActivity.domStorageEnabled) {
131 toggleJavaScript.setIcon(R.drawable.warning);
133 toggleJavaScript.setIcon(R.drawable.privacy_mode);
139 // Set the new homepage URL as the summary text for the Homepage preference. The default is "https://www.duckduckgo.com".
140 homepagePreference.setSummary(sharedPreferences.getString("homepage", "https://www.duckduckgo.com"));
142 // Update the homepage variable. The default is "https://www.duckduckgo.com".
143 MainWebViewActivity.homepage = sharedPreferences.getString("homepage", "https://www.duckduckgo.com");
146 // If no match, do nothing.
152 // Register the listener.
153 savedPreferences.registerOnSharedPreferenceChangeListener(preferencesListener);
157 public void onResume() {
159 savedPreferences.registerOnSharedPreferenceChangeListener(preferencesListener);
163 public void onPause() {
165 savedPreferences.unregisterOnSharedPreferenceChangeListener(preferencesListener);