]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/activities/DomainsActivity.java
Add a context menu entry to Open in New Tab.
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / activities / DomainsActivity.java
index d54499a218466e98adfe500447035a14ffa68760..520e6969c11b3bd30f3638c42b3787f6988d3926 100644 (file)
@@ -59,7 +59,7 @@ import com.stoutner.privacybrowser.helpers.DomainsDatabaseHelper;
 
 import java.util.Objects;
 
-public class DomainsActivity extends AppCompatActivity implements AddDomainDialog.AddDomainListener {
+public class DomainsActivity extends AppCompatActivity implements AddDomainDialog.AddDomainListener, DomainsListFragment.DismissSnackbarInterface {
     // `twoPanedMode` is public static so it can be accessed from `DomainsListFragment`.  It is also used in `onCreate()`, `onCreateOptionsMenu()`, and `populateDomainsListView()`.
     public static boolean twoPanedMode;
 
@@ -69,17 +69,19 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
     // `deleteMenuItem` is public static so it can be accessed from `DomainsListFragment`.  It is also used in `onCreateOptionsMenu()`, `onOptionsItemSelected()`, and `onBackPressed()`.
     public static MenuItem deleteMenuItem;
 
-    // `undoDeleteSnackbar` is public static so it can be accessed from `DomainsListFragment`.  It is also used in `onOptionsItemSelected()` and `onBackPressed()`.
-    public static Snackbar undoDeleteSnackbar;
-
     // `dismissingSnackbar` is public static so it can be accessed from `DomainsListFragment`.  It is also used in `onOptionsItemSelected()`.
     public static boolean dismissingSnackbar;
 
+    // The SSL certificate and current IP addresses are used to update pinned settings.
+    public static SslCertificate currentSslCertificate;
+    public static String currentIpAddresses;
+
+
     // `closeActivityAfterDismissingSnackbar` is used in `onOptionsItemSelected()`, and `onBackPressed()`.
     private boolean closeActivityAfterDismissingSnackbar;
 
-    // `context` is used in `onCreate()`, `onOptionsItemSelected()`, and `onAddDomain()`.
-    private Context context;
+    // The undelete snackbar is used in `onOptionsItemSelected()` and `onBackPressed()`.
+    private Snackbar undoDeleteSnackbar;
 
     // `domainsDatabaseHelper` is used in `onCreate()`, `saveDomainSettings()`, and `onDestroy()`.
     private static DomainsDatabaseHelper domainsDatabaseHelper;
@@ -134,18 +136,21 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         // Extract the values from `savedInstanceState` if it is not `null`.
         if (savedInstanceState != null) {
             restartAfterRotate = true;
-            domainSettingsDisplayedBeforeRotate = savedInstanceState.getBoolean("domainSettingsDisplayed");
-            domainSettingsDatabaseIdBeforeRotate = savedInstanceState.getInt("domainSettingsDatabaseId");
+            domainSettingsDisplayedBeforeRotate = savedInstanceState.getBoolean("domain_settings_displayed");
+            domainSettingsDatabaseIdBeforeRotate = savedInstanceState.getInt("domain_settings_database_id");
         }
 
         // Get the launching intent
         Intent intent = getIntent();
 
         // Extract the domain to load if there is one.  `-1` is the default value.
-        goDirectlyToDatabaseId = intent.getIntExtra("loadDomain", -1);
+        goDirectlyToDatabaseId = intent.getIntExtra("load_domain", -1);
 
         // Get the status of close-on-back, which is true when the domains activity is called from the options menu.
-        closeOnBack = intent.getBooleanExtra("closeOnBack", false);
+        closeOnBack = intent.getBooleanExtra("close_on_back", false);
+
+        // Get the current URL.
+        String currentUrl = intent.getStringExtra("current_url");
 
         // Set the content view.
         setContentView(R.layout.domains_coordinatorlayout);
@@ -153,7 +158,6 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         // Populate the class variables.
         coordinatorLayout = findViewById(R.id.domains_coordinatorlayout);
         resources = getResources();
-        context = this;
 
         // `SupportActionBar` from `android.support.v7.app.ActionBar` must be used until the minimum API is >= 21.
         final Toolbar toolbar = findViewById(R.id.domains_toolbar);
@@ -169,16 +173,20 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         actionBar.setDisplayHomeAsUpEnabled(true);
 
         // Initialize the database handler.  The `0` specifies the database version, but that is ignored and set instead using a constant in `DomainsDatabaseHelper`.
-        domainsDatabaseHelper = new DomainsDatabaseHelper(context, null, null, 0);
+        domainsDatabaseHelper = new DomainsDatabaseHelper(this, null, null, 0);
 
         // Determine if we are in two pane mode.  `domain_settings_fragment_container` does not exist on devices with a width less than 900dp.
         twoPanedMode = (findViewById(R.id.domain_settings_fragment_container) != null);
 
-        // Configure `addDomainFAB`.
+        // Get a handle for the add domain floating action button.
         addDomainFAB = findViewById(R.id.add_domain_fab);
+
+        // Configure the add domain floating action button.
         addDomainFAB.setOnClickListener((View view) -> {
-            // Show the add domain `AlertDialog`.
-            DialogFragment addDomainDialog = new AddDomainDialog();
+            // Create an add domain dialog.
+            DialogFragment addDomainDialog = AddDomainDialog.addDomain(currentUrl);
+
+            // Show the add domain dialog.
             addDomainDialog.show(getSupportFragmentManager(), resources.getString(R.string.add_domain));
         });
     }
@@ -228,7 +236,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
                 // Show `deleteMenuItem`.
                 deleteMenuItem.setVisible(true);
 
-                // Hide `add_domain_fab`.
+                // Hide the add domain floating action button.
                 addDomainFAB.hide();
 
                 // Display `domainSettingsFragment`.
@@ -259,7 +267,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
                     // Show `deleteMenuItem`.
                     deleteMenuItem.setVisible(true);
 
-                    // Hide `add_domain_fab`.
+                    // Hide the add domain floating action button.
                     addDomainFAB.hide();
 
                     // Display `domainSettingsFragment`.
@@ -325,7 +333,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
                     // Populate the list of domains.  `-1` highlights the first domain if in two-paned mode.  It has no effect in single-paned mode.
                     populateDomainsListView(-1);
 
-                    // Show the add domain FAB.
+                    // Show the add domain floating action button.
                     addDomainFAB.show();
 
                     // Hide the delete menu item.
@@ -369,7 +377,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
                     fragmentManager.beginTransaction().replace(R.id.domains_listview_fragment_container, domainsListFragment).commit();
                     fragmentManager.executePendingTransactions();
 
-                    // Show the add domain FAB.
+                    // Show the add domain floating action button.
                     addDomainFAB.show();
 
                     // Hide `deleteMenuItem`.
@@ -431,7 +439,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
                                             Cursor undoDeleteDomainsCursor = domainsDatabaseHelper.getDomainNameCursorOrderedByDomain();
 
                                             // Setup `domainsCursorAdapter` with `this` context.  `false` disables `autoRequery`.
-                                            CursorAdapter undoDeleteDomainsCursorAdapter = new CursorAdapter(context, undoDeleteDomainsCursor, false) {
+                                            CursorAdapter undoDeleteDomainsCursorAdapter = new CursorAdapter(getApplicationContext(), undoDeleteDomainsCursor, false) {
                                                 @Override
                                                 public View newView(Context context, Cursor cursor, ViewGroup parent) {
                                                     // Inflate the individual item layout.  `false` does not attach it to the root.
@@ -462,7 +470,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
                                             // Display `domainSettingsFragment`.
                                             fragmentManager.beginTransaction().replace(R.id.domains_listview_fragment_container, domainSettingsFragment).commit();
 
-                                            // Hide the add domain FAB.
+                                            // Hide the add domain floating action button.
                                             addDomainFAB.hide();
 
                                             // Show and enable `deleteMenuItem`.
@@ -535,11 +543,11 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
             saveDomainSettings(coordinatorLayout, resources);
 
             // Store `DomainSettingsDisplayed`.
-            outState.putBoolean("domainSettingsDisplayed", true);
-            outState.putInt("domainSettingsDatabaseId", DomainSettingsFragment.databaseId);
+            outState.putBoolean("domain_settings_displayed", true);
+            outState.putInt("domain_settings_database_id", DomainSettingsFragment.databaseId);
         } else {  // `DomainSettingsFragment` is not displayed.
-            outState.putBoolean("domainSettingsDisplayed", false);
-            outState.putInt("domainSettingsDatabaseId", -1);
+            outState.putBoolean("domain_settings_displayed", false);
+            outState.putInt("domain_settings_database_id", -1);
         }
 
         super.onSaveInstanceState(outState);
@@ -586,7 +594,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
             // Populate the list of domains.  `-1` highlights the first domain if in two-paned mode.  It has no effect in single-paned mode.
             populateDomainsListView(-1);
 
-            // Show the add domain FAB.
+            // Show the add domain floating action button.
             addDomainFAB.show();
 
             // Hide the delete menu item.
@@ -624,7 +632,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         if (twoPanedMode) {  // The device in in two-paned mode.
             populateDomainsListView(currentDomainDatabaseId);
         } else {  // The device is in single-paned mode.
-            // Hide the add domain FAB.
+            // Hide the add domain floating action button.
             addDomainFAB.hide();
 
             // Show and enable `deleteMenuItem`.
@@ -723,18 +731,15 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
 
         // Update the pinned SSL certificate if a new one is checked.
         if (currentWebsiteCertificateRadioButton.isChecked()) {
-            // Get the current website SSL certificate.
-            SslCertificate currentWebsiteSslCertificate = MainWebViewActivity.sslCertificate;
-
             // Store the values from the SSL certificate.
-            String issuedToCommonName = currentWebsiteSslCertificate.getIssuedTo().getCName();
-            String issuedToOrganization = currentWebsiteSslCertificate.getIssuedTo().getOName();
-            String issuedToOrganizationalUnit = currentWebsiteSslCertificate.getIssuedTo().getUName();
-            String issuedByCommonName = currentWebsiteSslCertificate.getIssuedBy().getCName();
-            String issuedByOrganization = currentWebsiteSslCertificate.getIssuedBy().getOName();
-            String issuedByOrganizationalUnit = currentWebsiteSslCertificate.getIssuedBy().getUName();
-            long startDateLong = currentWebsiteSslCertificate.getValidNotBeforeDate().getTime();
-            long endDateLong = currentWebsiteSslCertificate.getValidNotAfterDate().getTime();
+            String issuedToCommonName = currentSslCertificate.getIssuedTo().getCName();
+            String issuedToOrganization = currentSslCertificate.getIssuedTo().getOName();
+            String issuedToOrganizationalUnit = currentSslCertificate.getIssuedTo().getUName();
+            String issuedByCommonName = currentSslCertificate.getIssuedBy().getCName();
+            String issuedByOrganization = currentSslCertificate.getIssuedBy().getOName();
+            String issuedByOrganizationalUnit = currentSslCertificate.getIssuedBy().getUName();
+            long startDateLong = currentSslCertificate.getValidNotBeforeDate().getTime();
+            long endDateLong = currentSslCertificate.getValidNotAfterDate().getTime();
 
             // Update the database.
             domainsDatabaseHelper.updatePinnedSslCertificate(currentDomainDatabaseId, issuedToCommonName, issuedToOrganization, issuedToOrganizationalUnit, issuedByCommonName, issuedByOrganization,
@@ -759,7 +764,7 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         Cursor domainsCursor = domainsDatabaseHelper.getDomainNameCursorOrderedByDomain();
 
         // Setup `domainsCursorAdapter` with `this` context.  `false` disables `autoRequery`.
-        CursorAdapter domainsCursorAdapter = new CursorAdapter(context, domainsCursor, false) {
+        CursorAdapter domainsCursorAdapter = new CursorAdapter(getApplicationContext(), domainsCursor, false) {
             @Override
             public View newView(Context context, Cursor cursor, ViewGroup parent) {
                 // Inflate the individual item layout.  `false` does not attach it to the root.
@@ -831,6 +836,15 @@ public class DomainsActivity extends AppCompatActivity implements AddDomainDialo
         }
     }
 
+    @Override
+    public void dismissSnackbar() {
+        // Dismiss the undo delete snackbar if it is shown.
+        if (undoDeleteSnackbar != null && undoDeleteSnackbar.isShown()) {
+            // Dismiss the snackbar.
+            undoDeleteSnackbar.dismiss();
+        }
+    }
+
     @Override
     public void onDestroy() {
         // Close the domains database helper.