X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2FMainWebViewActivity.java;h=8b60b9d31d566eff3670ba4e6b20802b83ff069a;hb=8ce85fd6ab9c2468ae36fab0a18aa9aa88d685ed;hp=f2f8b040d5f0c4bf880ead557ce42da68c9c0bcb;hpb=7db44ba42c42745594e96b198be77c29c586920e;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 f2f8b040..8b60b9d3 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java @@ -67,7 +67,7 @@ import java.net.URLEncoder; public class MainWebViewActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, CreateHomeScreenShortcut.CreateHomeScreenSchortcutListener { // favoriteIcon is public static so it can be accessed from CreateHomeScreenShortcut. public static Bitmap favoriteIcon; - // mainWebView is public static so it can be accessed from AboutDialog and SettingsFragment. It is also used in onCreate(), onOptionsItemSelected(), onNavigationItemSelected(), and loadUrlFromTextBox(). + // mainWebView is public static so it can be accessed from SettingsFragment. It is also used in onCreate(), onOptionsItemSelected(), onNavigationItemSelected(), and loadUrlFromTextBox(). public static WebView mainWebView; // mainMenu is public static so it can be accessed from SettingsFragment. It is also used in onCreateOptionsMenu() and onOptionsItemSelected(). @@ -78,7 +78,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation public static boolean javaScriptEnabled; // firstPartyCookiesEnabled is public static so it can be accessed from SettingsFragment. It is also used in onCreate(), onCreateOptionsMenu(), onPrepareOptionsMenu(), and onOptionsItemSelected(). public static boolean firstPartyCookiesEnabled; - // thirdPartyCookiesEnabled is uesd in onCreate(), onCreateOptionsMenu(), onPrepareOptionsMenu(), and onOptionsItemSelected(). + // thirdPartyCookiesEnabled is used in onCreate(), onCreateOptionsMenu(), onPrepareOptionsMenu(), and onOptionsItemSelected(). 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; @@ -101,9 +101,10 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation 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. @@ -121,11 +122,9 @@ 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); + assert swipeToRefresh != null; //This assert removes the incorrect warning on the following line that swipeToRefresh might be null. swipeToRefresh.setColorSchemeResources(R.color.blue); swipeToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override @@ -170,6 +169,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation // Listen for touches on the navigation menu. final NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView); + assert navigationView != null; // This assert removes the incorrect warning on the following line that navigationView might be null. navigationView.setNavigationItemSelectedListener(this); // drawerToggle creates the hamburger icon at the start of the AppBar. @@ -241,6 +241,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation } // Show the fullScreenVideoFrameLayout. + assert fullScreenVideoFrameLayout != null; //This assert removes the incorrect warning on the following line that fullScreenVideoFrameLayout might be null. fullScreenVideoFrameLayout.addView(view); fullScreenVideoFrameLayout.setVisibility(View.VISIBLE); @@ -251,9 +252,9 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation BannerAd.hideAd(adView); /* SYSTEM_UI_FLAG_HIDE_NAVIGATION hides the navigation bars on the bottom or right of the screen. - ** SYSTEM_UI_FLAG_FULLSCREEN hides the status bar across the top of the screen. - ** SYSTEM_UI_FLAG_IMMERSIVE_STICKY makes the navigation and status bars ghosted overlays and automatically rehides them. - */ + * SYSTEM_UI_FLAG_FULLSCREEN hides the status bar across the top of the screen. + * SYSTEM_UI_FLAG_IMMERSIVE_STICKY makes the navigation and status bars ghosted overlays and automatically rehides them. + */ // Set the one flag supported by API >= 14. view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); @@ -282,6 +283,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation BannerAd.showAd(adView); // Hide the fullScreenVideoFrameLayout. + assert fullScreenVideoFrameLayout != null; //This assert removes the incorrect warning on the following line that fullScreenVideoFrameLayout might be null. fullScreenVideoFrameLayout.removeAllViews(); fullScreenVideoFrameLayout.setVisibility(View.GONE); } @@ -403,10 +405,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. @@ -445,9 +449,6 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation 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); - */ // Set the initial status of the privacy icon. updatePrivacyIcon(); @@ -456,9 +457,6 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation toggleFirstPartyCookies.setChecked(firstPartyCookiesEnabled); toggleThirdPartyCookies.setChecked(thirdPartyCookiesEnabled); toggleDomStorage.setChecked(domStorageEnabled); - /* toggleSaveFormData does nothing until database storage is implemented. - toggleSaveFormData.setChecked(saveFormDataEnabled); - */ return true; } @@ -492,9 +490,6 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation public boolean onOptionsItemSelected(MenuItem menuItem) { int menuItemId = menuItem.getItemId(); - // Some options need to update the drawable for toggleJavaScript. - MenuItem toggleJavaScript = mainMenu.findItem(R.id.toggleJavaScript); - // Set the commands that relate to the menu entries. switch (menuItemId) { case R.id.toggleJavaScript: @@ -647,15 +642,15 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation break; case R.id.settings: - // Launch PreferenceFragment. - Intent intent = new Intent(this, SettingsActivity.class); - startActivity(intent); + // Launch SettingsActivity. + Intent settingsIntent = new Intent(this, SettingsActivity.class); + startActivity(settingsIntent); break; case R.id.about: - // Show the AboutDialog AlertDialog and name this instance aboutDialog. - AppCompatDialogFragment aboutDialog = new AboutDialog(); - aboutDialog.show(getSupportFragmentManager(), "aboutDialog"); + // Launch AboutActivity. + Intent aboutIntent = new Intent(this, AboutActivity.class); + startActivity(aboutIntent); break; case R.id.clearAndExit: @@ -670,6 +665,12 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation cookieManager.removeAllCookie(); } + // Clear cache. The argument of "true" includes disk files. + mainWebView.clearCache(true); + + // Clear the back/forward history. + mainWebView.clearHistory(); + // Destroy the internal state of the webview. mainWebView.destroy(); @@ -702,8 +703,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 re-added in the free flavor by BannerAd.reloadAfterRotate(). + adView = findViewById(R.id.adView); } @Override @@ -740,6 +744,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation drawerLayout.closeDrawer(GravityCompat.START); } else { // Load the previous URL if available. + assert mainWebView != null; //This assert removes the incorrect warning on the following line that mainWebView might be null. if (mainWebView.canGoBack()) { mainWebView.goBack(); } else { @@ -749,6 +754,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();