- bookmarksCursor = bookmarksDatabaseHelper.getBookmarksByDisplayOrder(currentBookmarksFolder);
-
- // Update the `ListView`.
- bookmarksCursorAdapter.changeCursor(bookmarksCursor);
- }
-
- // Override `onBackPressed` to handle the navigation drawer and and the WebViews.
- @Override
- public void onBackPressed() {
- // Get a handle for the drawer layout and the tab layout.
- DrawerLayout drawerLayout = findViewById(R.id.drawerlayout);
- TabLayout tabLayout = findViewById(R.id.tablayout);
-
- if (drawerLayout.isDrawerVisible(GravityCompat.START)) { // The navigation drawer is open.
- // Close the navigation drawer.
- drawerLayout.closeDrawer(GravityCompat.START);
- } else if (drawerLayout.isDrawerVisible(GravityCompat.END)){ // The bookmarks drawer is open.
- if (currentBookmarksFolder.isEmpty()) { // The home folder is displayed.
- // close the bookmarks drawer.
- drawerLayout.closeDrawer(GravityCompat.END);
- } else { // A subfolder is displayed.
- // Place the former parent folder in `currentFolder`.
- currentBookmarksFolder = bookmarksDatabaseHelper.getParentFolderName(currentBookmarksFolder);
-
- // Load the new folder.
- loadBookmarksFolder();
- }
- } else if (displayingFullScreenVideo) { // A full screen video is shown.
- // Get a handle for the layouts.
- FrameLayout rootFrameLayout = findViewById(R.id.root_framelayout);
- RelativeLayout mainContentRelativeLayout = findViewById(R.id.main_content_relativelayout);
- FrameLayout fullScreenVideoFrameLayout = findViewById(R.id.full_screen_video_framelayout);
-
- // Re-enable the screen timeout.
- fullScreenVideoFrameLayout.setKeepScreenOn(false);
-
- // Unset the full screen video flag.
- displayingFullScreenVideo = false;
-
- // Remove all the views from the full screen video frame layout.
- fullScreenVideoFrameLayout.removeAllViews();
-
- // Hide the full screen video frame layout.
- fullScreenVideoFrameLayout.setVisibility(View.GONE);
-
- // Enable the sliding drawers.
- drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
-
- // Show the main content relative layout.
- mainContentRelativeLayout.setVisibility(View.VISIBLE);
-
- // Apply the appropriate full screen mode flags.
- if (fullScreenBrowsingModeEnabled && inFullScreenBrowsingMode) { // Privacy Browser is currently in full screen browsing mode.
- // Hide the app bar if specified.
- if (hideAppBar) {
- // Get handles for the views.
- LinearLayout tabsLinearLayout = findViewById(R.id.tabs_linearlayout);
- ActionBar actionBar = getSupportActionBar();
-
- // Remove the incorrect lint warning below that the action bar might be null.
- assert actionBar != null;
-
- // Hide the tab linear layout.
- tabsLinearLayout.setVisibility(View.GONE);
-
- // Hide the action bar.
- actionBar.hide();
- }
-
- // Hide the banner ad in the free flavor.
- if (BuildConfig.FLAVOR.contentEquals("free")) {
- AdHelper.hideAd(findViewById(R.id.adview));
- }
-
- // Remove the translucent status flag. This is necessary so the root frame layout can fill the entire screen.
- getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
-
- /* Hide the system bars.
- * SYSTEM_UI_FLAG_FULLSCREEN hides the status bar at the top of the screen.
- * SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN makes the root frame layout fill the area that is normally reserved for the status bar.
- * 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.
- */
- 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.
- // Remove the `SYSTEM_UI` flags from the root frame layout.
- rootFrameLayout.setSystemUiVisibility(0);
-
- // Add the translucent status flag.
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
- }
-
- // Reload the ad for the free flavor if not in full screen mode.
- if (BuildConfig.FLAVOR.contentEquals("free") && !inFullScreenBrowsingMode) {
- // Reload the ad.
- AdHelper.loadAd(findViewById(R.id.adview), getApplicationContext(), getString(R.string.ad_unit_id));
- }
- } else if (currentWebView.canGoBack()) { // There is at least one item in the current WebView history.
- // Get the current web back forward list.
- WebBackForwardList webBackForwardList = currentWebView.copyBackForwardList();
-
- // Get the previous entry URL.
- String previousUrl = webBackForwardList.getItemAtIndex(webBackForwardList.getCurrentIndex() - 1).getUrl();
-
- // Apply the domain settings.
- applyDomainSettings(currentWebView, previousUrl, false, false);
-
- // Go back.
- currentWebView.goBack();
- } else if (tabLayout.getTabCount() > 1) { // There are at least two tabs.
- // Close the current tab.
- closeCurrentTab();
- } else { // There isn't anything to do in Privacy Browser.
- // Close Privacy Browser. `finishAndRemoveTask()` also removes Privacy Browser from the recent app list.
- if (Build.VERSION.SDK_INT >= 21) {
- finishAndRemoveTask();
- } else {
- finish();
- }
-
- // Manually kill Privacy Browser. Otherwise, it is glitchy when restarted.
- System.exit(0);
- }
- }
-
- // Process the results of a file browse.
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent returnedIntent) {
- // Run the default commands.
- super.onActivityResult(requestCode, resultCode, returnedIntent);
-
- // Run the commands that correlate to the specified request code.
- switch (requestCode) {
- case BROWSE_FILE_UPLOAD_REQUEST_CODE:
- // File uploads only work on API >= 21.
- if (Build.VERSION.SDK_INT >= 21) {
- // Pass the file to the WebView.
- fileChooserCallback.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, returnedIntent));
- }
- break;
-
- case BROWSE_SAVE_WEBPAGE_REQUEST_CODE:
- // Don't do anything if the user pressed back from the file picker.
- if (resultCode == Activity.RESULT_OK) {
- // Get a handle for the save dialog fragment.
- DialogFragment saveWebpageDialogFragment = (DialogFragment) getSupportFragmentManager().findFragmentByTag(getString(R.string.save_dialog));
-
- // Only update the file name if the dialog still exists.
- if (saveWebpageDialogFragment != null) {
- // Get a handle for the save webpage dialog.
- Dialog saveWebpageDialog = saveWebpageDialogFragment.getDialog();
-
- // Remove the incorrect lint warning below that the dialog might be null.
- assert saveWebpageDialog != null;
-
- // Get a handle for the file name edit text.
- EditText fileNameEditText = saveWebpageDialog.findViewById(R.id.file_name_edittext);
- TextView fileExistsWarningTextView = saveWebpageDialog.findViewById(R.id.file_exists_warning_textview);
-
- // Instantiate the file name helper.
- FileNameHelper fileNameHelper = new FileNameHelper();
-
- // Get the file path if it isn't null.
- if (returnedIntent.getData() != null) {
- // Convert the file name URI to a file name path.
- String fileNamePath = fileNameHelper.convertUriToFileNamePath(returnedIntent.getData());