]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/activities/MainWebView.java
Always reset the `SYSTEM_UI` flags in `applySettings();`
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / activities / MainWebView.java
index e0cd539456b5eb0c005686b74706ef883c4412ca..19397117fe5a271fc91412b9fb3d2bd27381f615 100644 (file)
@@ -189,7 +189,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
     // `fullScreenBrowsingModeEnabled` is used in `onCreate()` and `applySettings()`.
     private boolean fullScreenBrowsingModeEnabled;
 
-    // `inFullScreenBrowsingMode` is used in `onCreate()` and `applySettings()`.
+    // `inFullScreenBrowsingMode` is used in `onCreate()`, `onConfigurationChanged()`, and `applySettings()`.
     private boolean inFullScreenBrowsingMode;
 
     // `hideSystemBarsOnFullscreen` is used in `onCreate()` and `applySettings()`.
@@ -202,7 +202,10 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
     private boolean proxyThroughOrbot;
 
     // `pendingUrl` is used in `onCreate()` and `applySettings()`
-    private String pendingUrl;
+    private static String pendingUrl;
+
+    // `waitingForOrbotData` is used in `onCreate()` and `applySettings()`.
+    private String waitingForOrbotHTMLString;
 
     // `findOnPageLinearLayout` is used in `onCreate()`, `onOptionsItemSelected()`, and `closeFindOnPage()`.
     private LinearLayout findOnPageLinearLayout;
@@ -278,6 +281,45 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
             }
         });
 
+        // Set `waitingForOrbotHTMLString`.
+        waitingForOrbotHTMLString = "<html><body><br/><center><h1>" + getString(R.string.waiting_for_orbot) + "</h1></center></body></html>";
+
+        // Initialize `pendingUrl`.
+        pendingUrl = "";
+
+        // Set the initial Orbot status.
+        orbotStatus = "unknown";
+
+        // Create an Orbot status `BroadcastReceiver`.
+        BroadcastReceiver orbotStatusBroadcastReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                // Store the content of the status message in `orbotStatus`.
+                orbotStatus = intent.getStringExtra("org.torproject.android.intent.extra.STATUS");
+
+                // If we are waiting on `pendingUrl`, load it now that Orbot is connected.
+                if (orbotStatus.equals("ON") && !pendingUrl.isEmpty()) {
+
+                    // Wait 500 milliseconds, because Orbot isn't really ready yet.
+                    try {
+                        Thread.sleep(500);
+                    } catch (InterruptedException exception) {
+                        // Do nothing.
+                    }
+
+                    // Copy `pendingUrl` to `formattedUrlString` and reset `pendingUrl` to be empty.
+                    formattedUrlString = pendingUrl;
+                    pendingUrl = "";
+
+                    // Load `formattedUrlString
+                    mainWebView.loadUrl(formattedUrlString, customHeaders);
+                }
+            }
+        };
+
+        // Register `orbotStatusBroadcastReceiver` on `this` context.
+        this.registerReceiver(orbotStatusBroadcastReceiver, new IntentFilter("org.torproject.android.intent.action.STATUS"));
+
         // Get handles for views that need to be accessed.
         drawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);
         rootCoordinatorLayout = (CoordinatorLayout) findViewById(R.id.root_coordinatorlayout);
@@ -711,45 +753,9 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
         // Replace the header that `WebView` creates for `X-Requested-With` with a null value.  The default value is the application ID (com.stoutner.privacybrowser.standard).
         customHeaders.put("X-Requested-With", "");
 
