X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2FMainWebViewActivity.java;h=f2f8b040d5f0c4bf880ead557ce42da68c9c0bcb;hb=7db44ba42c42745594e96b198be77c29c586920e;hp=bcbdd9f30480ab7ff28f94b8e0bcdd23bab90d9e;hpb=5b29a622c06536ff790aac64c0182feb9a621326;p=PrivacyBrowserAndroid.git diff --git a/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java b/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java index bcbdd9f3..f2f8b040 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java @@ -82,8 +82,16 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation public static boolean thirdPartyCookiesEnabled; // domStorageEnabled is public static so it can be accessed from SettingsFragment. It is also used in onCreate(), onCreateOptionsMenu(), and onOptionsItemSelected(). public static boolean domStorageEnabled; + // javaScriptDisabledSearchURL is public static so it can be accessed from SettingsFragment. It is also used in onCreate() and loadURLFromTextBox(). + public static String javaScriptDisabledSearchURL; + // javaScriptEnabledSearchURL is public static so it can be accessed from SettingsFragment. It is also used in onCreate() and loadURLFromTextBox(). + public static String javaScriptEnabledSearchURL; // homepage is public static so it can be accessed from SettingsFragment. It is also used in onCreate() and onOptionsItemSelected(). public static String homepage; + // swipeToRefresh is public static so it can be accessed from SettingsFragment. It is also used in onCreate(). + public static SwipeRefreshLayout swipeToRefresh; + // swipeToRefreshEnabled is public static so it can be accessed from SettingsFragment. It is also used in onCreate(). + public static boolean swipeToRefreshEnabled; // drawerToggle is used in onCreate(), onPostCreate(), onConfigurationChanged(), onNewIntent(), and onNavigationItemSelected(). private ActionBarDrawerToggle drawerToggle; @@ -91,6 +99,8 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation private DrawerLayout drawerLayout; // formattedUrlString is used in onCreate(), onOptionsItemSelected(), onCreateHomeScreenShortcutCreate(), and loadUrlFromTextBox(). private String formattedUrlString; + // privacyIcon is used in onCreateOptionsMenu() and updatePrivacyIcon(). + private MenuItem privacyIcon; // urlTextBox is used in onCreate(), onOptionsItemSelected(), and loadUrlFromTextBox(). private EditText urlTextBox; @@ -115,7 +125,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation final View adView = findViewById(R.id.adView); // Implement swipe to refresh - final SwipeRefreshLayout swipeToRefresh = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout); + swipeToRefresh = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout); swipeToRefresh.setColorSchemeResources(R.color.blue); swipeToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override @@ -303,36 +313,79 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation // Hide zoom controls. mainWebView.getSettings().setDisplayZoomControls(false); + // Initialize the default preference values the first time the program is run. PreferenceManager.setDefaultValues(this, R.xml.preferences, false); // Get the shared preference values. SharedPreferences savedPreferences = PreferenceManager.getDefaultSharedPreferences(this); - // Set JavaScript initial status. + // Set JavaScript initial status. The default value is false. javaScriptEnabled = savedPreferences.getBoolean("javascript_enabled", false); mainWebView.getSettings().setJavaScriptEnabled(javaScriptEnabled); // Initialize cookieManager. cookieManager = CookieManager.getInstance(); - // Set cookies initial status. + // Set cookies initial status. The default value is false. firstPartyCookiesEnabled = savedPreferences.getBoolean("first_party_cookies_enabled", false); cookieManager.setAcceptCookie(firstPartyCookiesEnabled); - // Set third-party cookies initial status if API >= 21. + // Set third-party cookies initial status if API >= 21. The default value is false. if (Build.VERSION.SDK_INT >= 21) { thirdPartyCookiesEnabled = savedPreferences.getBoolean("third_party_cookies_enabled", false); cookieManager.setAcceptThirdPartyCookies(mainWebView, thirdPartyCookiesEnabled); } - // Set DOM storage initial status. + // Set DOM storage initial status. The default value is false. domStorageEnabled = savedPreferences.getBoolean("dom_storage_enabled", false); mainWebView.getSettings().setDomStorageEnabled(domStorageEnabled); - // Set homepage initial status. + // Set the user agent initial status. + String userAgentString = savedPreferences.getString("user_agent", "Default user agent"); + switch (userAgentString) { + case "Default user agent": + // Do nothing. + break; + + case "Custom user agent": + // Set the custom user agent on mainWebView, The default is "PrivacyBrowser/1.0". + mainWebView.getSettings().setUserAgentString(savedPreferences.getString("custom_user_agent", "PrivacyBrowser/1.0")); + break; + + default: + // Set the selected user agent on mainWebView. The default is "PrivacyBrowser/1.0". + mainWebView.getSettings().setUserAgentString(savedPreferences.getString("user_agent", "PrivacyBrowser/1.0")); + break; + } + + // Set the initial string for JavaScript disabled search. + if (savedPreferences.getString("javascript_disabled_search", "https://duckduckgo.com/html/?q=").equals("Custom URL")) { + // Get the custom URL string. The default is "". + javaScriptDisabledSearchURL = savedPreferences.getString("javascript_disabled_search_custom_url", ""); + } else { + // Use the string from javascript_disabled_search. + javaScriptDisabledSearchURL = savedPreferences.getString("javascript_disabled_search", "https://duckduckgo.com/html/?q="); + } + + // Set the initial string for JavaScript enabled search. + if (savedPreferences.getString("javascript_enabled_search", "https://duckduckgo.com/?q=").equals("Custom URL")) { + // Get the custom URL string. The default is "". + javaScriptEnabledSearchURL = savedPreferences.getString("javascript_enabled_search_custom_url", ""); + } else { + // Use the string from javascript_enabled_search. + javaScriptEnabledSearchURL = savedPreferences.getString("javascript_enabled_search", "https://duckduckgo.com/?q="); + } + + + // Set homepage initial status. The default value is "https://www.duckduckgo.com". homepage = savedPreferences.getString("homepage", "https://www.duckduckgo.com"); + // Set swipe to refresh initial status. The default is true. + swipeToRefreshEnabled = savedPreferences.getBoolean("swipe_to_refresh_enabled", true); + swipeToRefresh.setEnabled(swipeToRefreshEnabled); + + // Get the intent information that started the app. final Intent intent = getIntent(); @@ -385,8 +438,10 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation // Set mainMenu so it can be used by onOptionsItemSelected. mainMenu = menu; + // Initialize privacyIcon + privacyIcon = menu.findItem(R.id.toggleJavaScript); + // 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); @@ -394,16 +449,8 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation MenuItem toggleSaveFormData = menu.findItem(R.id.toggleSaveFormData); */ - // Set the initial icon for toggleJavaScript - if (javaScriptEnabled) { - toggleJavaScript.setIcon(R.drawable.javascript_enabled); - } else { - if (domStorageEnabled || firstPartyCookiesEnabled) { - toggleJavaScript.setIcon(R.drawable.warning); - } else { - toggleJavaScript.setIcon(R.drawable.privacy_mode); - } - } + // Set the initial status of the privacy icon. + updatePrivacyIcon(); // Set the initial status of the menu item checkboxes. toggleFirstPartyCookies.setChecked(firstPartyCookiesEnabled); @@ -451,114 +498,78 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation // Set the commands that relate to the menu entries. switch (menuItemId) { case R.id.toggleJavaScript: - if (javaScriptEnabled) { - javaScriptEnabled = false; - mainWebView.getSettings().setJavaScriptEnabled(false); - mainWebView.reload(); + // Switch the status of javaScriptEnabled. + javaScriptEnabled = !javaScriptEnabled; - // Update the toggleJavaScript icon and display a snackbar. + // Apply the new JavaScript status. + mainWebView.getSettings().setJavaScriptEnabled(javaScriptEnabled); + + // Update the privacy icon. + updatePrivacyIcon(); + + // Display a Snackbar. + if (javaScriptEnabled) { + Snackbar.make(findViewById(R.id.mainWebView), R.string.javascript_enabled, Snackbar.LENGTH_SHORT).show(); + } else { if (domStorageEnabled || firstPartyCookiesEnabled) { - menuItem.setIcon(R.drawable.warning); 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(); } - } else { - javaScriptEnabled = true; - menuItem.setIcon(R.drawable.javascript_enabled); - mainWebView.getSettings().setJavaScriptEnabled(true); - mainWebView.reload(); - Snackbar.make(findViewById(R.id.mainWebView), R.string.javascript_enabled, Snackbar.LENGTH_SHORT).show(); } + + // Reload the WebView. + mainWebView.reload(); return true; case R.id.toggleFirstPartyCookies: - if (firstPartyCookiesEnabled) { - firstPartyCookiesEnabled = false; - menuItem.setChecked(false); - cookieManager.setAcceptCookie(false); - mainWebView.reload(); + // Switch the status of firstPartyCookiesEnabled. + firstPartyCookiesEnabled = !firstPartyCookiesEnabled; - // 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.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 { - firstPartyCookiesEnabled = true; - menuItem.setChecked(true); - cookieManager.setAcceptCookie(true); - mainWebView.reload(); + // Update the menu checkbox. + menuItem.setChecked(firstPartyCookiesEnabled); - // Update the toggleJavaScript icon if appropriate. - if (!javaScriptEnabled) { - toggleJavaScript.setIcon(R.drawable.warning); - } // Else do nothing because JavaScript is enabled. + // Apply the new cookie status. + cookieManager.setAcceptCookie(firstPartyCookiesEnabled); - Snackbar.make(findViewById(R.id.mainWebView), R.string.first_party_cookies_enabled, Snackbar.LENGTH_SHORT).show(); - } + // Update the privacy icon. + updatePrivacyIcon(); + + // Reload the WebView. + mainWebView.reload(); return true; case R.id.toggleThirdPartyCookies: if (Build.VERSION.SDK_INT >= 21) { - if (thirdPartyCookiesEnabled) { - thirdPartyCookiesEnabled = false; - menuItem.setChecked(false); - cookieManager.setAcceptThirdPartyCookies(mainWebView, false); - mainWebView.reload(); + // Switch the status of thirdPartyCookiesEnabled. + thirdPartyCookiesEnabled = !thirdPartyCookiesEnabled; - 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(); + // Update the menu checkbox. + menuItem.setChecked(thirdPartyCookiesEnabled); - Snackbar.make(findViewById(R.id.mainWebView), R.string.third_party_cookies_enabled, Snackbar.LENGTH_SHORT).show(); - } + // Apply the new cookie status. + cookieManager.setAcceptThirdPartyCookies(mainWebView, thirdPartyCookiesEnabled); + + // Reload the WebView. + mainWebView.reload(); } // Else do nothing because SDK < 21. return true; case R.id.toggleDomStorage: - if (domStorageEnabled) { - domStorageEnabled = false; - menuItem.setChecked(false); - mainWebView.getSettings().setDomStorageEnabled(false); - mainWebView.reload(); + // Switch the status of domStorageEnabled. + domStorageEnabled = !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_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 { - domStorageEnabled = true; - menuItem.setChecked(true); - mainWebView.getSettings().setDomStorageEnabled(true); - mainWebView.reload(); + // Update the menu checkbox. + menuItem.setChecked(domStorageEnabled); - // Update the toggleJavaScript icon if appropriate. - if (!javaScriptEnabled) { - toggleJavaScript.setIcon(R.drawable.warning); - } // Else Do nothing because JavaScript is enabled. + // Apply the new DOM Storage status. + mainWebView.getSettings().setDomStorageEnabled(domStorageEnabled); - Snackbar.make(findViewById(R.id.mainWebView), R.string.dom_storage_enabled, Snackbar.LENGTH_SHORT).show(); - } + // Update the privacy icon. + updatePrivacyIcon(); + + // Reload the WebView. + mainWebView.reload(); return true; case R.id.clearCookies: @@ -592,7 +603,12 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation //Everything else will be handled by CreateHomeScreenShortcut and the associated listeners below. return true; + case R.id.refresh: + mainWebView.reload(); + return true; + default: + // Don't consume the event. return super.onOptionsItemSelected(menuItem); } } @@ -768,9 +784,9 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation // Use the correct search URL based on javaScriptEnabled. if (javaScriptEnabled) { - formattedUrlString = "https://duckduckgo.com/?q=" + encodedUrlString; - } else { - formattedUrlString = "https://duckduckgo.com/html/?q=" + encodedUrlString; + formattedUrlString = javaScriptEnabledSearchURL + encodedUrlString; + } else { // JavaScript is disabled. + formattedUrlString = javaScriptDisabledSearchURL + encodedUrlString; } } @@ -780,4 +796,16 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(mainWebView.getWindowToken(), 0); } + + private void updatePrivacyIcon() { + if (javaScriptEnabled) { + privacyIcon.setIcon(R.drawable.javascript_enabled); + } else { + if (domStorageEnabled || firstPartyCookiesEnabled) { + privacyIcon.setIcon(R.drawable.warning); + } else { + privacyIcon.setIcon(R.drawable.privacy_mode); + } + } + } }