X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Factivities%2FMainWebView.java;h=1024a7dbf10b4bb929a3396129656f5f8239ba70;hp=c7e987c116337b57012646976f690e2f43266160;hb=b0ddee839c666ba339e374749588f910070658ee;hpb=a56ffa22c6a0ef7ad717cba03a433999553340cb diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebView.java b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebView.java index c7e987c1..1024a7db 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebView.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebView.java @@ -128,6 +128,12 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN // 'mainWebView' is used in `onCreate()`, `onOptionsItemSelected()`, `onNavigationItemSelected()`, `onRestart()`, `onCreateContextMenu()`, `findPreviousOnPage()`, `findNextOnPage()`, `closeFindOnPage()`, and `loadUrlFromTextBox()`. private WebView mainWebView; + // `findOnPageEditText` is used in `onCreate()`, `onOptionsItemSelected()`, and `closeFindOnPage()`. + private EditText findOnPageEditText; + + // `fullScreenVideoFrameLayout` is used in `onCreate()` and `onConfigurationChanged()`. + private FrameLayout fullScreenVideoFrameLayout; + // `swipeRefreshLayout` is used in `onCreate()`, `onPrepareOptionsMenu`, and `onRestart()`. private SwipeRefreshLayout swipeRefreshLayout; @@ -186,9 +192,6 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN // `sslErrorHandler` is used in `onCreate()`, `onSslErrorCancel()`, and `onSslErrorProceed`. private SslErrorHandler sslErrorHandler; - // `findOnPageEditText` is used in `onCreate()`, `onOptionsItemSelected()`, and `closeFindOnPage()`. - private EditText findOnPageEditText; - // `inputMethodManager` is used in `onOptionsItemSelected()`, `loadUrlFromTextBox()`, and `closeFindOnPage()`. private InputMethodManager inputMethodManager; @@ -241,7 +244,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN rootCoordinatorLayout = (CoordinatorLayout) findViewById(R.id.root_coordinatorlayout); mainWebView = (WebView) findViewById(R.id.mainWebView); findOnPageEditText = (EditText) findViewById(R.id.find_on_page_edittext); - final FrameLayout fullScreenVideoFrameLayout = (FrameLayout) findViewById(R.id.full_screen_video_framelayout); + fullScreenVideoFrameLayout = (FrameLayout) findViewById(R.id.full_screen_video_framelayout); // Create a double-tap listener to toggle full-screen mode. final GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { @@ -277,7 +280,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN // Set `rootCoordinatorLayout` to fit under the status and navigation bars. rootCoordinatorLayout.setFitsSystemWindows(false); - if (translucentNavigationBarOnFullscreen) { // There is an Android Support Library bug that causes an ugly scrim to print on the `Drawer Layout` when the navigation bar is displayed on the right of the screen. + 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); } @@ -428,7 +431,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN }); // drawerToggle creates the hamburger icon at the start of the AppBar. - drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, supportAppBar, R.string.open_navigation, R.string.close_navigation); + drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, supportAppBar, R.string.open_navigation_drawer, R.string.close_navigation_drawer); mainWebView.setWebViewClient(new WebViewClient() { // `shouldOverrideUrlLoading` makes this `WebView` the default handler for URLs inside the app, so that links are not kicked out to other apps. @@ -436,7 +439,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN @SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { - // Use an external email program if the link begins with "mailto:". + // Use an external email program if the link begins with `mailto:`. if (url.startsWith("mailto:")) { // We use `ACTION_SENDTO` instead of `ACTION_SEND` so that only email programs are launched. Intent emailIntent = new Intent(Intent.ACTION_SENDTO); @@ -522,42 +525,51 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN // Enter full screen video @Override public void onShowCustomView(View view, CustomViewCallback callback) { - appBar.hide(); - - // Show the fullScreenVideoFrameLayout. - fullScreenVideoFrameLayout.addView(view); - fullScreenVideoFrameLayout.setVisibility(View.VISIBLE); - - // Hide the mainWebView. - mainWebView.setVisibility(View.GONE); - - // Hide the ad if this is the free flavor. + // Pause the ad if this is the free flavor. if (BuildConfig.FLAVOR.contentEquals("free")) { - BannerAd.hideAd(adView); + BannerAd.pauseAd(adView); } + // 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); + /* 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. */ - view.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 entire screen. + rootCoordinatorLayout.setFitsSystemWindows(false); + + // Add `view` to `fullScreenVideoFrameLayout` and display it on the screen. + fullScreenVideoFrameLayout.addView(view); + fullScreenVideoFrameLayout.setVisibility(View.VISIBLE); } // Exit full screen video public void onHideCustomView() { - appBar.show(); + // Hide `fullScreenVideoFrameLayout`. + fullScreenVideoFrameLayout.removeAllViews(); + fullScreenVideoFrameLayout.setVisibility(View.GONE); + + // Add the translucent status flag. This also resets `drawerLayout's` `View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN`. + getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - // Show the mainWebView. - mainWebView.setVisibility(View.VISIBLE); + // Set `rootCoordinatorLayout` to fit inside the status and navigation bars. This also clears the `SYSTEM_UI` flags. + rootCoordinatorLayout.setFitsSystemWindows(true); // Show the ad if this is the free flavor. if (BuildConfig.FLAVOR.contentEquals("free")) { - BannerAd.showAd(adView); - } + // Reload the ad. Because the screen may have rotated, we need to use `reloadAfterRotate`. + BannerAd.reloadAfterRotate(adView, getApplicationContext(), getString(R.string.ad_id)); - // Hide the fullScreenVideoFrameLayout. - fullScreenVideoFrameLayout.removeAllViews(); - fullScreenVideoFrameLayout.setVisibility(View.GONE); + // Reinitialize the `adView` variable, as the `View` will have been removed and re-added by `BannerAd.reloadAfterRotate()`. + adView = findViewById(R.id.adView); + } } }); @@ -1153,16 +1165,13 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); - // Handle the `adView` for the free version. - if (BuildConfig.FLAVOR.contentEquals("free")) { - // Reload the add if we are not in full screen mode. - if (adView.isShown()) { - // Reload the ad. - BannerAd.reloadAfterRotate(adView, getApplicationContext(), getString(R.string.ad_id)); + // Reload the ad for the free flavor if we are not in full screen mode. + if (BuildConfig.FLAVOR.contentEquals("free") && adView.isShown() && !fullScreenVideoFrameLayout.isShown()) { + // Reload the ad. + 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); - } + // Reinitialize the `adView` variable, as the `View` will have been removed and re-added by `BannerAd.reloadAfterRotate()`. + adView = findViewById(R.id.adView); } // `invalidateOptionsMenu` should recalculate the number of action buttons from the menu to display on the app bar, but it doesn't because of the this bug: https://code.google.com/p/android/issues/detail?id=20493#c8 @@ -1408,11 +1417,9 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN mainWebView.clearHistory(); } - // Override onBackPressed to handle the navigation drawer and mainWebView. + // Override `onBackPressed` to handle the navigation drawer and `mainWebView`. @Override public void onBackPressed() { - final WebView mainWebView = (WebView) findViewById(R.id.mainWebView); - // Close the navigation drawer if it is available. GravityCompat.START is the drawer on the left on Left-to-Right layout text. if (drawerLayout.isDrawerVisible(GravityCompat.START)) { drawerLayout.closeDrawer(GravityCompat.START); @@ -1421,7 +1428,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN if (mainWebView.canGoBack()) { mainWebView.goBack(); } else { - // Pass onBackPressed to the system. + // Pass `onBackPressed()` to the system. super.onBackPressed(); } } @@ -1553,7 +1560,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); // Store the values from `sharedPreferences` in variables. - String userAgentString = sharedPreferences.getString("user_agent", "Default user agent"); + String userAgentString = sharedPreferences.getString("user_agent", "PrivacyBrowser/1.0"); String customUserAgentString = sharedPreferences.getString("custom_user_agent", "PrivacyBrowser/1.0"); String javaScriptDisabledSearchString = sharedPreferences.getString("javascript_disabled_search", "https://duckduckgo.com/html/?q="); String javaScriptDisabledCustomSearchString = sharedPreferences.getString("javascript_disabled_search_custom_url", "");