Ad a preference to disable full screen browsing mode. Fixes https://redmine.stoutner...
authorSoren Stoutner <soren@stoutner.com>
Thu, 22 Dec 2016 20:25:50 +0000 (13:25 -0700)
committerSoren Stoutner <soren@stoutner.com>
Thu, 22 Dec 2016 20:25:50 +0000 (13:25 -0700)
app/build.gradle
app/src/main/java/com/stoutner/privacybrowser/activities/MainWebView.java
app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java
app/src/main/res/values-es/strings.xml
app/src/main/res/values/strings.xml
app/src/main/res/xml/preferences.xml

index b827a8422f4b991f4a07b2311b14b0d25530315c..d7cc4b8850d7b581307c23bb205465b0991bd4b9 100644 (file)
@@ -64,6 +64,6 @@ dependencies {
     freeCompile 'com.google.firebase:firebase-ads:9.8.0'
 }
 
-// Google's documentation says the following line is required for `firebase-ads` but things work correctly without it.  I have no interest in applying this Google Mobile Services plugin in the standard flavor if I don't have to.
+// Google's documentation says the following line is required for `firebase-ads` but things work correctly without it.  I have no interest in applying the Google Mobile Services plugin in the standard flavor if I don't have to.
 // I suspect that in the free flavor `firebase-ads` applies it even when not specified.  https://firebase.google.com/docs/admob/android/quick-start
 // apply plugin: 'com.google.gms.google-services'
\ No newline at end of file
index 8e06fc8bab2cd24787a7209ccf912c916e7da5e8..e5296732f487000d0e380aac68531241b9d3ec12 100644 (file)
@@ -173,6 +173,9 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
     // `javaScriptEnabledSearchURL` is used in `loadURLFromTextBox()` and `applySettings()`.
     private String javaScriptEnabledSearchURL;
 
+    // `fullScreenBrowsingModeEnabled` is used in `onCreate()` and `applySettings()`.
+    private boolean fullScreenBrowsingModeEnabled;
+
     // `hideSystemBarsOnFullscreen` is used in `onCreate()` and `applySettings()`.
     private boolean hideSystemBarsOnFullscreen;
 
@@ -253,68 +256,72 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
             // Override `onDoubleTap()`.  All other events are handled using the default settings.
             @Override
             public boolean onDoubleTap(MotionEvent event) {
-                if (appBar.isShowing()) {  // If `appBar` is visible, switch to full screen mode.
-                    // Hide the `appBar`.
-                    appBar.hide();
-
-                    // Hide the `BannerAd` in the free flavor.
-                    if (BuildConfig.FLAVOR.contentEquals("free")) {
-                        BannerAd.hideAd(adView);
-                    }
+                if (fullScreenBrowsingModeEnabled) {  // Only process the double-tap if full screen browsing mode is enabled.
+                    if (appBar.isShowing()) {  // If `appBar` is visible, switch to full screen mode.
+                        // Hide the `appBar`.
+                        appBar.hide();
+
+                        // Hide the `BannerAd` in the free flavor.
+                        if (BuildConfig.FLAVOR.contentEquals("free")) {
+                            BannerAd.hideAd(adView);
+                        }
 
-                    // Modify the system bars.
-                    if (hideSystemBarsOnFullscreen) {  // Hide everything.
-                        // Remove the translucent overlays.
-                        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+                        // Modify the system bars.
+                        if (hideSystemBarsOnFullscreen) {  // Hide everything.
+                            // Remove the translucent overlays.
+                            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
 
-                        // Remove the translucent status bar overlay on the `Drawer Layout`, which is special and needs its own command.
-                        drawerLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
+                            // Remove the translucent status bar overlay on the `Drawer Layout`, which is special and needs its own command.
+                            drawerLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
 
                         /* SYSTEM_UI_FLAG_FULLSCREEN hides the status bar at the top of the screen.
                          * SYSTEM_UI_FLAG_HIDE_NAVIGATION hides the navigation bar on the bottom or right of the screen.
                          * SYSTEM_UI_FLAG_IMMERSIVE_STICKY makes the status and navigation bars translucent and automatically rehides them after they are shown.
                          */
-                        rootCoordinatorLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+                            rootCoordinatorLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+
+                            // Set `rootCoordinatorLayout` to fill the whole screen.
+                            rootCoordinatorLayout.setFitsSystemWindows(false);
+                        } else {  // Hide everything except the status and navigation bars.
+                            // Set `rootCoordinatorLayout` to fit under the status and navigation bars.
+                            rootCoordinatorLayout.setFitsSystemWindows(false);
+
+                            if (translucentNavigationBarOnFullscreen) {  // There is an Android Support Library bug that causes a scrim to print on the right side of the `Drawer Layout` when the navigation bar is displayed on the right of the screen.
+                                // Set the navigation bar to be translucent.
+                                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
+                            }
+                        }
+                    } else {  // Switch to normal viewing mode.
+                        // Show the `appBar`.
+                        appBar.show();
 
-                        // Set `rootCoordinatorLayout` to fill the whole screen.
-                        rootCoordinatorLayout.setFitsSystemWindows(false);
-                    } else {  // Hide everything except the status and navigation bars.
-                        // Set `rootCoordinatorLayout` to fit under the status and navigation bars.
-                        rootCoordinatorLayout.setFitsSystemWindows(false);
+                        // 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));
 
-                        if (translucentNavigationBarOnFullscreen) {  // There is an Android Support Library bug that causes a scrim to print on the right side of the `Drawer Layout` when the navigation bar is displayed on the right of the screen.
-                            // Set the navigation bar to be translucent.
-                            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
+                            // Reinitialize the `adView` variable, as the `View` will have been removed and re-added by `BannerAd.reloadAfterRotate()`.
+                            adView = findViewById(R.id.adView);
                         }
-                    }
-                } else {  // Switch to normal viewing mode.
-                    // 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);
 
-                    // 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);
 
-                    // 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);
+                        // Remove any `SYSTEM_UI` flags from `rootCoordinatorLayout`.
+                        rootCoordinatorLayout.setSystemUiVisibility(0);
 
-                    // Remove any `SYSTEM_UI` flags from `rootCoordinatorLayout`.
-                    rootCoordinatorLayout.setSystemUiVisibility(0);
+                        // Constrain `rootCoordinatorLayout` inside the status and navigation bars.
+                        rootCoordinatorLayout.setFitsSystemWindows(true);
+                    }
 
-                    // Constrain `rootCoordinatorLayout` inside the status and navigation bars.
-                    rootCoordinatorLayout.setFitsSystemWindows(true);
+                    // Consume the double-tap.
+                    return true;
+                } else { // Do not consume the double-tap because full screen browsing mode is disabled.
+                    return false;
                 }
-
-                // Consume the double-tap.
-                return true;
             }
         });
 
