+
+ // Listen for touches on the navigation menu.
+ navigationView.setNavigationItemSelectedListener(this);
+
+ // Get handles for the navigation menu and the back and forward menu items. The menu is zero-based.
+ final Menu navigationMenu = navigationView.getMenu();
+ final MenuItem navigationCloseTabMenuItem = navigationMenu.getItem(0);
+ final MenuItem navigationBackMenuItem = navigationMenu.getItem(3);
+ final MenuItem navigationForwardMenuItem = navigationMenu.getItem(4);
+ final MenuItem navigationHistoryMenuItem = navigationMenu.getItem(5);
+ navigationRequestsMenuItem = navigationMenu.getItem(6);
+
+ // Initialize the web view pager adapter.
+ webViewPagerAdapter = new WebViewPagerAdapter(fragmentManager);
+
+ // Set the pager adapter on the web view pager.
+ webViewPager.setAdapter(webViewPagerAdapter);
+
+ // Store up to 100 tabs in memory.
+ webViewPager.setOffscreenPageLimit(100);
+
+ // Update the web view pager every time a tab is modified.
+ webViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ // Do nothing.
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ // Get the WebView tab fragment.
+ WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(position);
+
+ // Get the fragment view.
+ View fragmentView = webViewTabFragment.getView();
+
+ // Remove the incorrect lint warning below that the fragment view might be null.
+ assert fragmentView != null;
+
+ // Store the current WebView.
+ currentWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
+
+ // Store the current formatted URL string.
+ formattedUrlString = currentWebView.getUrl();
+
+ // Clear the focus from the URL text box.
+ urlEditText.clearFocus();
+
+ // Hide the soft keyboard.
+ inputMethodManager.hideSoftInputFromWindow(currentWebView.getWindowToken(), 0);
+
+ // Display the current URL in the URL text box.
+ urlEditText.setText(formattedUrlString);
+
+ // Highlight the URL text.
+ highlightUrlText();
+
+ // Set the background to indicate the domain settings status.
+ if (currentWebView.getDomainSettingsApplied()) {
+ // Set a green background on `urlTextBox` to indicate that custom domain settings are being used. The deprecated `.getDrawable()` must be used until the minimum API >= 21.
+ if (darkTheme) {
+ urlEditText.setBackground(getResources().getDrawable(R.drawable.url_bar_background_dark_blue));
+ } else {
+ urlEditText.setBackground(getResources().getDrawable(R.drawable.url_bar_background_light_green));
+ }
+ } else {
+ urlEditText.setBackgroundDrawable(getResources().getDrawable(R.color.transparent));
+ }
+
+ // Select the corresponding tab if it does not match the currently selected page. This will happen if the page was scrolled via swiping in the view pager.
+ if (tabLayout.getSelectedTabPosition() != position) {
+ // Get a handle for the corresponding tab.
+ TabLayout.Tab correspondingTab = tabLayout.getTabAt(position);
+
+ // Assert that the corresponding tab is not null.
+ assert correspondingTab != null;
+
+ // Select the corresponding tab.
+ correspondingTab.select();
+ }
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ // Do nothing.
+ }
+ });
+
+ // Display the View SSL Certificate dialog when the currently selected tab is reselected.
+ tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
+ @Override
+ public void onTabSelected(TabLayout.Tab tab) {
+ // Select the same page in the view pager.
+ webViewPager.setCurrentItem(tab.getPosition());
+ }
+
+ @Override
+ public void onTabUnselected(TabLayout.Tab tab) {
+ // Do nothing.
+ }
+
+ @Override
+ public void onTabReselected(TabLayout.Tab tab) {
+ // Instantiate the View SSL Certificate dialog.
+ DialogFragment viewSslCertificateDialogFragment = new ViewSslCertificateDialog();
+
+ // Display the View SSL Certificate dialog.
+ viewSslCertificateDialogFragment.show(getSupportFragmentManager(), getString(R.string.view_ssl_certificate));
+ }
+ });
+
+ // Add the first tab. (It doesn't matter what view is passed. That is just required as part of the ImageView `onClick()` syntax).
+ addTab(webViewPager);