]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java
Finish tabbed browsing. https://redmine.stoutner.com/issues/22
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / activities / MainWebViewActivity.java
index b4996aae41d789d070ebca470ad08b2ee7124aeb..908979b9992ff660359651455e87f5c22ac561cb 100644 (file)
@@ -152,10 +152,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-// TODO.  New tabs are white in dark mode.
-// TODO.  Hide the tabs in full screen mode.
-// TODO.  Find on page.
-
 // AppCompatActivity from android.support.v7.app.AppCompatActivity must be used to have access to the SupportActionBar until the minimum API is >= 21.
 public class MainWebViewActivity extends AppCompatActivity implements CreateBookmarkDialog.CreateBookmarkListener, CreateBookmarkFolderDialog.CreateBookmarkFolderListener,
         DownloadFileDialog.DownloadFileListener, DownloadImageDialog.DownloadImageListener, DownloadLocationPermissionDialog.DownloadLocationPermissionDialogListener, EditBookmarkDialog.EditBookmarkListener,
@@ -223,7 +219,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
     // `inFullScreenBrowsingMode` is used in `onCreate()`, `onConfigurationChanged()`, and `applyAppSettings()`.
     private boolean inFullScreenBrowsingMode;
 
-    // Hide app bar is used in `applyAppSettings()` and `initializeWebView()`.
+    // The hide app bar tracker is used in `applyAppSettings()` and `initializeWebView()`.
     private boolean hideAppBar;
 
     // `reapplyDomainSettingsOnRestart` is used in `onCreate()`, `onOptionsItemSelected()`, `onNavigationItemSelected()`, `onRestart()`, and `onAddDomain()`, .
@@ -480,6 +476,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
 
             @Override
             public void onPageSelected(int position) {
+                // Close the find on page bar if it is open.
+                closeFindOnPage(null);
+
                 // Set the current WebView.
                 setCurrentWebView(position);
 
@@ -610,8 +609,10 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
 
             @Override
             public void afterTextChanged(Editable s) {
-                // Search for the text in `mainWebView`.
-                currentWebView.findAllAsync(findOnPageEditText.getText().toString());
+                // Search for the text in the WebView if it is not null.  Sometimes on resume after a period of non-use the WebView will be null.
+                if (currentWebView != null) {
+                    currentWebView.findAllAsync(findOnPageEditText.getText().toString());
+                }
             }
         });
 
@@ -893,8 +894,10 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                     // Reset the current domain name so the domain settings will be reapplied.
                     nestedScrollWebView.resetCurrentDomainName();
 
-                    // Reapply the domain settings.
-                    applyDomainSettings(nestedScrollWebView, nestedScrollWebView.getUrl(), false, true);
+                    // Reapply the domain settings if the URL is not null, which can happen if an empty tab is active when returning from settings.
+                    if (nestedScrollWebView.getUrl() != null) {
+                        applyDomainSettings(nestedScrollWebView, nestedScrollWebView.getUrl(), false, true);
+                    }
                 }
             }
         }
@@ -1927,6 +1930,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 LinearLayout findOnPageLinearLayout = findViewById(R.id.find_on_page_linearlayout);
                 EditText findOnPageEditText = findViewById(R.id.find_on_page_edittext);
 
+                // Set the minimum height of the find on page linear layout to match the toolbar.
+                findOnPageLinearLayout.setMinimumHeight(toolbar.getHeight());
+
                 // Hide the toolbar.
                 toolbar.setVisibility(View.GONE);
 
@@ -3279,11 +3285,12 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         fullScreenBrowsingModeEnabled = sharedPreferences.getBoolean("full_screen_browsing_mode", false);
         hideAppBar = sharedPreferences.getBoolean("hide_app_bar", true);
 
-        // Get handles for the views that need to be modified.  `getSupportActionBar()` must be used until the minimum API >= 21.
+        // Get handles for the views that need to be modified.
         FrameLayout rootFrameLayout = findViewById(R.id.root_framelayout);
         ActionBar actionBar = getSupportActionBar();