@@ -600,7 +607,7 @@ 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", "");
 
-        // Initialize the default preference values the first time the program is run.
+        // 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.
@@ -1628,6 +1635,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN
         swipeToRefreshEnabled = sharedPreferences.getBoolean("swipe_to_refresh_enabled", false);
         boolean doNotTrackEnabled = sharedPreferences.getBoolean("do_not_track", true);
         boolean proxyThroughOrbot = sharedPreferences.getBoolean("proxy_through_orbot", false);
+        fullScreenBrowsingModeEnabled = sharedPreferences.getBoolean("enable_full_screen_browsing_mode", false);
         hideSystemBarsOnFullscreen = sharedPreferences.getBoolean("hide_system_bars", false);
         translucentNavigationBarOnFullscreen = sharedPreferences.getBoolean("translucent_navigation_bar", true);
 
index 535b647a8d8e93aae123c2067156cb4a8772ec8b..95ca66b720e9b73a8ab75f503cdff0ca748185c5 100644 (file)
@@ -119,6 +119,20 @@ public class SettingsFragment extends PreferenceFragment {
         javaScriptEnabledSearchCustomURLPreference.setEnabled(javaScriptEnabledSearchString.equals("Custom URL"));
 
 
+        // Enable the full screen options if full screen browsing mode is enabled.
+        final Preference hideSystemBarsPreference = findPreference("hide_system_bars");
+        final Preference translucentNavigationBarPreference = findPreference("translucent_navigation_bar");
+        final boolean fullScreenBrowsingModeEnabled = savedPreferences.getBoolean("enable_full_screen_browsing_mode", false);
+        if (!fullScreenBrowsingModeEnabled) {
+            // Disable the full screen options.
+            hideSystemBarsPreference.setEnabled(false);
+            translucentNavigationBarPreference.setEnabled(false);
+        } else {
+            // Disable `transparent_navigation_bar` if `hide_system_bars` is `true`.
+            translucentNavigationBarPreference.setEnabled(!savedPreferences.getBoolean("hide_system_bars", false));
+        }
+
+
         // Set the homepage URL as the summary text for the `Homepage` preference when the preference screen is loaded.  The default is `https://www.duckduckgo.com`.
         final Preference homepagePreference = findPreference("homepage");
         homepagePreference.setSummary(savedPreferences.getString("homepage", "https://www.duckduckgo.com"));
@@ -128,10 +142,6 @@ public class SettingsFragment extends PreferenceFragment {
         String defaultFontSizeString = savedPreferences.getString("default_font_size", "100");
         defaultFontSizePreference.setSummary(defaultFontSizeString + "%%");
 
-        // Disable `transparent_navigation_bar` if `hide_system_bars` is enabled.
-        final Preference translucentNavigationBarPreference = findPreference("translucent_navigation_bar");
-        translucentNavigationBarPreference.setEnabled(!savedPreferences.getBoolean("hide_system_bars", false));
-
 
         // Listen for preference changes.
         preferencesListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@@ -216,6 +226,21 @@ public class SettingsFragment extends PreferenceFragment {
                         javaScriptEnabledSearchCustomURLPreference.setSummary(sharedPreferences.getString("javascript_enabled_search_custom_url", ""));
                         break;
 
+                    case "enable_full_screen_browsing_mode":
+                        boolean newFullScreenBrowsingModeEnabled = sharedPreferences.getBoolean("enable_full_screen_browsing_mode", false);
+                        if (newFullScreenBrowsingModeEnabled) {
+                            // Enable `hideSystemBarsPreference`.
+                            hideSystemBarsPreference.setEnabled(true);
+
+                            // Only enable `transparent_navigation_bar` if `hide_system_bars` is `false`.
+                            translucentNavigationBarPreference.setEnabled(!sharedPreferences.getBoolean("hide_system_bars", false));
+                        } else {
+                            // Disable the full screen options.
+                            hideSystemBarsPreference.setEnabled(false);
+                            translucentNavigationBarPreference.setEnabled(false);
+                        }
+                        break;
+
                     case "homepage":
                         // Set the new homepage URL as the summary text for the Homepage preference.  The default is `https://www.duckduckgo.com`.
                         homepagePreference.setSummary(sharedPreferences.getString("homepage", "https://www.duckduckgo.com"));
index ed468d91b60f8a4e5674a7ed34ef83f97501eb9c..ae2a53c6c2841e28b0e217a81f404604c263c774 100644 (file)
         </string-array>
         <string name="javascript_enabled_search_custom_url">URL personalizado de búsquedas de JavaScript habilitado</string>
         <string name="custom_url">URL personalizado</string>
-    <string name="fullscreen">Pantalla Completa</string>
+    <string name="full_screen">Pantalla Completa</string>
+        <string name="enable_full_screen_browsing_mode">Habilitar pantalla completa</string>
+        <string name="enable_full_screen_browsing_mode_summary">Doble toque para pantalla completa.</string>
         <string name="hide_system_bars">Esconder las barras del systema</string>
         <string name="hide_system_bars_summary">Esconder las barras de estado y de navegación en el modo de pantalla completa.</string>
         <string name="translucent_navigation_bar">Barra de navegación translúcida</string>
index 085d36aaa7c50ecd799332f4535bf5bce86a63ad..c46c6e2e9ed2064ae70360817dc9c2ea52e8c15b 100644 (file)
         </string-array>
         <string name="javascript_enabled_search_custom_url">JavaScript-enabled search custom URL</string>
         <string name="custom_url">Custom URL</string>
-    <string name="fullscreen">Full Screen</string>
+    <string name="full_screen">Full Screen</string>
+        <string name="enable_full_screen_browsing_mode">Enable full screen browsing mode</string>
+        <string name="enable_full_screen_browsing_mode_summary">Double-tap to toggle full screen browsing mode.</string>
         <string name="hide_system_bars">Hide system bars</string>
         <string name="hide_system_bars_summary">Hide the status and navigation bars in full screen mode.</string>
         <string name="translucent_navigation_bar">Translucent navigation bar</string>
index 8ed81b84aab687621a0f08921c4f6165392d59d2..cdda87e7c2eaa0cabdb6a1a77ffca1124e9423e1 100644 (file)
     </PreferenceCategory>
 
     <PreferenceCategory
-        android:key="fullscreen"
-        android:title="@string/fullscreen">
+        android:key="full_screen"
+        android:title="@string/full_screen">
+
+        <SwitchPreference
+            android:key="enable_full_screen_browsing_mode"
+            android:title="@string/enable_full_screen_browsing_mode"
+            android:summary="@string/enable_full_screen_browsing_mode_summary"
+            android:defaultValue="false" />
 
         <SwitchPreference
             android:key="hide_system_bars"