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=fbc3293d5d072058c25de616e266aa8f10ec08c6;hp=25dd5412f427869f296493a26c4f17823222f2e5;hb=f0393ca22075be3e5fe9199c7db87381256236fa;hpb=ff636c77836983a078f33e60616204518dab61d1 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 25dd5412..fbc3293d 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/dialogs/PinnedMismatchDialog.java +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/PinnedMismatchDialog.java @@ -24,13 +24,14 @@ import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; +import android.content.SharedPreferences; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; 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.preference.PreferenceManager; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.ForegroundColorSpan; @@ -48,7 +49,6 @@ import com.stoutner.privacybrowser.views.NestedScrollWebView; import com.stoutner.privacybrowser.views.WrapVerticalContentViewPager; import com.stoutner.privacybrowser.helpers.DomainsDatabaseHelper; -import java.io.ByteArrayOutputStream; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; @@ -87,22 +87,12 @@ public class PinnedMismatchDialog extends DialogFragment { pinnedMismatchListener = (PinnedMismatchListener) context; } - public static PinnedMismatchDialog displayDialog(long webViewFragmentId, Bitmap favoriteIconBitmap) { - // Create a favorite icon byte array output stream. - ByteArrayOutputStream favoriteIconByteArrayOutputStream = new ByteArrayOutputStream(); - - // Convert the favorite icon to a PNG and place it in the byte array output stream. `0` is for lossless compression (the only option for a PNG). - favoriteIconBitmap.compress(Bitmap.CompressFormat.PNG, 0, favoriteIconByteArrayOutputStream); - - // Convert the byte array output stream to a byte array. - byte[] favoriteIconByteArray = favoriteIconByteArrayOutputStream.toByteArray(); - + public static PinnedMismatchDialog displayDialog(long webViewFragmentId) { // Create an arguments bundle. Bundle argumentsBundle = new Bundle(); - // Store the variables in the bundle. + // Store the WebView fragment ID in the bundle. argumentsBundle.putLong("webview_fragment_id", webViewFragmentId); - argumentsBundle.putByteArray("favorite_icon_byte_array", favoriteIconByteArray); // Create a new instance of the pinned mismatch dialog. PinnedMismatchDialog pinnedMismatchDialog = new PinnedMismatchDialog(); @@ -128,15 +118,6 @@ public class PinnedMismatchDialog extends DialogFragment { // Get the current position of this WebView fragment. int webViewPosition = MainWebViewActivity.webViewPagerAdapter.getPositionForId(arguments.getLong("webview_fragment_id")); - // Get the favorite icon byte array. - byte[] favoriteIconByteArray = arguments.getByteArray("favorite_icon_byte_array"); - - // Remove the incorrect lint warning below that the favorite icon byte array might be null. - assert favoriteIconByteArray != null; - - // Convert the favorite icon byte array to a bitmap. - Bitmap favoriteIconBitmap = BitmapFactory.decodeByteArray(favoriteIconByteArray, 0, favoriteIconByteArray.length); - // Get the WebView tab fragment. WebViewTabFragment webViewTabFragment = MainWebViewActivity.webViewPagerAdapter.getPageFragment(webViewPosition); @@ -152,8 +133,15 @@ public class PinnedMismatchDialog extends DialogFragment { // Use an alert dialog builder to create the alert dialog. AlertDialog.Builder dialogBuilder; + // Get a handle for the shared preferences. + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext()); + + // Get the screenshot and theme preferences. + boolean darkTheme = sharedPreferences.getBoolean("dark_theme", false); + boolean allowScreenshots = sharedPreferences.getBoolean("allow_screenshots", false); + // Set the style according to the theme. - if (MainWebViewActivity.darkTheme) { + if (darkTheme) { // Set the dialog theme. dialogBuilder = new AlertDialog.Builder(getActivity(), R.style.PrivacyBrowserAlertDialogDark); } else { @@ -167,6 +155,9 @@ public class PinnedMismatchDialog extends DialogFragment { // 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); @@ -182,7 +173,7 @@ public class PinnedMismatchDialog extends DialogFragment { // Set the favorite icon as the dialog icon if it exists. if (favoriteIconBitmap.sameAs(defaultFavoriteIconBitmap)) { // There is no website favorite icon. // Set the icon according to the theme. - if (MainWebViewActivity.darkTheme) { + if (darkTheme) { dialogBuilder.setIcon(R.drawable.ssl_certificate_enabled_dark); } else { dialogBuilder.setIcon(R.drawable.ssl_certificate_enabled_light); @@ -211,7 +202,7 @@ public class PinnedMismatchDialog extends DialogFragment { } // 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 (nestedScrollWebView.hasPinnedSslCertificate()) { @@ -260,7 +251,7 @@ public class PinnedMismatchDialog extends DialogFragment { final AlertDialog alertDialog = dialogBuilder.create(); // Disable screenshots if not allowed. - if (!MainWebViewActivity.allowScreenshots) { + if (!allowScreenshots) { // Remove the warning below that `getWindow()` might be null. assert alertDialog.getWindow() != null; @@ -333,8 +324,8 @@ public class PinnedMismatchDialog extends DialogFragment { 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(); @@ -430,6 +421,12 @@ public class PinnedMismatchDialog extends DialogFragment { } } + // Get a handle for the shared preferences. + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext()); + + // Get the screenshot and theme preferences. + boolean darkTheme = sharedPreferences.getBoolean("dark_theme", false); + // 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)); @@ -437,7 +434,7 @@ public class PinnedMismatchDialog extends DialogFragment { ForegroundColorSpan blueColorSpan; // Set the blue color span according to the theme. The deprecated `getResources().getColor` must be used until the minimum API >= 23. - if (MainWebViewActivity.darkTheme) { + if (darkTheme) { //noinspection deprecation blueColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.blue_400)); } else {