// cookieManager is used in onCreate(), onOptionsItemSelected(), and onNavigationItemSelected().
private CookieManager cookieManager;
- // cookiesEnabled is used in onCreate(), onCreateOptionsMenu(), and onOptionsItemSelected().
- private boolean cookiesEnabled;
+ // firstPartyCookiesEnabled is used in onCreate(), onCreateOptionsMenu(), onPrepareOptionsMenu(), and onOptionsItemSelected().
+ private boolean firstPartyCookiesEnabled;
+ // thirdPartyCookiesEnabled is uesd in onCreate(), onCreateOptionsMenu(), onPrepareOptionsMenu(), and onOptionsItemSelected().
+ private boolean thirdPartyCookiesEnabled;
// urlTextBox is used in onCreate(), onOptionsItemSelected(), and loadUrlFromTextBox().
private EditText urlTextBox;
javaScriptEnabled = savedPreferences.getBoolean("javascript_enabled", false);
mainWebView.getSettings().setJavaScriptEnabled(javaScriptEnabled);
+ // Initialize cookieManager.
+ cookieManager = CookieManager.getInstance();
+
+ // Set cookies initial status.
+ firstPartyCookiesEnabled = savedPreferences.getBoolean("first_party_cookies_enabled", false);
+ cookieManager.setAcceptCookie(firstPartyCookiesEnabled);
+
+ // Set third-party cookies initial status if API >= 21.
+ if (Build.VERSION.SDK_INT >= 21) {
+ thirdPartyCookiesEnabled = savedPreferences.getBoolean("third_party_cookies_enabled", false);
+ cookieManager.setAcceptThirdPartyCookies(mainWebView, thirdPartyCookiesEnabled);
+ }
+
// Set DOM storage initial status.
domStorageEnabled = savedPreferences.getBoolean("dom_storage_enabled", false);
mainWebView.getSettings().setDomStorageEnabled(domStorageEnabled);
- /* Save Form Data does nothing until database storage is implemented.
- // Set Save Form Data initial status.
- saveFormDataEnabled = true;
- mainWebView.getSettings().setSaveFormData(saveFormDataEnabled);
- */
-
- // Set cookies initial status.
- cookiesEnabled = savedPreferences.getBoolean("cookies_enabled", false);
- cookieManager = CookieManager.getInstance();
- cookieManager.setAcceptCookie(cookiesEnabled);
-
// Set homepage initial status.
homepage = savedPreferences.getString("homepage", "https://www.duckduckgo.com");
// Get MenuItems for checkable menu items.
MenuItem toggleJavaScript = menu.findItem(R.id.toggleJavaScript);
+ MenuItem toggleFirstPartyCookies = menu.findItem(R.id.toggleFirstPartyCookies);
+ MenuItem toggleThirdPartyCookies = menu.findItem(R.id.toggleThirdPartyCookies);
MenuItem toggleDomStorage = menu.findItem(R.id.toggleDomStorage);
/* toggleSaveFormData does nothing until database storage is implemented.
MenuItem toggleSaveFormData = menu.findItem(R.id.toggleSaveFormData);
*/
- MenuItem toggleCookies = menu.findItem(R.id.toggleCookies);
// Set the initial icon for toggleJavaScript
if (javaScriptEnabled) {
toggleJavaScript.setIcon(R.drawable.javascript_enabled);
} else {
- if (domStorageEnabled || cookiesEnabled) {
+ if (domStorageEnabled || firstPartyCookiesEnabled) {
toggleJavaScript.setIcon(R.drawable.warning);
} else {
toggleJavaScript.setIcon(R.drawable.privacy_mode);
}
// Set the initial status of the menu item checkboxes.
+ toggleFirstPartyCookies.setChecked(firstPartyCookiesEnabled);
+ toggleThirdPartyCookies.setChecked(thirdPartyCookiesEnabled);
toggleDomStorage.setChecked(domStorageEnabled);
/* toggleSaveFormData does nothing until database storage is implemented.
toggleSaveFormData.setChecked(saveFormDataEnabled);
*/
- toggleCookies.setChecked(cookiesEnabled);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
+ // Only enable Third-Party Cookies if SDK >= 21 and First-Party Cookies are enabled.
+ MenuItem toggleThirdPartyCookies = menu.findItem(R.id.toggleThirdPartyCookies);
+ if ((Build.VERSION.SDK_INT >= 21) && firstPartyCookiesEnabled) {
+ toggleThirdPartyCookies.setEnabled(true);
+ } else {
+ toggleThirdPartyCookies.setEnabled(false);
+ }
+
// Enable Clear Cookies if there are any.
MenuItem clearCookies = menu.findItem(R.id.clearCookies);
clearCookies.setEnabled(cookieManager.hasCookies());
mainWebView.reload();
// Update the toggleJavaScript icon and display a snackbar.
- if (domStorageEnabled || cookiesEnabled) {
+ if (domStorageEnabled || firstPartyCookiesEnabled) {
menuItem.setIcon(R.drawable.warning);
- if (domStorageEnabled && cookiesEnabled) {
- Snackbar.make(findViewById(R.id.mainWebView), R.string.both_still_enabled, Snackbar.LENGTH_SHORT).show();
- } else {
- if (domStorageEnabled) {
- Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_still_enabled, Snackbar.LENGTH_SHORT).show();
- } else {
- Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_still_enabled, Snackbar.LENGTH_SHORT).show();
- }
- }
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.javascript_disabled, Snackbar.LENGTH_SHORT).show();
} else {
menuItem.setIcon(R.drawable.privacy_mode);
Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show();
}
return true;
- case R.id.toggleDomStorage:
- if (domStorageEnabled) {
- domStorageEnabled = false;
+ case R.id.toggleFirstPartyCookies:
+ if (firstPartyCookiesEnabled) {
+ firstPartyCookiesEnabled = false;
menuItem.setChecked(false);
- mainWebView.getSettings().setDomStorageEnabled(false);
+ cookieManager.setAcceptCookie(false);
mainWebView.reload();
- // Update the toggleJavaScript icon and display a snackbar if appropriate.
- if (!javaScriptEnabled && !cookiesEnabled) {
- toggleJavaScript.setIcon(R.drawable.privacy_mode);
- Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show();
- } else {
- if (cookiesEnabled) {
+ // Update the toggleJavaScript icon if appropriate and display a snackbar.
+ if (!javaScriptEnabled) {
+ if (domStorageEnabled) {
toggleJavaScript.setIcon(R.drawable.warning);
- Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_still_enabled, Snackbar.LENGTH_SHORT).show();
- } // Else Do nothing because JavaScript is enabled.
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.first_party_cookies_disabled, Snackbar.LENGTH_SHORT).show();
+ } else {
+ toggleJavaScript.setIcon(R.drawable.privacy_mode);
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show();
+ }
+ } else {
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.first_party_cookies_disabled, Snackbar.LENGTH_SHORT).show();
}
} else {
- domStorageEnabled = true;
+ firstPartyCookiesEnabled = true;
menuItem.setChecked(true);
- mainWebView.getSettings().setDomStorageEnabled(true);
+ cookieManager.setAcceptCookie(true);
mainWebView.reload();
// Update the toggleJavaScript icon if appropriate.
if (!javaScriptEnabled) {
toggleJavaScript.setIcon(R.drawable.warning);
- } // Else Do nothing because JavaScript is enabled.
+ } // Else do nothing because JavaScript is enabled.
- Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_enabled, Snackbar.LENGTH_SHORT).show();
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.first_party_cookies_enabled, Snackbar.LENGTH_SHORT).show();
}
return true;
- /* toggleSaveFormData does nothing until database storage is implemented.
- case R.id.toggleSaveFormData:
- if (saveFormDataEnabled) {
- saveFormDataEnabled = false;
- menuItem.setChecked(false);
- mainWebView.getSettings().setSaveFormData(false);
- mainWebView.reload();
- } else {
- saveFormDataEnabled = true;
- menuItem.setChecked(true);
- mainWebView.getSettings().setSaveFormData(true);
- mainWebView.reload();
- }
+ case R.id.toggleThirdPartyCookies:
+ if (Build.VERSION.SDK_INT >= 21) {
+ if (thirdPartyCookiesEnabled) {
+ thirdPartyCookiesEnabled = false;
+ menuItem.setChecked(false);
+ cookieManager.setAcceptThirdPartyCookies(mainWebView, false);
+ mainWebView.reload();
+
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.third_party_cookies_disabled, Snackbar.LENGTH_SHORT).show();
+ } else {
+ thirdPartyCookiesEnabled = true;
+ menuItem.setChecked(true);
+ cookieManager.setAcceptThirdPartyCookies(mainWebView, true);
+ mainWebView.reload();
+
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.third_party_cookies_enabled, Snackbar.LENGTH_SHORT).show();
+ }
+ } // Else do nothing because SDK < 21.
return true;
- */
- case R.id.toggleCookies:
- if (cookiesEnabled) {
- cookiesEnabled = false;
+ case R.id.toggleDomStorage:
+ if (domStorageEnabled) {
+ domStorageEnabled = false;
menuItem.setChecked(false);
- cookieManager.setAcceptCookie(false);
+ mainWebView.getSettings().setDomStorageEnabled(false);
mainWebView.reload();
- // Update the toggleJavaScript icon and display a snackbar if appropriate.
- if (!javaScriptEnabled && !domStorageEnabled) {
- toggleJavaScript.setIcon(R.drawable.privacy_mode);
- Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show();
- } else {
- if (domStorageEnabled) {
+ // Update the toggleJavaScript icon if appropriate and display a snackbar.
+ if (!javaScriptEnabled) {
+ if (firstPartyCookiesEnabled) {
toggleJavaScript.setIcon(R.drawable.warning);
- Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_enabled, Snackbar.LENGTH_SHORT).show();
- } // Else Do nothing because JavaScript is enabled.
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_disabled, Snackbar.LENGTH_SHORT).show();
+ } else {
+ toggleJavaScript.setIcon(R.drawable.privacy_mode);
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.privacy_mode, Snackbar.LENGTH_SHORT).show();
+ }
+ }else {
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_disabled, Snackbar.LENGTH_SHORT).show();
}
} else {
- cookiesEnabled = true;
+ domStorageEnabled = true;
menuItem.setChecked(true);
- cookieManager.setAcceptCookie(true);
+ mainWebView.getSettings().setDomStorageEnabled(true);
mainWebView.reload();
// Update the toggleJavaScript icon if appropriate.
toggleJavaScript.setIcon(R.drawable.warning);
} // Else Do nothing because JavaScript is enabled.
- Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_enabled, Snackbar.LENGTH_SHORT).show();
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_enabled, Snackbar.LENGTH_SHORT).show();
}
return true;
- case R.id.clearDomStorage:
- WebStorage webStorage = WebStorage.getInstance();
- webStorage.deleteAllData();
- Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_deleted, Snackbar.LENGTH_SHORT).show();
- return true;
-
case R.id.clearCookies:
if (Build.VERSION.SDK_INT < 21) {
cookieManager.removeAllCookie();
Snackbar.make(findViewById(R.id.mainWebView), R.string.cookies_deleted, Snackbar.LENGTH_SHORT).show();
return true;
+ case R.id.clearDomStorage:
+ WebStorage webStorage = WebStorage.getInstance();
+ webStorage.deleteAllData();
+ Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_deleted, Snackbar.LENGTH_SHORT).show();
+ return true;
+
case R.id.share:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
break;
case R.id.settings:
- // Launch SettingsActivity.
+ // Launch PreferenceFragment.
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
break;
<string name="download_started">Download started</string>
<string name="privacy_mode">Privacy Mode</string>
<string name="javascript_enabled">JavaScript enabled</string>
+ <string name="javascript_disabled">JavaScript disabled</string>
<string name="dom_storage_enabled">DOM Storage enabled</string>
- <string name="cookies_enabled">Cookies enabled</string>
- <string name="dom_storage_still_enabled">JavaScript disabled, DOM Storage still enabled</string>
- <string name="cookies_still_enabled">Cookies still enabled</string>
- <string name="both_still_enabled">JavaScript disabled, DOM Storage and Cookies still enabled</string>
- <string name="dom_storage_deleted">DOM Storage deleted</string>
+ <string name="dom_storage_disabled">DOM Storage disabled</string>
+ <string name="first_party_cookies_enabled">First-Party Cookies enabled</string>
+ <string name="first_party_cookies_disabled">First-Party Cookies disabled</string>
+ <string name="third_party_cookies_enabled">Third-Party Cookies enabled</string>
+ <string name="third_party_cookies_disabled">Third-Party Cookies disabled</string>
<string name="cookies_deleted">Cookies deleted</string>
+ <string name="dom_storage_deleted">DOM Storage deleted</string>
<string name="open_navigation">Open Navigation Drawer</string>
<string name="close_navigation">Close Navigation Drawer</string>
<string name="about">About</string>
<string name="clear_and_exit">Clear and Exit</string>
- <!-- Menu. -->
+ <!-- Options Menu. -->
<string name="javascript">JavaScript</string>
+ <string name="first_party_cookies">First-Party Cookies</string>
+ <string name="third_party_cookies">Third-Party Cookies</string>
<string name="dom_storage">DOM Storage</string>
- <string name="cookies">Cookies</string>
- <string name="clear_dom_storage">Clear DOM Storage</string>
<string name="clear_cookies">Clear Cookies</string>
+ <string name="clear_dom_storage">Clear DOM Storage</string>
<string name="share">Share</string>
<string name="add_to_home_screen">Add to Home Screen</string>
<!-- Preferences. -->
<string name="privacy_settings">Privacy Settings</string>
- <string name="javascript_preference">JavaScript</string>
- <string name="javascript_preference_summary">Enable JavaScript by default</string>
- <string name="dom_storage_preference">DOM Storage</string>
- <string name="dom_storage_preference_summary">Enable DOM storage by default</string>
- <string name="cookies_preference">Cookies</string>
- <string name="cookies_preference_summary">Enable cookies by default</string>
+ <string name="javascript_preference">Enable JavaScript by default</string>
+ <string name="javascript_preference_summary">JavaScript allows websites to run programs (scripts) on your device.</string>
+ <string name="first_party_cookies_preference">Enable First-Party Cookies by default</string>
+ <string name="first_party_cookies_preference_summary">Cookies allow websites to store information on your device.
+ First-party cookies come from the server listed in the address bar.
+ Devices with versions of Android older than Lollipop (version 5.0) will also enable third-party cookies with this setting.</string>
+ <string name="third_party_cookies_preference">Enable Third-Party Cookies by default</string>
+ <string name="third_party_cookies_summary">Third-party cookies allow parts of websites that aren\'t the main website, like advertisements, to store information on your device.
+ This setting requires Android Lollipop (version 5.0) or higher. It has no effect if first-party cookies are disabled.</string>
+ <string name="dom_storage_preference">Enable DOM Storage by default</string>
+ <string name="dom_storage_preference_summary">Document Object Management storage, also called web storage, is an enhanced form of cookies
+ that allows websites to store larger and more complex types of information, like pictures, on your device.</string>
<string name="general_settings">General Settings</string>
<string name="homepage_preference">Homepage</string>
- <string name="homepage_preference_summary">Set the homepage</string>
+ <string name="homepage_preference_summary">Set the homepage.</string>
<!-- About Dialog. -->
<string name="about_privacy_browser">About Privacy Browser</string>