]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/activities/DomainsActivity.java
Track URL loading by tab.
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / activities / DomainsActivity.java
index d54499a218466e98adfe500447035a14ffa68760..26fbd91c8037def37ebfff2f221c23ba21412334 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,18 @@ 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);
 
         // Set the content view.
         setContentView(R.layout.domains_coordinatorlayout);
@@ -153,7 +155,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,7 +170,7 @@ 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);
@@ -431,7 +432,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.
@@ -535,11 +536,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);
@@ -723,18 +724,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 +757,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 +829,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.