-        // Set the initial Orbot status.
-        orbotStatus = "unknown";
-
-        // Create a Orbot status `BroadcastReceiver`.
-        BroadcastReceiver orbotStatusBroadcastReceiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                // Store the content of the status message in `orbotStatus`.
-                orbotStatus = intent.getStringExtra("org.torproject.android.intent.extra.STATUS");
-
-                // If we are waiting on `pendingUrl`, load it now that Orbot is connected.
-                if (orbotStatus.equals("ON") && !pendingUrl.isEmpty()) {
-
-                    // Wait 500 milliseconds, because Orbot isn't really ready yet.
-                    try {
-                        Thread.sleep(500);
-                    } catch (InterruptedException exception) {
-                        // Do nothing.
-                    }
-
-                    // Load `pendingUrl`.
-                    formattedUrlString = pendingUrl;
-                    mainWebView.loadUrl(formattedUrlString, customHeaders);
-
-                    // Reset `pendingUrl` to be empty.
-                    pendingUrl = "";
-                }
-            }
-        };
-
-        // Register `orbotStatusBroadcastReceiver` on `this` context.
-        this.registerReceiver(orbotStatusBroadcastReceiver, new IntentFilter("org.torproject.android.intent.action.STATUS"));
-
         // Initialize the default preference values the first time the program is run.  `this` is the context.  `false` keeps this command from resetting any current preferences back to default.
         PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
 
-        // Apply the settings from the shared preferences.
-        applySettings();
-
         // Get the intent information that started the app.
         final Intent intent = getIntent();
 
@@ -759,22 +765,17 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
             formattedUrlString = intentUriData.toString();
         }
 
-        // If formattedUrlString is null assign the homepage to it.
-        if (formattedUrlString == null) {
-            formattedUrlString = homepage;
-        }
+        // Initialize `inFullScreenBrowsingMode`, which is always false at this point because Privacy Browser never starts in full screen browsing mode.
+        inFullScreenBrowsingMode = false;
 
-        // Initialize `pendingUrl`.
-        pendingUrl = "";
+        // Initialize AdView for the free flavor.
+        adView = findViewById(R.id.adView);
 
-        if (proxyThroughOrbot & !orbotStatus.equals("ON")) {  // We are waiting on Orbot.
-            // Save `formattedUrlString` in `pendingUrl`.
-            pendingUrl = formattedUrlString;
+        // Apply the settings from the shared preferences.
+        applySettings();
 
-            // Load a waiting page.  `null` specifies no encoding, which defaults to ASCII.
-            mainWebView.loadData("<html><body><br/><center><h1>Waiting for Orbot to connect...</h1></center></body></html>", "text/html", null);
-        } else {
-            // Load the initial website.
+        // Load `formattedUrlString` if we are not proxying through Orbot and waiting for Orbot to connect.
+        if (!(proxyThroughOrbot && !orbotStatus.equals("ON"))) {
             mainWebView.loadUrl(formattedUrlString, customHeaders);
         }
 
@@ -785,13 +786,6 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
             BitmapDrawable favoriteIconBitmapDrawable = (BitmapDrawable) favoriteIconDrawable;
             favoriteIcon = favoriteIconBitmapDrawable.getBitmap();
         }
-
-        // Initialize `inFullScreenBrowsingMode`, which is always false at this point because Privacy Browser never starts in full screen browsing mode.
-        inFullScreenBrowsingMode = false;
-
-        // 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);
     }
 
 
@@ -1241,13 +1235,11 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
                 startActivity(settingsIntent);
                 break;
 
-            /*
             case R.id.domains:
                 // Launch `DomainsList`.
                 Intent domainsIntent = new Intent(this, DomainsList.class);
                 startActivity(domainsIntent);
                 break;
-            */
 
             case R.id.guide:
                 // Launch `Guide`.
@@ -1340,7 +1332,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
         super.onConfigurationChanged(newConfig);
 
         // Reload the ad for the free flavor if we are not in full screen mode.
