- // Show the `CreateBookmarkDialog` `AlertDialog` and name the instance `@string/create_bookmark`.
- AppCompatDialogFragment createBookmarkDialog = new CreateBookmarkDialog();
- createBookmarkDialog.show(getSupportFragmentManager(), resources.getString(R.string.create_bookmark));
- });
-
- // Create a double-tap listener to toggle full-screen mode.
- final GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
- // Override `onDoubleTap()`. All other events are handled using the default settings.
- @Override
- public boolean onDoubleTap(MotionEvent event) {
- if (fullScreenBrowsingModeEnabled) { // Only process the double-tap if full screen browsing mode is enabled.
- // Toggle `inFullScreenBrowsingMode`.
- inFullScreenBrowsingMode = !inFullScreenBrowsingMode;
-
- if (inFullScreenBrowsingMode) { // Switch to full screen mode.
- // Hide the `appBar`.
- appBar.hide();
-
- // Hide the banner ad in the free flavor.
- if (BuildConfig.FLAVOR.contentEquals("free")) {
- // The AdView is destroyed and recreated, which changes the ID, every time it is reloaded to handle possible rotations.
- AdHelper.hideAd(findViewById(R.id.adview));
- }
-
- // 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);
-
- /* 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 re-hides them after they are shown.
- */
- 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);
-
- // 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.
- if (translucentNavigationBarOnFullscreen) {
- // 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();
-
- // Show the `BannerAd` in the free flavor.
- if (BuildConfig.FLAVOR.contentEquals("free")) {
- // Reload the ad. The AdView is destroyed and recreated, which changes the ID, every time it is reloaded to handle possible rotations.
- AdHelper.loadAd(findViewById(R.id.adview), getApplicationContext(), getString(R.string.ad_unit_id));
- }
-
- // 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);
-
- // Remove any `SYSTEM_UI` flags from `rootCoordinatorLayout`.
- rootCoordinatorLayout.setSystemUiVisibility(0);
-
- // 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;
- }
- }
- });
-
- // Pass all touch events on `mainWebView` through `gestureDetector` to check for double-taps.
- mainWebView.setOnTouchListener((View v, MotionEvent event) -> {
- // Call `performClick()` on the view, which is required for accessibility.
- v.performClick();
-
- // Send the `event` to `gestureDetector`.
- return gestureDetector.onTouchEvent(event);
- });
-
- // Update `findOnPageCountTextView`.
- mainWebView.setFindListener(new WebView.FindListener() {
- // Get a handle for `findOnPageCountTextView`.
- final TextView findOnPageCountTextView = findViewById(R.id.find_on_page_count_textview);
-
- @Override
- public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, boolean isDoneCounting) {
- if ((isDoneCounting) && (numberOfMatches == 0)) { // There are no matches.
- // Set `findOnPageCountTextView` to `0/0`.
- findOnPageCountTextView.setText(R.string.zero_of_zero);
- } else if (isDoneCounting) { // There are matches.
- // `activeMatchOrdinal` is zero-based.
- int activeMatch = activeMatchOrdinal + 1;
-
- // Build the match string.
- String matchString = activeMatch + "/" + numberOfMatches;
-
- // Set `findOnPageCountTextView`.
- findOnPageCountTextView.setText(matchString);
- }
- }