]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java
Program Clear and Exit to clear the cache and the back/forward history.
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / MainWebViewActivity.java
index f2f8b040d5f0c4bf880ead557ce42da68c9c0bcb..8b60b9d31d566eff3670ba4e6b20802b83ff069a 100644 (file)
@@ -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();