-        if (BuildConfig.FLAVOR.contentEquals("free") && adView.isShown() && !fullScreenVideoFrameLayout.isShown()) {
+        if (BuildConfig.FLAVOR.contentEquals("free") && !inFullScreenBrowsingMode) {
             // Reload the ad.
             BannerAd.reloadAfterRotate(adView, getApplicationContext(), getString(R.string.ad_id));
 
@@ -1864,6 +1856,11 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
             // Set `torHomepageString` as `homepage`.
             homepage = torHomepageString;
 
+            // If formattedUrlString is null assign the homepage to it.
+            if (formattedUrlString == null) {
+                formattedUrlString = homepage;
+            }
+
             // Set JavaScript disabled search.
             if (torJavaScriptDisabledSearchString.equals("Custom URL")) {  // Get the custom URL string.
                 javaScriptDisabledSearchURL = torJavaScriptDisabledSearchCustomURLString;
@@ -1880,10 +1877,24 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
 
             // Set the proxy.  `this` refers to the current activity where an `AlertDialog` might be displayed.
             OrbotProxyHelper.setProxy(getApplicationContext(), this, "localhost", "8118");
+
+            // Display a message to the user if we are waiting on Orbot.
+            if (!orbotStatus.equals("ON")) {
+                // Save `formattedUrlString` in `pendingUrl`.
+                pendingUrl = formattedUrlString;
+
+                // Load a waiting page.  `null` specifies no encoding, which defaults to ASCII.
+                mainWebView.loadData(waitingForOrbotHTMLString, "text/html", null);
+            }
         } else {  // Set the non-Tor options.
             // Set `homepageString` as `homepage`.
             homepage = homepageString;
 
+            // If formattedUrlString is null assign the homepage to it.
+            if (formattedUrlString == null) {
+                formattedUrlString = homepage;
+            }
+
             // Set JavaScript disabled search.
             if (javaScriptDisabledSearchString.equals("Custom URL")) {  // Get the custom URL string.
                 javaScriptDisabledSearchURL = javaScriptDisabledSearchCustomURLString;
@@ -1900,6 +1911,12 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
 
             // Reset the proxy to default.  The host is `""` and the port is `"0"`.
             OrbotProxyHelper.setProxy(getApplicationContext(), this, "", "0");
+
+            // Reset `pendingUrl` if we are currently waiting for Orbot to connect.
+            if (!pendingUrl.isEmpty()) {
+                formattedUrlString = pendingUrl;
+                pendingUrl = "";
+            }
         }
 
         // Set swipe to refresh.
@@ -1930,8 +1947,8 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
             customHeaders.remove("DNT");
         }
 
-        // If we are in full screen mode update the `SYSTEM_UI` flags.
-        if (inFullScreenBrowsingMode) {
+        // Apply the appropriate full screen mode the `SYSTEM_UI` flags.
+        if (fullScreenBrowsingModeEnabled && inFullScreenBrowsingMode) {
             if (hideSystemBarsOnFullscreen) {  // Hide everything.
                 // Remove the translucent navigation setting if it is currently flagged.
                 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
@@ -1959,14 +1976,33 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
                     getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
                 }
             }
-        }
+        } else {  // Switch to normal viewing mode.
+            // Reset `inFullScreenBrowsingMode` to `false`.
+            inFullScreenBrowsingMode = false;
+
+            // Show the `appBar`.
+            appBar.show();
+
+            // Show the `BannerAd` in the free flavor.
+            if (BuildConfig.FLAVOR.contentEquals("free")) {
+                // Reload the ad.  Because the screen may have rotated, we need to use `reloadAfterRotate`.
+                BannerAd.reloadAfterRotate(adView, getApplicationContext(), getString(R.string.ad_id));
+
+                // Reinitialize the `adView` variable, as the `View` will have been removed and re-added by `BannerAd.reloadAfterRotate()`.
+                adView = findViewById(R.id.adView);
+            }
+
+            // Remove the translucent navigation bar flag if it is set.
+            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
+
+            // Add the translucent status flag if it is unset.  This also resets `drawerLayout's` `View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN`.
+            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
 
-        if (proxyThroughOrbot & !orbotStatus.equals("ON")) {  // We are waiting on Orbot.
-            // Save `formattedUrlString` in `pendingUrl`.
-            pendingUrl = formattedUrlString;
+            // Remove any `SYSTEM_UI` flags from `rootCoordinatorLayout`.
+            rootCoordinatorLayout.setSystemUiVisibility(0);
 
-            // Load a waiting page.  `null` specifies no encoding, which defaults to ASCII.
-            mainWebView.loadData("<html><body><br/><center><h1>Waiting for Orbot to connect...</h1></center></body></html>", "text/html", null);
+            // Constrain `rootCoordinatorLayout` inside the status and navigation bars.
+            rootCoordinatorLayout.setFitsSystemWindows(true);
         }
     }