X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fdialogs%2FPinnedMismatchDialog.java;h=9036f9cdf4ac1f0f42c40275ba908575f012169c;hp=2d506dc4c304eca6bcb3f4076f45ac2548f33cb8;hb=4ce562261f47e06c454504262a24f61f46bb393d;hpb=6b4312dc0c2d6cb059a0fbe6d4e7cd9317db34b6 diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/PinnedMismatchDialog.java b/app/src/main/java/com/stoutner/privacybrowser/dialogs/PinnedMismatchDialog.java index 2d506dc4..9036f9cd 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/dialogs/PinnedMismatchDialog.java +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/PinnedMismatchDialog.java @@ -1,5 +1,5 @@ /* - * Copyright © 2017-2019 Soren Stoutner . + * Copyright © 2017-2020 Soren Stoutner . * * This file is part of Privacy Browser . * @@ -20,41 +20,54 @@ package com.stoutner.privacybrowser.dialogs; import android.annotation.SuppressLint; -import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.net.http.SslCertificate; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.design.widget.TabLayout; -import android.support.v4.view.PagerAdapter; -// `AppCompatDialogFragment` is used instead of `DialogFragment` to avoid an error on API <=22. -import android.support.v7.app.AppCompatDialogFragment; +import android.preference.PreferenceManager; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.ForegroundColorSpan; -import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.TextView; +import com.google.android.material.tabs.TabLayout; + import com.stoutner.privacybrowser.R; import com.stoutner.privacybrowser.activities.MainWebViewActivity; -import com.stoutner.privacybrowser.definitions.WrapVerticalContentViewPager; +import com.stoutner.privacybrowser.fragments.WebViewTabFragment; +import com.stoutner.privacybrowser.views.NestedScrollWebView; +import com.stoutner.privacybrowser.views.WrapVerticalContentViewPager; import com.stoutner.privacybrowser.helpers.DomainsDatabaseHelper; import java.text.DateFormat; +import java.util.ArrayList; import java.util.Date; -public class PinnedMismatchDialog extends AppCompatDialogFragment { - // Instantiate the class variables. +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.DialogFragment; // The AndroidX dialog fragment must be used or an error is produced on API <=22. +import androidx.viewpager.widget.PagerAdapter; + +public class PinnedMismatchDialog extends DialogFragment { + // The public interface is used to send information back to the parent activity. + public interface PinnedMismatchListener { + void pinnedErrorGoBack(); + } + + // Declare the class variables. private PinnedMismatchListener pinnedMismatchListener; - private LayoutInflater layoutInflater; + private NestedScrollWebView nestedScrollWebView; private String currentSslIssuedToCName; private String currentSslIssuedToOName; private String currentSslIssuedToUName; @@ -63,79 +76,97 @@ public class PinnedMismatchDialog extends AppCompatDialogFragment { private String currentSslIssuedByUName; private Date currentSslStartDate; private Date currentSslEndDate; - private boolean pinnedSslCertificate; - private boolean pinnedIpAddresses; - - // The public interface is used to send information back to the parent activity. - public interface PinnedMismatchListener { - void onPinnedMismatchBack(); - - void onPinnedMismatchProceed(); - } - // Check to make sure that the parent activity implements the listener. - public void onAttach(Context context) { + @Override + public void onAttach(@NonNull Context context) { // Run the default commands. super.onAttach(context); - // Get a handle for `PinnedSslCertificateMismatchListener` from the launching context. + // Get a handle for the listener from the launching context. pinnedMismatchListener = (PinnedMismatchListener) context; } - public static PinnedMismatchDialog displayDialog(boolean pinnedSslCertificate, boolean pinnedIpAddresses) { + public static PinnedMismatchDialog displayDialog(long webViewFragmentId) { // Create an arguments bundle. Bundle argumentsBundle = new Bundle(); - // Store the variables in the bundle. - argumentsBundle.putBoolean("Pinned_SSL_Certificate", pinnedSslCertificate); - argumentsBundle.putBoolean("Pinned_IP_Addresses", pinnedIpAddresses); + // Store the WebView fragment ID in the bundle. + argumentsBundle.putLong("webview_fragment_id", webViewFragmentId); + + // Create a new instance of the pinned mismatch dialog. + PinnedMismatchDialog pinnedMismatchDialog = new PinnedMismatchDialog(); + + // Add the arguments bundle to the new instance. + pinnedMismatchDialog.setArguments(argumentsBundle); - // Add the arguments bundle to this instance of `PinnedMismatchDialog`. - PinnedMismatchDialog thisPinnedMismatchDialog = new PinnedMismatchDialog(); - thisPinnedMismatchDialog.setArguments(argumentsBundle); - return thisPinnedMismatchDialog; + // Make it so. + return pinnedMismatchDialog; } - // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`. + // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`. @SuppressLint("InflateParams") @Override @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { - // Remove the incorrect lint warning that `getActivity()` might be null. - assert getActivity() != null; + // Get the arguments. + Bundle arguments = getArguments(); + + // Remove the incorrect lint warning below that `.getArguments().getInt()` might be null. + assert arguments != null; - // Get the activity's layout inflater. - layoutInflater = getActivity().getLayoutInflater(); + // Get the current position of this WebView fragment. + int webViewPosition = MainWebViewActivity.webViewPagerAdapter.getPositionForId(arguments.getLong("webview_fragment_id")); + + // Get the WebView tab fragment. + WebViewTabFragment webViewTabFragment = MainWebViewActivity.webViewPagerAdapter.getPageFragment(webViewPosition); + + // Get the fragment view. + View fragmentView = webViewTabFragment.getView(); + + // Remove the incorrect lint warning below that the fragment view might be null. + assert fragmentView != null; + + // Get a handle for the current WebView. + nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview); // Use an alert dialog builder to create the alert dialog. - AlertDialog.Builder dialogBuilder; - - // Set the style according to the theme. - if (MainWebViewActivity.darkTheme) { - // Set the dialog theme. - dialogBuilder = new AlertDialog.Builder(getActivity(), R.style.PrivacyBrowserAlertDialogDark); - } else { - // Set the dialog theme. - dialogBuilder = new AlertDialog.Builder(getActivity(), R.style.PrivacyBrowserAlertDialogLight); - } + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog); - // Remove the incorrect lint warning below that `.getArguments.getBoolean()` might be null. - assert getArguments() != null; + // Get the context. + Context context = getContext(); - // Get the variables from the bundle. - pinnedSslCertificate = getArguments().getBoolean("Pinned_SSL_Certificate"); - pinnedIpAddresses = getArguments().getBoolean("Pinned_IP_Addresses"); + // Remove the incorrect lint warning below that the context might be null. + assert context != null; + + // Get the favorite icon. + Bitmap favoriteIconBitmap = nestedScrollWebView.getFavoriteOrDefaultIcon(); + + // Get the default favorite icon drawable. `ContextCompat` must be used until API >= 21. + Drawable defaultFavoriteIconDrawable = ContextCompat.getDrawable(context, R.drawable.world); + + // Cast the favorite icon drawable to a bitmap drawable. + BitmapDrawable defaultFavoriteIconBitmapDrawable = (BitmapDrawable) defaultFavoriteIconDrawable; + + // Remove the incorrect warning below that the favorite icon bitmap drawable might be null. + assert defaultFavoriteIconBitmapDrawable != null; + + // Store the default icon bitmap. + Bitmap defaultFavoriteIconBitmap = defaultFavoriteIconBitmapDrawable.getBitmap(); + + // Set the favorite icon as the dialog icon if it exists. + if (favoriteIconBitmap.sameAs(defaultFavoriteIconBitmap)) { // There is no website favorite icon. + // Get the current theme status. + int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; - if (MainWebViewActivity.favoriteIconBitmap.equals(MainWebViewActivity.favoriteIconDefaultBitmap)) { // Set the icon according to the theme. - if (MainWebViewActivity.darkTheme) { - dialogBuilder.setIcon(R.drawable.ssl_certificate_enabled_dark); + if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) { + dialogBuilder.setIcon(R.drawable.ssl_certificate_enabled_night); } else { - dialogBuilder.setIcon(R.drawable.ssl_certificate_enabled_light); + dialogBuilder.setIcon(R.drawable.ssl_certificate_enabled_day); } - } else { + } else { // There is a favorite icon. // Create a drawable version of the favorite icon. - Drawable favoriteIconDrawable = new BitmapDrawable(getResources(), MainWebViewActivity.favoriteIconBitmap); + Drawable favoriteIconDrawable = new BitmapDrawable(getResources(), favoriteIconBitmap); // Set the icon. dialogBuilder.setIcon(favoriteIconDrawable); @@ -157,58 +188,67 @@ public class PinnedMismatchDialog extends AppCompatDialogFragment { } // Initialize the database handler. The `0` specifies the database version, but that is ignored and set instead using a constant in `DomainsDatabaseHelper`. - DomainsDatabaseHelper domainsDatabaseHelper = new DomainsDatabaseHelper(getContext(), null, null, 0); + DomainsDatabaseHelper domainsDatabaseHelper = new DomainsDatabaseHelper(context, null, null, 0); // Update the SSL certificate if it is pinned. - if (pinnedSslCertificate) { + if (nestedScrollWebView.hasPinnedSslCertificate()) { // Update the pinned SSL certificate in the domain database. - domainsDatabaseHelper.updatePinnedSslCertificate(MainWebViewActivity.domainSettingsDatabaseId, currentSslIssuedToCName, currentSslIssuedToOName, currentSslIssuedToUName, + domainsDatabaseHelper.updatePinnedSslCertificate(nestedScrollWebView.getDomainSettingsDatabaseId(), currentSslIssuedToCName, currentSslIssuedToOName, currentSslIssuedToUName, currentSslIssuedByCName, currentSslIssuedByOName, currentSslIssuedByUName, currentSslStartDateLong, currentSslEndDateLong); - // Update the pinned SSL certificate class variables to match the information that is now in the database. - MainWebViewActivity.pinnedSslIssuedToCName = currentSslIssuedToCName; - MainWebViewActivity.pinnedSslIssuedToOName = currentSslIssuedToOName; - MainWebViewActivity.pinnedSslIssuedToUName = currentSslIssuedToUName; - MainWebViewActivity.pinnedSslIssuedByCName = currentSslIssuedByCName; - MainWebViewActivity.pinnedSslIssuedByOName = currentSslIssuedByOName; - MainWebViewActivity.pinnedSslIssuedByUName = currentSslIssuedByUName; - MainWebViewActivity.pinnedSslStartDate = currentSslStartDate; - MainWebViewActivity.pinnedSslEndDate = currentSslEndDate; + // Update the pinned SSL certificate in the nested scroll WebView. + nestedScrollWebView.setPinnedSslCertificate(currentSslIssuedToCName, currentSslIssuedToOName, currentSslIssuedToUName, currentSslIssuedByCName, currentSslIssuedByOName, currentSslIssuedByUName, + currentSslStartDate, currentSslEndDate); } // Update the IP addresses if they are pinned. - if (pinnedIpAddresses) { + if (nestedScrollWebView.hasPinnedIpAddresses()) { // Update the pinned IP addresses in the domain database. - domainsDatabaseHelper.updatePinnedIpAddresses(MainWebViewActivity.domainSettingsDatabaseId, MainWebViewActivity.currentHostIpAddresses); + domainsDatabaseHelper.updatePinnedIpAddresses(nestedScrollWebView.getDomainSettingsDatabaseId(), nestedScrollWebView.getCurrentIpAddresses()); - // Update the pinned IP addresses class variable to match the information that is now in the database. - MainWebViewActivity.pinnedHostIpAddresses = MainWebViewActivity.currentHostIpAddresses; + // Update the pinned IP addresses in the nested scroll WebView. + nestedScrollWebView.setPinnedIpAddresses(nestedScrollWebView.getCurrentIpAddresses()); } }); - // Setup the negative button. + // Setup the back button. dialogBuilder.setNegativeButton(R.string.back, (DialogInterface dialog, int which) -> { - // Call the `onSslMismatchBack` public interface to send the `WebView` back one page. - pinnedMismatchListener.onPinnedMismatchBack(); + if (nestedScrollWebView.canGoBack()) { // There is a back page in the history. + // Invoke the navigate history listener in the calling activity. These commands cannot be run here because they need access to `applyDomainSettings()`. + pinnedMismatchListener.pinnedErrorGoBack(); + } else { // There are no pages to go back to. + // Load a blank page + nestedScrollWebView.loadUrl(""); + } }); - // Setup the positive button. + // Setup the proceed button. dialogBuilder.setPositiveButton(R.string.proceed, (DialogInterface dialog, int which) -> { - // Call the `onSslMismatchProceed` public interface. - pinnedMismatchListener.onPinnedMismatchProceed(); + // Do not check the pinned information for this domain again until the domain changes. + nestedScrollWebView.setIgnorePinnedDomainInformation(true); }); // Set the title. dialogBuilder.setTitle(R.string.pinned_mismatch); + // Remove the incorrect lint warning below that `getLayoutInflater()` might be null. + assert getActivity() != null; + // Set the layout. The parent view is `null` because it will be assigned by `AlertDialog`. - dialogBuilder.setView(layoutInflater.inflate(R.layout.pinned_mismatch_linearlayout, null)); + // For some reason, `getLayoutInflater()` without `getActivity()` produces an endless loop (probably a bug that will be fixed at some point in the future). + dialogBuilder.setView(getActivity().getLayoutInflater().inflate(R.layout.pinned_mismatch_linearlayout, null)); // Create an alert dialog from the alert dialog builder. final AlertDialog alertDialog = dialogBuilder.create(); + // Get a handle for the shared preferences. + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext()); + + // Get the screenshot preference. + boolean allowScreenshots = sharedPreferences.getBoolean("allow_screenshots", false); + // Disable screenshots if not allowed. - if (!MainWebViewActivity.allowScreenshots) { + if (!allowScreenshots) { // Remove the warning below that `getWindow()` might be null. assert alertDialog.getWindow() != null; @@ -219,15 +259,21 @@ public class PinnedMismatchDialog extends AppCompatDialogFragment { // Show the alert dialog so the items in the layout can be modified. alertDialog.show(); - // Setup the view pager. + // Get a handle for the views. WrapVerticalContentViewPager wrapVerticalContentViewPager = alertDialog.findViewById(R.id.pinned_ssl_certificate_mismatch_viewpager); + TabLayout tabLayout = alertDialog.findViewById(R.id.pinned_ssl_certificate_mismatch_tablayout); + + // Remove the incorrect lint warning below that the views might be null. + assert wrapVerticalContentViewPager != null; + assert tabLayout != null; + + // Set the view pager adapter. wrapVerticalContentViewPager.setAdapter(new pagerAdapter()); - // Setup the tab layout and connect it to the view pager. - TabLayout tabLayout = alertDialog.findViewById(R.id.pinned_ssl_certificate_mismatch_tablayout); + // Connect the tab layout to the view pager. tabLayout.setupWithViewPager(wrapVerticalContentViewPager); - // `onCreateDialog()` requires the return of an `AlertDialog`. + // Return the alert dialog. return alertDialog; } @@ -258,7 +304,7 @@ public class PinnedMismatchDialog extends AppCompatDialogFragment { @NonNull public Object instantiateItem(@NonNull ViewGroup container, int position) { // Inflate the scroll view for this tab. - ViewGroup tabViewGroup = (ViewGroup) layoutInflater.inflate(R.layout.pinned_mismatch_scrollview, container, false); + ViewGroup tabViewGroup = (ViewGroup) getLayoutInflater().inflate(R.layout.pinned_mismatch_scrollview, container, false); // Get handles for the `TextViews`. TextView domainNameTextView = tabViewGroup.findViewById(R.id.domain_name); @@ -281,14 +327,14 @@ public class PinnedMismatchDialog extends AppCompatDialogFragment { String startDateLabel = getString(R.string.start_date) + " "; String endDateLabel = getString(R.string.end_date) + " "; - // Get a URI for the URL. - Uri currentUri = Uri.parse(MainWebViewActivity.formattedUrlString); + // Convert the URL to a URI. + Uri currentUri = Uri.parse(nestedScrollWebView.getUrl()); // Get the current host from the URI. String domainName = currentUri.getHost(); // Get the current website SSL certificate. - SslCertificate sslCertificate = MainWebViewActivity.sslCertificate; + SslCertificate sslCertificate = nestedScrollWebView.getCertificate(); // Extract the individual pieces of information from the current website SSL certificate if it is not null. if (sslCertificate != null) { @@ -310,6 +356,13 @@ public class PinnedMismatchDialog extends AppCompatDialogFragment { currentSslIssuedByUName = ""; } + // Get the pinned SSL certificate. + ArrayList pinnedSslCertificateArrayList = nestedScrollWebView.getPinnedSslCertificate(); + + // Extract the arrays from the array list. + String[] pinnedSslCertificateStringArray = (String[]) pinnedSslCertificateArrayList.get(0); + Date[] pinnedSslCertificateDateArray = (Date[]) pinnedSslCertificateArrayList.get(1); + // Setup the domain name spannable string builder. SpannableStringBuilder domainNameStringBuilder = new SpannableStringBuilder(domainNameLabel + domainName); @@ -327,7 +380,7 @@ public class PinnedMismatchDialog extends AppCompatDialogFragment { // Setup the spannable string builders for each tab. if (position == 0) { // Setup the current settings tab. // Create the string builders. - ipAddressesStringBuilder = new SpannableStringBuilder(ipAddressesLabel + MainWebViewActivity.currentHostIpAddresses); + ipAddressesStringBuilder = new SpannableStringBuilder(ipAddressesLabel + nestedScrollWebView.getCurrentIpAddresses()); issuedToCNameStringBuilder = new SpannableStringBuilder(cNameLabel + currentSslIssuedToCName); issuedToONameStringBuilder = new SpannableStringBuilder(oNameLabel + currentSslIssuedToOName); issuedToUNameStringBuilder = new SpannableStringBuilder(uNameLabel + currentSslIssuedToUName); @@ -349,50 +402,50 @@ public class PinnedMismatchDialog extends AppCompatDialogFragment { } } else { // Setup the pinned settings tab. // Create the string builders. - ipAddressesStringBuilder = new SpannableStringBuilder(ipAddressesLabel + MainWebViewActivity.pinnedHostIpAddresses); - issuedToCNameStringBuilder = new SpannableStringBuilder(cNameLabel + MainWebViewActivity.pinnedSslIssuedToCName); - issuedToONameStringBuilder = new SpannableStringBuilder(oNameLabel + MainWebViewActivity.pinnedSslIssuedToOName); - issuedToUNameStringBuilder = new SpannableStringBuilder(uNameLabel + MainWebViewActivity.pinnedSslIssuedToUName); - issuedByCNameStringBuilder = new SpannableStringBuilder(cNameLabel + MainWebViewActivity.pinnedSslIssuedByCName); - issuedByONameStringBuilder = new SpannableStringBuilder(oNameLabel + MainWebViewActivity.pinnedSslIssuedByOName); - issuedByUNameStringBuilder = new SpannableStringBuilder(uNameLabel + MainWebViewActivity.pinnedSslIssuedByUName); + ipAddressesStringBuilder = new SpannableStringBuilder(ipAddressesLabel + nestedScrollWebView.getPinnedIpAddresses()); + issuedToCNameStringBuilder = new SpannableStringBuilder(cNameLabel + pinnedSslCertificateStringArray[0]); + issuedToONameStringBuilder = new SpannableStringBuilder(oNameLabel + pinnedSslCertificateStringArray[1]); + issuedToUNameStringBuilder = new SpannableStringBuilder(uNameLabel + pinnedSslCertificateStringArray[2]); + issuedByCNameStringBuilder = new SpannableStringBuilder(cNameLabel + pinnedSslCertificateStringArray[3]); + issuedByONameStringBuilder = new SpannableStringBuilder(oNameLabel + pinnedSslCertificateStringArray[4]); + issuedByUNameStringBuilder = new SpannableStringBuilder(uNameLabel + pinnedSslCertificateStringArray[5]); // Set the dates if they aren't `null`. - if (MainWebViewActivity.pinnedSslStartDate == null) { + if (pinnedSslCertificateDateArray[0] == null) { startDateStringBuilder = new SpannableStringBuilder(startDateLabel); } else { - startDateStringBuilder = new SpannableStringBuilder(startDateLabel + DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG) - .format(MainWebViewActivity.pinnedSslStartDate)); + startDateStringBuilder = new SpannableStringBuilder(startDateLabel + DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG).format(pinnedSslCertificateDateArray[0])); } - if (MainWebViewActivity.pinnedSslEndDate == null) { + if (pinnedSslCertificateDateArray[1] == null) { endDateStringBuilder = new SpannableStringBuilder(endDateLabel); } else { - endDateStringBuilder = new SpannableStringBuilder(endDateLabel + DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG).format(MainWebViewActivity.pinnedSslEndDate)); + endDateStringBuilder = new SpannableStringBuilder(endDateLabel + DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG).format(pinnedSslCertificateDateArray[1])); } } - // Create a red foreground color span. The deprecated `getResources().getColor` must be used until the minimum API >= 23. - @SuppressWarnings("deprecation") ForegroundColorSpan redColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.red_a700)); - - // Create a blue foreground color span. + // Define the color spans. ForegroundColorSpan blueColorSpan; + ForegroundColorSpan redColorSpan; - // Set the blue color span according to the theme. The deprecated `getResources().getColor` must be used until the minimum API >= 23. - if (MainWebViewActivity.darkTheme) { - //noinspection deprecation - blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.blue_400)); - } else { - //noinspection deprecation + // Get the current theme status. + int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; + + // Set the color spans according to the theme. The deprecated `getResources()` must be used until the minimum API >= 23. + if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) { blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.blue_700)); + redColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.red_a700)); + } else { + blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.violet_700)); + redColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.red_900)); } // Set the domain name to be blue. domainNameStringBuilder.setSpan(blueColorSpan, domainNameLabel.length(), domainNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // Color coordinate the IP addresses if they are pinned. - if (pinnedIpAddresses) { - if (MainWebViewActivity.currentHostIpAddresses.equals(MainWebViewActivity.pinnedHostIpAddresses)) { + if (nestedScrollWebView.hasPinnedIpAddresses()) { + if (nestedScrollWebView.getCurrentIpAddresses().equals(nestedScrollWebView.getPinnedIpAddresses())) { ipAddressesStringBuilder.setSpan(blueColorSpan, ipAddressesLabel.length(), ipAddressesStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } else { ipAddressesStringBuilder.setSpan(redColorSpan, ipAddressesLabel.length(), ipAddressesStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); @@ -400,50 +453,50 @@ public class PinnedMismatchDialog extends AppCompatDialogFragment { } // Color coordinate the SSL certificate fields if they are pinned. - if (pinnedSslCertificate) { - if (currentSslIssuedToCName.equals(MainWebViewActivity.pinnedSslIssuedToCName)) { + if (nestedScrollWebView.hasPinnedSslCertificate()) { + if (currentSslIssuedToCName.equals(pinnedSslCertificateStringArray[0])) { issuedToCNameStringBuilder.setSpan(blueColorSpan, cNameLabel.length(), issuedToCNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } else { issuedToCNameStringBuilder.setSpan(redColorSpan, cNameLabel.length(), issuedToCNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } - if (currentSslIssuedToOName.equals(MainWebViewActivity.pinnedSslIssuedToOName)) { + if (currentSslIssuedToOName.equals(pinnedSslCertificateStringArray[1])) { issuedToONameStringBuilder.setSpan(blueColorSpan, oNameLabel.length(), issuedToONameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } else { issuedToONameStringBuilder.setSpan(redColorSpan, oNameLabel.length(), issuedToONameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } - if (currentSslIssuedToUName.equals(MainWebViewActivity.pinnedSslIssuedToUName)) { + if (currentSslIssuedToUName.equals(pinnedSslCertificateStringArray[2])) { issuedToUNameStringBuilder.setSpan(blueColorSpan, uNameLabel.length(), issuedToUNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } else { issuedToUNameStringBuilder.setSpan(redColorSpan, uNameLabel.length(), issuedToUNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } - if (currentSslIssuedByCName.equals(MainWebViewActivity.pinnedSslIssuedByCName)) { + if (currentSslIssuedByCName.equals(pinnedSslCertificateStringArray[3])) { issuedByCNameStringBuilder.setSpan(blueColorSpan, cNameLabel.length(), issuedByCNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } else { issuedByCNameStringBuilder.setSpan(redColorSpan, cNameLabel.length(), issuedByCNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } - if (currentSslIssuedByOName.equals(MainWebViewActivity.pinnedSslIssuedByOName)) { + if (currentSslIssuedByOName.equals(pinnedSslCertificateStringArray[4])) { issuedByONameStringBuilder.setSpan(blueColorSpan, oNameLabel.length(), issuedByONameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } else { issuedByONameStringBuilder.setSpan(redColorSpan, oNameLabel.length(), issuedByONameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } - if (currentSslIssuedByUName.equals(MainWebViewActivity.pinnedSslIssuedByUName)) { + if (currentSslIssuedByUName.equals(pinnedSslCertificateStringArray[5])) { issuedByUNameStringBuilder.setSpan(blueColorSpan, uNameLabel.length(), issuedByUNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } else { issuedByUNameStringBuilder.setSpan(redColorSpan, uNameLabel.length(), issuedByUNameStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } - if ((currentSslStartDate != null) && currentSslStartDate.equals(MainWebViewActivity.pinnedSslStartDate)) { + if ((currentSslStartDate != null) && currentSslStartDate.equals(pinnedSslCertificateDateArray[0])) { startDateStringBuilder.setSpan(blueColorSpan, startDateLabel.length(), startDateStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } else { startDateStringBuilder.setSpan(redColorSpan, startDateLabel.length(), startDateStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } - if ((currentSslEndDate != null) && currentSslEndDate.equals(MainWebViewActivity.pinnedSslEndDate)) { + if ((currentSslEndDate != null) && currentSslEndDate.equals(pinnedSslCertificateDateArray[1])) { endDateStringBuilder.setSpan(blueColorSpan, endDateLabel.length(), endDateStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } else { endDateStringBuilder.setSpan(redColorSpan, endDateLabel.length(), endDateStringBuilder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); @@ -469,4 +522,4 @@ public class PinnedMismatchDialog extends AppCompatDialogFragment { return tabViewGroup; } } -} +} \ No newline at end of file