X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2FMainWebViewActivity.java;h=3c442d1c1052f1babd87d479e6a6c89db272459b;hb=cdb15b51501bd5fe266c4a3cfc53443810015c6f;hp=99fef852d35edf0618b5a448095d3f9171d8ef33;hpb=8f89d3c5ef3625bec2dd8a99fae255f5c6f46636;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 99fef852..3c442d1c 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java @@ -82,6 +82,10 @@ 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(). @@ -95,9 +99,12 @@ 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; + // adView is used in onCreate() and onConfigurationChanged(). + private View adView; @Override // Remove Android Studio's warning about the dangers of using SetJavaScriptEnabled. The whole premise of Privacy Browser is built around an understanding of these dangers. @@ -115,9 +122,6 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation // We need to use the SupportActionBar from android.support.v7.app.ActionBar until the minimum API is >= 21. final ActionBar appBar = getSupportActionBar(); - // Setup AdView for the free flavor. - final View adView = findViewById(R.id.adView); - // Implement swipe to refresh swipeToRefresh = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout); swipeToRefresh.setColorSchemeResources(R.color.blue); @@ -314,28 +318,65 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation // 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. @@ -360,10 +401,12 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation // Load the initial website. mainWebView.loadUrl(formattedUrlString); - // Load the ad if this is the free flavor. + // Initialize AdView for the free flavor and request an ad. If this is not the free flavor BannerAd.requestAd() does nothing. + adView = findViewById(R.id.adView); BannerAd.requestAd(adView); } + @Override protected void onNewIntent(Intent intent) { // Sets the new intent as the activity intent, so that any future getIntent()s pick up this one instead of creating a new activity. @@ -395,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); @@ -404,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); @@ -461,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; + + // Apply the new JavaScript status. + mainWebView.getSettings().setJavaScriptEnabled(javaScriptEnabled); - // Update the toggleJavaScript icon and display a snackbar. + // 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: @@ -604,8 +605,10 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation case R.id.refresh: mainWebView.reload(); + return true; default: + // Don't consume the event. return super.onOptionsItemSelected(menuItem); } } @@ -699,8 +702,11 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); - // Update the status of the drawerToggle icon. - drawerToggle.onConfigurationChanged(newConfig); + // Reload the ad if this is the free flavor. + BannerAd.reloadAfterRotate(adView, getApplicationContext(), getString(R.string.ad_id)); + + // Reinitialize the adView variable, as the View will have been removed and readded in the free flavor by BannerAd.reloadAfterRotate(). + adView = findViewById(R.id.adView); } @Override @@ -746,6 +752,22 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation } } + @Override + public void onPause() { + // We need to pause the adView or it will continue to consume resources in the background on the free flavor. + BannerAd.pauseAd(adView); + + super.onPause(); + } + + @Override + public void onResume() { + super.onResume(); + + // We need to resume the adView for the free flavor. + BannerAd.resumeAd(adView); + } + private void loadUrlFromTextBox() throws UnsupportedEncodingException { // Get the text from urlTextBox and convert it to a string. String unformattedUrlString = urlTextBox.getText().toString(); @@ -781,9 +803,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; } } @@ -793,4 +815,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); + } + } + } }