import android.print.PrintDocumentAdapter;
import android.print.PrintManager;
import android.support.annotation.NonNull;
+import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.text.TextWatcher;
import android.util.Patterns;
import android.view.ContextMenu;
+import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.MotionEvent;
import android.view.View;
+import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.webkit.CookieManager;
import android.webkit.DownloadListener;
import android.widget.TextView;
import com.stoutner.privacybrowser.BannerAd;
+import com.stoutner.privacybrowser.BuildConfig;
import com.stoutner.privacybrowser.R;
import com.stoutner.privacybrowser.helpers.OrbotProxyHelper;
import com.stoutner.privacybrowser.dialogs.CreateHomeScreenShortcut;
public static SslCertificate sslCertificate;
+
+ // `drawerLayout` is used in `onCreate()`, `onNewIntent()`, and `onBackPressed()`.
+ private DrawerLayout drawerLayout;
+
+ // `rootCoordinatorLayout` is used in `onCreate()` and `applySettings()`.
+ private CoordinatorLayout rootCoordinatorLayout;
+
// 'mainWebView' is used in `onCreate()`, `onOptionsItemSelected()`, `onNavigationItemSelected()`, `onRestart()`, `onCreateContextMenu()`, `findPreviousOnPage()`, `findNextOnPage()`, `closeFindOnPage()`, and `loadUrlFromTextBox()`.
private WebView mainWebView;
// `javaScriptEnabledSearchURL` is used in `loadURLFromTextBox()` and `applySettings()`.
private String javaScriptEnabledSearchURL;
+ // `hideSystemBarsOnFullscreen` is used in `onCreate()` and `applySettings()`.
+ private boolean hideSystemBarsOnFullscreen;
+
+ // `translucentNavigationBarOnFullscreen` is used in `onCreate()` and `applySettings()`.
+ private boolean translucentNavigationBarOnFullscreen;
+
// `mainMenu` is used in `onCreateOptionsMenu()` and `updatePrivacyIcons()`.
private Menu mainMenu;
// `drawerToggle` is used in `onCreate()`, `onPostCreate()`, `onConfigurationChanged()`, `onNewIntent()`, and `onNavigationItemSelected()`.
private ActionBarDrawerToggle drawerToggle;
- // `drawerLayout` is used in `onCreate()`, `onNewIntent()`, and `onBackPressed()`.
- private DrawerLayout drawerLayout;
-
// `urlTextBox` is used in `onCreate()`, `onOptionsItemSelected()`, and `loadUrlFromTextBox()`.
private EditText urlTextBox;
@SuppressLint("SetJavaScriptEnabled")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.main_coordinatorlayout);
+ setContentView(R.layout.drawerlayout);
// Get a handle for `inputMethodManager`.
inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// We need to use the `SupportActionBar` from `android.support.v7.app.ActionBar` until the minimum API is >= 21.
- Toolbar supportAppBar = (Toolbar) findViewById(R.id.appBar);
+ Toolbar supportAppBar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(supportAppBar);
appBar = getSupportActionBar();
}
});
- // Get handles for `fullScreenVideoFrameLayout`, `mainWebView`, and `find_on_page_edittext`.
- final FrameLayout fullScreenVideoFrameLayout = (FrameLayout) findViewById(R.id.fullScreenVideoFrameLayout);
+ // Get handles for views that need to be accessed.
+ drawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);
+ 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);
+
+ // 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 (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);
+
+ // 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);
+
+ // 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 an ugly scrim to print on 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();
+
+ // 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);
+
+ // 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;
+ }
+ });
+
+ // Pass all touch events on `mainWebView` through `gestureDetector` to check for double-taps.
+ mainWebView.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ // Send the `event` to `gestureDetector`.
+ return gestureDetector.onTouchEvent(event);
+ }
+ });
// Update `findOnPageCountTextView`.
mainWebView.setFindListener(new WebView.FindListener() {
// Get a handle for `findOnPageCountTextView`.
- TextView findOnPageCountTextView = (TextView) findViewById(R.id.find_on_page_count_textview);
+ final TextView findOnPageCountTextView = (TextView) findViewById(R.id.find_on_page_count_textview);
@Override
public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, boolean isDoneCounting) {
}
});
- // Create the navigation drawer.
- drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
- // `DrawerTitle` identifies the drawer in accessibility mode.
+ // `DrawerTitle` identifies the `DrawerLayout` in accessibility mode.
drawerLayout.setDrawerTitle(GravityCompat.START, getString(R.string.navigation_drawer));
// Listen for touches on the navigation menu.
- final NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
+ final NavigationView navigationView = (NavigationView) findViewById(R.id.navigationview);
navigationView.setNavigationItemSelectedListener(this);
- // Get handles for `navigationMenu` and the back and forward menu items. The menu is zero-based, so item 1 and 2 and the second and third items in the menu.
+ // Get handles for `navigationMenu` and the back and forward menu items. The menu is zero-based, so items 1, 2, and 3 are the second, third, and fourth entries in the menu.
final Menu navigationMenu = navigationView.getMenu();
final MenuItem navigationBackMenuItem = navigationMenu.getItem(1);
final MenuItem navigationForwardMenuItem = navigationMenu.getItem(2);
mainWebView.setVisibility(View.GONE);
// Hide the ad if this is the free flavor.
- BannerAd.hideAd(adView);
+ if (BuildConfig.FLAVOR.contentEquals("free")) {
+ 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 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_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+ view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
// Exit full screen video
mainWebView.setVisibility(View.VISIBLE);
// Show the ad if this is the free flavor.
- BannerAd.showAd(adView);
+ if (BuildConfig.FLAVOR.contentEquals("free")) {
+ BannerAd.showAd(adView);
+ }
// Hide the fullScreenVideoFrameLayout.
fullScreenVideoFrameLayout.removeAllViews();
case R.id.find_on_page:
// Hide the URL app bar.
- Toolbar appBarToolbar = (Toolbar) findViewById(R.id.appBar);
+ Toolbar appBarToolbar = (Toolbar) findViewById(R.id.app_bar);
appBarToolbar.setVisibility(View.GONE);
// Show the Find on Page `RelativeLayout`.
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
- // Reload the ad if this is the free flavor.
- BannerAd.reloadAfterRotate(adView, getApplicationContext(), getString(R.string.ad_id));
+ // 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));
- // 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);
+ // 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
// ActivityCompat.invalidateOptionsMenu(this);
public void onPause() {
// Pause `mainWebView`.
mainWebView.onPause();
+
+ // Stop all JavaScript.
mainWebView.pauseTimers();
- // We need to pause the adView or it will continue to consume resources in the background on the free flavor.
- BannerAd.pauseAd(adView);
+ // Pause the adView or it will continue to consume resources in the background on the free flavor.
+ if (BuildConfig.FLAVOR.contentEquals("free")) {
+ BannerAd.pauseAd(adView);
+ }
super.onPause();
}
public void onResume() {
super.onResume();
- // Resume `mainWebView`.
+ // Resume JavaScript (if enabled).
mainWebView.resumeTimers();
+
+ // Resume `mainWebView`.
mainWebView.onResume();
- // We need to resume the adView for the free flavor.
- BannerAd.resumeAd(adView);
+ // Resume the adView for the free flavor.
+ if (BuildConfig.FLAVOR.contentEquals("free")) {
+ BannerAd.resumeAd(adView);
+ }
}
@Override
findOnPageLinearLayout.setVisibility(View.GONE);
// Show the URL app bar.
- Toolbar appBarToolbar = (Toolbar) findViewById(R.id.appBar);
+ Toolbar appBarToolbar = (Toolbar) findViewById(R.id.app_bar);
appBarToolbar.setVisibility(View.VISIBLE);
// Hide the keyboard so we can see the webpage. `0` indicates no additional flags.
swipeToRefreshEnabled = sharedPreferences.getBoolean("swipe_to_refresh_enabled", false);
boolean doNotTrackEnabled = sharedPreferences.getBoolean("do_not_track", true);
boolean proxyThroughOrbot = sharedPreferences.getBoolean("proxy_through_orbot", false);
+ hideSystemBarsOnFullscreen = sharedPreferences.getBoolean("hide_system_bars", false);
+ translucentNavigationBarOnFullscreen = sharedPreferences.getBoolean("translucent_navigation_bar", true);
// Because they can be modified on-the-fly by the user, these default settings are only applied when the program first runs.
if (javaScriptEnabled == null) { // If `javaScriptEnabled` is null the program is just starting.
} else { // Reset the proxy to default. The host is `""` and the port is `"0"`.
OrbotProxyHelper.setProxy(getApplicationContext(), this, "", "0");
}
+
+ // If we are in full screen mode update the `SYSTEM_UI` flags.
+ if (!appBar.isShowing()) {
+ if (hideSystemBarsOnFullscreen) { // Hide everything.
+ // Remove the translucent navigation setting if it is currently flagged.
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
+
+ // Remove the translucent status bar overlay.
+ 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.
+ */
+ rootCoordinatorLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
+ } else { // Hide everything except the status and navigation bars.
+ // Add the translucent status flag if it is unset.
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+
+ if (translucentNavigationBarOnFullscreen) {
+ // Set the navigation bar to be translucent.
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
+ } else {
+ // Set the navigation bar to be black.
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
+ }
+ }
+ }
}
private void updatePrivacyIcons(boolean runInvalidateOptionsMenu) {
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+ Copyright 2015-2016 Soren Stoutner <soren@stoutner.com>.
+
+ This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>>.
+
+ Privacy Browser is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Privacy Browser is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Privacy Browser. If not, see <http://www.gnu.org/licenses/>. -->
+
+<android.support.v4.widget.DrawerLayout
+ android:id="@+id/drawerlayout"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent" >
+
+ <!-- android:fitsSystemWindows="true" moves rootCoordinatorLayout below the system status bar.
+ When it is specified the theme should include <item name="android:windowTranslucentStatus">true</item>.
+ Setting the layout root to be focusableInTouchMode prevents urlTextBox from stealing focus on launch and opening the keyboard. -->
+ <android.support.design.widget.CoordinatorLayout
+ android:id="@+id/root_coordinatorlayout"
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context="com.stoutner.privacybrowser.activities.MainWebView"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:fitsSystemWindows="true"
+ android:focusable="true"
+ android:focusableInTouchMode="true" >
+
+ <!-- The purpose of the LinearLayout is to place the included main_webview below appBarLayout. -->
+ <LinearLayout
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:orientation="vertical" >
+
+ <android.support.design.widget.AppBarLayout
+ android:id="@+id/app_bar_layout"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:theme="@style/AppBarOverlay" >
+
+ <!-- The `FrameLayout` allows `appBar` and `find_on_page_app_bar` to occupy the same space. -->
+ <FrameLayout
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent" >
+
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/app_bar"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:background="@color/grey_100"
+ app:popupTheme="@style/LightPopupOverlay" />
+
+ <include layout="@layout/find_on_page_app_bar" />
+ </FrameLayout>
+ </android.support.design.widget.AppBarLayout>
+
+ <include layout="@layout/main_webview" />
+ </LinearLayout>
+ </android.support.design.widget.CoordinatorLayout>
+
+ <!-- `fullScreenVideoFrameLayout` is used to display full screen videos. It is initially `android:visibility="gone"` to hide it from view.
+ The `FrameLayout` needs to be before the `NavigationView` or touches on the navigation drawer will not work after exiting full screen video using the back button.-->
+ <FrameLayout
+ android:id="@+id/full_screen_video_framelayout"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:visibility="gone"
+ android:background="@color/black" />
+
+ <!-- The navigation drawer. -->
+ <android.support.design.widget.NavigationView
+ android:id="@+id/navigationview"
+ android:layout_height="match_parent"
+ android:layout_width="wrap_content"
+ android:layout_gravity="start"
+ app:headerLayout="@layout/navigation_header"
+ app:menu="@menu/webview_navigation_menu"
+ app:itemIconTint="@color/blue_800" />
+</android.support.v4.widget.DrawerLayout>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- Copyright 2015-2016 Soren Stoutner <soren@stoutner.com>.
-
- This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>>.
-
- Privacy Browser is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Privacy Browser is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Privacy Browser. If not, see <http://www.gnu.org/licenses/>. -->
-
-<android.support.v4.widget.DrawerLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:id="@+id/drawerLayout"
- android:layout_height="match_parent"
- android:layout_width="match_parent">
-
- <!-- android:fitsSystemWindows="true" moves rootCoordinatorLayout below the system status bar.
- When it is specified the theme should include <item name="android:windowTranslucentStatus">true</item>.
- Setting the layout root to be focusableInTouchMode prevents urlTextBox from stealing focus on launch and opening the keyboard. -->
- <android.support.design.widget.CoordinatorLayout
- android:id="@+id/rootCoordinatorLayout"
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- tools:context="com.stoutner.privacybrowser.activities.MainWebView"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:fitsSystemWindows="true"
- android:focusable="true"
- android:focusableInTouchMode="true" >
-
- <!-- The purpose of the LinearLayout is to place the included main_webview below appBarLayout. -->
- <LinearLayout
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:orientation="vertical" >
-
- <android.support.design.widget.AppBarLayout
- android:id="@+id/appBarLayout"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:theme="@style/AppBarOverlay" >
-
- <!-- The `FrameLayout` allows `appBar` and `find_on_page_app_bar` to occupy the same space. -->
- <FrameLayout
- android:layout_height="wrap_content"
- android:layout_width="match_parent" >
-
- <android.support.v7.widget.Toolbar
- android:id="@+id/appBar"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:background="@color/grey_100"
- app:popupTheme="@style/LightPopupOverlay" />
-
- <include layout="@layout/find_on_page_app_bar" />
- </FrameLayout>
- </android.support.design.widget.AppBarLayout>
-
- <include layout="@layout/main_webview" />
- </LinearLayout>
- </android.support.design.widget.CoordinatorLayout>
-
- <!-- `fullScreenVideoFrameLayout` is used to display full screen videos. It is initially `android:visibility="gone"` to hide it from view.
- The `FrameLayout` needs to be before the `NavigationView` or touches on the navigation drawer will not work after exiting full screen video using the back button.-->
- <FrameLayout
- android:id="@+id/fullScreenVideoFrameLayout"
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:visibility="gone"
- android:background="@color/black" />
-
- <!-- The navigation drawer. -->
- <android.support.design.widget.NavigationView
- android:id="@+id/navigationView"
- android:layout_height="match_parent"
- android:layout_width="wrap_content"
- android:layout_gravity="start"
- app:headerLayout="@layout/navigation_header"
- app:menu="@menu/webview_navigation_menu"
- app:itemIconTint="@color/blue_800" />
-</android.support.v4.widget.DrawerLayout>
\ No newline at end of file