]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/activities/DomainsActivity.java
Refactor Domains delete code. https://redmine.stoutner.com/issues/316
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / activities / DomainsActivity.java
index 05df4abc596262c2334c5b09b4bae17a0e074053..cca885652f1fb04eccddabafcb71805fb62d9468 100644 (file)
@@ -19,6 +19,7 @@
 
 package com.stoutner.privacybrowser.activities;
 
+import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -39,6 +40,7 @@ import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.WindowManager;
 import android.widget.CursorAdapter;
 import android.widget.EditText;
 import android.widget.ListView;
@@ -69,6 +71,9 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
     // `dismissingSnackbar` is public static so it can be accessed from `DomainsListFragment`.  It is also used in `onOptionsItemSelected()`.
     public static boolean dismissingSnackbar;
 
+    // `closeActivityAfterDismissingSnackbar` is used in `onOptionsItemSelected()`, and `onBackPressed()`.
+    private boolean closeActivityAfterDismissingSnackbar;
+
     // `context` is used in `onCreate()`, `onOptionsItemSelected()`, and `onAddDomain()`.
     private Context context;
 
@@ -110,6 +115,11 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
+        // Disable screenshots if not allowed.
+        if (!MainWebViewActivity.allowScreenshots) {
+            getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
+        }
+
         // Set the activity theme.
         if (MainWebViewActivity.darkTheme) {
             setTheme(R.style.PrivacyBrowserDark_SecondaryActivity);
@@ -278,17 +288,11 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
 
                     // Dismiss the undo delete `SnackBar` if it is shown.
                     if (undoDeleteSnackbar != null && undoDeleteSnackbar.isShown()) {
-                        undoDeleteSnackbar.dismiss();
-
-                        // Create a `Runnable` to return to the main activity.
-                        Runnable navigateHomeRunnable = () -> {
-                            // Go home.
-                            NavUtils.navigateUpFromSameTask(this);
-                        };
+                        // Set the close flag.
+                        closeActivityAfterDismissingSnackbar = true;
 
-                        // Navigate home after 300 milliseconds to make sure that the previous domain has been deleted from the database.
-                        Handler handler = new Handler();
-                        handler.postDelayed(navigateHomeRunnable, 300);
+                        // Dismiss the snackbar.
+                        undoDeleteSnackbar.dismiss();
                     } else {
                         // Go home.
                         NavUtils.navigateUpFromSameTask(this);
@@ -319,17 +323,11 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
                 } else {  // The device is in single-paned mode and `DomainsListFragment` is displayed.
                     // Dismiss the undo delete `SnackBar` if it is shown.
                     if (undoDeleteSnackbar != null && undoDeleteSnackbar.isShown()) {
-                        undoDeleteSnackbar.dismiss();
-
-                        // Create a `Runnable` to return to the main activity.
-                        Runnable navigateHomeRunnable = () -> {
-                            // Go home.
-                            NavUtils.navigateUpFromSameTask(this);
-                        };
+                        // Set the close flag.
+                        closeActivityAfterDismissingSnackbar = true;
 
-                        // Navigate home after 300 milliseconds to make sure that the previous domain has been deleted from the database.
-                        Handler handler = new Handler();
-                        handler.postDelayed(navigateHomeRunnable, 300);
+                        // Dismiss the snackbar.
+                        undoDeleteSnackbar.dismiss();
                     } else {
                         // Go home.
                         NavUtils.navigateUpFromSameTask(this);
@@ -394,6 +392,9 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
                 // Update the `ListView`.
                 domainsListView.setAdapter(domainsPendingDeleteCursorAdapter);
 
+                // Get a handle for the activity.
+                Activity activity = this;
+
                 // Display a `Snackbar`.
                 undoDeleteSnackbar = Snackbar.make(domainsListView, R.string.domain_deleted, Snackbar.LENGTH_LONG)
                         .setAction(R.string.undo, (View v) -> {
@@ -467,7 +468,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
                                         // Delete the selected domain.
                                         domainsDatabaseHelper.deleteDomain(databaseIdToDelete);
 
-                                        // enable `deleteMenuItem` if the system was waiting for a `Snackbar` to be dismissed.
+                                        // Enable the delete menu item if the system was waiting for a snackbar to be dismissed.
                                         if (dismissingSnackbar) {
                                             // Create a `Runnable` to enable the delete menu item.
                                             Runnable enableDeleteMenuItemRunnable = () -> {
@@ -491,10 +492,17 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
                                                 dismissingSnackbar = false;
                                             };
 
-                                            // Run `enableDeleteMenuItemRunnable` after 100 milliseconds to make sure that the previous domain has been deleted from the database.
+                                            // Enable the delete menu icon after 100 milliseconds to make sure that the previous domain has been deleted from the database.
                                             Handler handler = new Handler();
                                             handler.postDelayed(enableDeleteMenuItemRunnable, 100);
                                         }
+
+                                        // Close the activity if back was pressed.
+                                        if (closeActivityAfterDismissingSnackbar) {
+                                            // Go home.
+                                            NavUtils.navigateUpFromSameTask(activity);
+                                        }
+
                                         break;
                                 }
                             }
@@ -535,15 +543,12 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
             }
 
             // Dismiss the undo delete SnackBar if it is shown.
-            if (undoDeleteSnackbar != null && undoDeleteSnackbar.isShown()) {
-                undoDeleteSnackbar.dismiss();
-
-                // Create a runnable to return to the main activity.
-                Runnable navigateHomeRunnable = super::onBackPressed;
+            if ((undoDeleteSnackbar != null) && undoDeleteSnackbar.isShown()) {
+                // Set the close flag.
+                closeActivityAfterDismissingSnackbar = true;
 
-                // Navigate home after 300 milliseconds to make sure that the previous domain has been deleted from the database.
-                Handler handler = new Handler();
-                handler.postDelayed(navigateHomeRunnable, 300);
+                // Dismiss the snackbar.
+                undoDeleteSnackbar.dismiss();
             } else {
                 // Pass `onBackPressed()` to the system.
                 super.onBackPressed();
@@ -573,15 +578,12 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
             deleteMenuItem.setVisible(false);
         } else {  // The device is in single-paned mode and the domain list fragment is displayed.
             // Dismiss the undo delete SnackBar if it is shown.
-            if (undoDeleteSnackbar != null && undoDeleteSnackbar.isShown()) {
-                undoDeleteSnackbar.dismiss();
+            if ((undoDeleteSnackbar != null) && undoDeleteSnackbar.isShown()) {
+                // Set the close flag.
+                closeActivityAfterDismissingSnackbar = true;
 
-                // Create a runnable to return to the main activity.
-                Runnable navigateHomeRunnable = super::onBackPressed;
-
-                // Navigate home after 300 milliseconds to make sure that the previous domain has been deleted from the database.
-                Handler handler = new Handler();
-                handler.postDelayed(navigateHomeRunnable, 300);
+                // Dismiss the snackbar.
+                undoDeleteSnackbar.dismiss();
             } else {
                 // Pass `onBackPressed()` to the system.
                 super.onBackPressed();
@@ -592,7 +594,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
     @Override
     public void onAddDomain(AppCompatDialogFragment dialogFragment) {
         // Dismiss the undo delete snackbar if it is currently displayed.
-        if ((undoDeleteSnackbar != null) && (undoDeleteSnackbar.isShown())) {
+        if ((undoDeleteSnackbar != null) && undoDeleteSnackbar.isShown()) {
             undoDeleteSnackbar.dismiss();
         }
 
@@ -633,14 +635,17 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         Switch firstPartyCookiesSwitch = view.findViewById(R.id.domain_settings_first_party_cookies_switch);
         Switch thirdPartyCookiesSwitch = view.findViewById(R.id.domain_settings_third_party_cookies_switch);
         Switch domStorageSwitch = view.findViewById(R.id.domain_settings_dom_storage_switch);
-        Switch formDataSwitch = view.findViewById(R.id.domain_settings_form_data_switch);
+        Switch formDataSwitch = view.findViewById(R.id.domain_settings_form_data_switch);  // Form data can be removed once the minimum API >= 26.
         Switch easyListSwitch = view.findViewById(R.id.domain_settings_easylist_switch);
         Switch easyPrivacySwitch = view.findViewById(R.id.domain_settings_easyprivacy_switch);
         Switch fanboysAnnoyanceSwitch = view.findViewById(R.id.domain_settings_fanboys_annoyance_list_switch);
         Switch fanboysSocialBlockingSwitch = view.findViewById(R.id.domain_settings_fanboys_social_blocking_list_switch);
+        Switch ultraPrivacySwitch = view.findViewById(R.id.domain_settings_ultraprivacy_switch);
+        Switch blockAllThirdPartyRequestsSwitch = view.findViewById(R.id.domain_settings_block_all_third_party_requests_switch);
         Spinner userAgentSpinner = view.findViewById(R.id.domain_settings_user_agent_spinner);
         EditText customUserAgentEditText = view.findViewById(R.id.domain_settings_custom_user_agent_edittext);
         Spinner fontSizeSpinner = view.findViewById(R.id.domain_settings_font_size_spinner);
+        Spinner swipeToRefreshSpinner = view.findViewById(R.id.domain_settings_swipe_to_refresh_spinner);
         Spinner displayWebpageImagesSpinner = view.findViewById(R.id.domain_settings_display_webpage_images_spinner);
         Spinner nightModeSpinner = view.findViewById(R.id.domain_settings_night_mode_spinner);
         Switch pinnedSslCertificateSwitch = view.findViewById(R.id.domain_settings_pinned_ssl_certificate_switch);
@@ -653,13 +658,16 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         boolean firstPartyCookiesEnabled = firstPartyCookiesSwitch.isChecked();
         boolean thirdPartyCookiesEnabled = thirdPartyCookiesSwitch.isChecked();
         boolean domStorageEnabled  = domStorageSwitch.isChecked();
-        boolean formDataEnabled = formDataSwitch.isChecked();
+        boolean formDataEnabled = formDataSwitch.isChecked();  // Form data can be removed once the minimum API >= 26.
         boolean easyListEnabled = easyListSwitch.isChecked();
         boolean easyPrivacyEnabled = easyPrivacySwitch.isChecked();
         boolean fanboysAnnoyanceEnabled = fanboysAnnoyanceSwitch.isChecked();
         boolean fanboysSocialBlockingEnabled = fanboysSocialBlockingSwitch.isChecked();
+        boolean ultraPrivacyEnabled = ultraPrivacySwitch.isChecked();
+        boolean blockAllThirdPartyRequests = blockAllThirdPartyRequestsSwitch.isChecked();
         int userAgentPosition = userAgentSpinner.getSelectedItemPosition();
         int fontSizePosition = fontSizeSpinner.getSelectedItemPosition();
+        int swipeToRefreshInt = swipeToRefreshSpinner.getSelectedItemPosition();
         int displayWebpageImagesInt = displayWebpageImagesSpinner.getSelectedItemPosition();
         int nightModeInt = nightModeSpinner.getSelectedItemPosition();
         boolean pinnedSslCertificate = pinnedSslCertificateSwitch.isChecked();
@@ -694,8 +702,8 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         if (savedSslCertificateRadioButton.isChecked()) {  // The current certificate is being used.
             // Update the database except for the certificate.
             domainsDatabaseHelper.updateDomainExceptCertificate(DomainsActivity.currentDomainDatabaseId, domainNameString, javaScriptEnabled, firstPartyCookiesEnabled, thirdPartyCookiesEnabled,
-                    domStorageEnabled, formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, userAgentName, fontSizeInt, displayWebpageImagesInt,
-                    nightModeInt, pinnedSslCertificate);
+                    domStorageEnabled, formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, ultraPrivacyEnabled, blockAllThirdPartyRequests,
+                    userAgentName, fontSizeInt, swipeToRefreshInt, nightModeInt, displayWebpageImagesInt, pinnedSslCertificate);
         } else if (currentWebsiteCertificateRadioButton.isChecked()) {  // The certificate is being updated with the current website certificate.
             // Get the current website SSL certificate.
             SslCertificate currentWebsiteSslCertificate = MainWebViewActivity.sslCertificate;
@@ -712,14 +720,15 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
 
             // Update the database.
             domainsDatabaseHelper.updateDomainWithCertificate(currentDomainDatabaseId, domainNameString, javaScriptEnabled, firstPartyCookiesEnabled, thirdPartyCookiesEnabled, domStorageEnabled,
-                    formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, userAgentName, fontSizeInt, displayWebpageImagesInt, nightModeInt,
-                    pinnedSslCertificate, issuedToCommonName, issuedToOrganization, issuedToOrganizationalUnit, issuedByCommonName, issuedByOrganization, issuedByOrganizationalUnit, startDateLong, endDateLong);
+                    formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, ultraPrivacyEnabled, blockAllThirdPartyRequests, userAgentName, fontSizeInt,
+                    swipeToRefreshInt, nightModeInt, displayWebpageImagesInt, pinnedSslCertificate, issuedToCommonName, issuedToOrganization, issuedToOrganizationalUnit, issuedByCommonName,
+                    issuedByOrganization, issuedByOrganizationalUnit, startDateLong, endDateLong);
 
         } else {  // No certificate is selected.
             // Update the database, with PINNED_SSL_CERTIFICATE set to false.
             domainsDatabaseHelper.updateDomainExceptCertificate(currentDomainDatabaseId, domainNameString, javaScriptEnabled, firstPartyCookiesEnabled, thirdPartyCookiesEnabled, domStorageEnabled,
-                    formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, userAgentName, fontSizeInt, displayWebpageImagesInt, nightModeInt,
-                    false);
+                    formDataEnabled, easyListEnabled, easyPrivacyEnabled, fanboysAnnoyanceEnabled, fanboysSocialBlockingEnabled, ultraPrivacyEnabled, blockAllThirdPartyRequests, userAgentName, fontSizeInt,
+                    swipeToRefreshInt, nightModeInt, displayWebpageImagesInt,false);
         }
     }