+        LinearLayout tabsLinearLayout = findViewById(R.id.tabs_linearlayout);
 
-        // Remove the incorrect lint warnings below that the action bar might be null.
+        // Remove the incorrect lint warning below that the action bar might be null.
         assert actionBar != null;
 
         // Apply the proxy through Orbot settings.
@@ -3318,8 +3325,16 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         if (fullScreenBrowsingModeEnabled && inFullScreenBrowsingMode) {  // Privacy Browser is currently in full screen browsing mode.
             // Update the visibility of the app bar, which might have changed in the settings.
             if (hideAppBar) {
+                // Hide the tab linear layout.
+                tabsLinearLayout.setVisibility(View.GONE);
+
+                // Hide the action bar.
                 actionBar.hide();
             } else {
+                // Show the tab linear layout.
+                tabsLinearLayout.setVisibility(View.VISIBLE);
+
+                // Show the action bar.
                 actionBar.show();
             }
 
@@ -3343,7 +3358,10 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             // Reset the full screen tracker, which could be true if Privacy Browser was in full screen mode before entering settings and full screen browsing was disabled.
             inFullScreenBrowsingMode = false;
 
-            // Show the app bar.
+            // Show the tab linear layout.
+            tabsLinearLayout.setVisibility(View.VISIBLE);
+
+            // Show the action bar.
             actionBar.show();
 
             // Show the banner ad in the free flavor.
@@ -4210,23 +4228,37 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             // Update the privacy icons.  `true` redraws the icons in the app bar.
             updatePrivacyIcons(true);
 
-            // Clear the focus from the URL text box.
-            urlEditText.clearFocus();
-
             // Get a handle for the input method manager.
             InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
 
             // Remove the lint warning below that the input method manager might be null.
             assert inputMethodManager != null;
 
-            // Hide the soft keyboard.
-            inputMethodManager.hideSoftInputFromWindow(currentWebView.getWindowToken(), 0);
+            // Get the current URL.
+            String url = currentWebView.getUrl();
+
+            if ((url == null) || url.equals("about:blank")) {  // The WebView is blank.
+                // Display the hint in the URL edit text.
+                urlEditText.setText("");
+
+                // Request focus for the URL text box.
+                urlEditText.requestFocus();
+
+                // Display the keyboard.
+                inputMethodManager.showSoftInput(urlEditText, 0);
+            } else {  // The WebView has a loaded URL.
+                // Clear the focus from the URL text box.
+                urlEditText.clearFocus();
 
-            // Display the current URL in the URL text box.
-            urlEditText.setText(currentWebView.getUrl());
+                // Hide the soft keyboard.
+                inputMethodManager.hideSoftInputFromWindow(currentWebView.getWindowToken(), 0);
 
-            // Highlight the URL text.
-            highlightUrlText();
+                // Display the current URL in the URL text box.
+                urlEditText.setText(url);
+
+                // Highlight the URL text.
+                highlightUrlText();
+            }
 
             // Set the background to indicate the domain settings status.
             if (currentWebView.getDomainSettingsApplied()) {
@@ -4249,11 +4281,12 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
         DrawerLayout drawerLayout = findViewById(R.id.drawerlayout);
         RelativeLayout mainContentRelativeLayout = findViewById(R.id.main_content_relativelayout);
         ActionBar actionBar = getSupportActionBar();
+        LinearLayout tabsLinearLayout = findViewById(R.id.tabs_linearlayout);
         EditText urlEditText = findViewById(R.id.url_edittext);
         TabLayout tabLayout = findViewById(R.id.tablayout);
         SwipeRefreshLayout swipeRefreshLayout = findViewById(R.id.swiperefreshlayout);
 
-        // Remove the incorrect lint warnings below that the some of the views might be null.
+        // Remove the incorrect lint warning below that the action bar might be null.
         assert actionBar != null;
 
         // Get a handle for the activity
@@ -4313,6 +4346,13 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                     if (inFullScreenBrowsingMode) {  // Switch to full screen mode.
                         // Hide the app bar if specified.
                         if (hideAppBar) {
+                            // Close the find on page bar if it is visible.
+                            closeFindOnPage(null);
+
+                            // Hide the tab linear layout.
+                            tabsLinearLayout.setVisibility(View.GONE);
+
+                            // Hide the action bar.
                             actionBar.hide();
                         }
 
@@ -4333,7 +4373,10 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                         rootFrameLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                 View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
                     } else {  // Switch to normal viewing mode.
-                        // Show the app bar.
+                        // Show the tab linear layout.
+                        tabsLinearLayout.setVisibility(View.VISIBLE);
+
+                        // Show the action bar.
                         actionBar.show();
 
                         // Show the banner ad in the free flavor.
@@ -4454,7 +4497,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
             @Override
             public void onProgressChanged(WebView view, int progress) {
                 // Inject the night mode CSS if night mode is enabled.
-                if (nestedScrollWebView.getNightMode()) {
+                if (nestedScrollWebView.getNightMode()) {  // Night mode is enabled.
                     // `background-color: #212121` sets the background to be dark gray.  `color: #BDBDBD` sets the text color to be light gray.  `box-shadow: none` removes a lower underline on links
                     // used by WordPress.  `text-decoration: none` removes all text underlines.  `text-shadow: none` removes text shadows, which usually have a hard coded color.
                     // `border: none` removes all borders, which can also be used to underline text.  `a {color: #1565C0}` sets links to be a dark blue.
@@ -4476,6 +4519,11 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                         // Display the WebView after 500 milliseconds.
                         displayWebViewHandler.postDelayed(displayWebViewRunnable, 500);
                     });
+                } else {  // Night mode is disabled.
+                    // Display the nested scroll WebView if night mode is disabled.
+                    // Because of a race condition between `applyDomainSettings` and `onPageStarted`,
+                    // when night mode is set by domain settings the WebView may be hidden even if night mode is not currently enabled.
+                    nestedScrollWebView.setVisibility(View.VISIBLE);
                 }
 
                 // Update the progress bar.
@@ -4489,13 +4537,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                     // Hide the progress bar.
                     progressBar.setVisibility(View.GONE);
 
-                    // Display the nested scroll WebView if night mode is disabled.
-                    // Because of a race condition between `applyDomainSettings` and `onPageStarted`,
-                    // when night mode is set by domain settings the WebView may be hidden even if night mode is not currently enabled.
-                    if (!nestedScrollWebView.getNightMode()) {
-                        nestedScrollWebView.setVisibility(View.VISIBLE);
-                    }
-
                     //Stop the swipe to refresh indicator if it is running
                     swipeRefreshLayout.setRefreshing(false);
                 }
@@ -4628,6 +4669,10 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 if (fullScreenBrowsingModeEnabled && inFullScreenBrowsingMode) {  // Privacy Browser is currently in full screen browsing mode.
                     // Hide the app bar if specified.
                     if (hideAppBar) {
+                        // Hide the tab linear layout.
+                        tabsLinearLayout.setVisibility(View.GONE);
+
+                        // Hide the action bar.
                         actionBar.hide();
                     }
 
@@ -5076,6 +5121,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                 // If night mode is enabled, hide `mainWebView` until after the night mode CSS is applied.
                 if (nestedScrollWebView.getNightMode()) {
                     nestedScrollWebView.setVisibility(View.INVISIBLE);
+                } else {
+                    nestedScrollWebView.setVisibility(View.VISIBLE);
                 }
 
                 // Hide the keyboard.
@@ -5219,8 +5266,8 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook
                             // Display the keyboard.
                             inputMethodManager.showSoftInput(urlEditText, 0);
 
-                            // Hide the WebView, which causes the default background color to be displayed according to the theme.  // TODO
-                            nestedScrollWebView.setVisibility(View.GONE);
+                            // Hide the WebView, which causes the default background color to be displayed according to the theme.
+                            nestedScrollWebView.setVisibility(View.INVISIBLE);
 
                             // Apply the domain settings.  This clears any settings from the previous domain.
                             applyDomainSettings(nestedScrollWebView, "", true, false);