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=c8a0a78844ebe4e9427fe3641a15f82171cce8f5;hb=f0393ca22075be3e5fe9199c7db87381256236fa;hpb=9d5e4c56326502b6b74e8f3e463275f5c1e176cc 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 c8a0a788..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,11 +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.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; @@ -51,6 +54,7 @@ import java.util.ArrayList; import java.util.Date; import androidx.annotation.NonNull; +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; @@ -87,7 +91,7 @@ public class PinnedMismatchDialog extends DialogFragment { // Create an arguments bundle. Bundle argumentsBundle = new Bundle(); - // Store the WebView position in the bundle. + // Store the WebView fragment ID in the bundle. argumentsBundle.putLong("webview_fragment_id", webViewFragmentId); // Create a new instance of the pinned mismatch dialog. @@ -105,11 +109,14 @@ public class PinnedMismatchDialog extends DialogFragment { @Override @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { + // Get the arguments. + Bundle arguments = getArguments(); + // Remove the incorrect lint warning below that `.getArguments().getInt()` might be null. - assert getArguments() != null; + assert arguments != null; // Get the current position of this WebView fragment. - int webViewPosition = MainWebViewActivity.webViewPagerAdapter.getPositionForId(getArguments().getLong("webview_fragment_id")); + int webViewPosition = MainWebViewActivity.webViewPagerAdapter.getPositionForId(arguments.getLong("webview_fragment_id")); // Get the WebView tab fragment. WebViewTabFragment webViewTabFragment = MainWebViewActivity.webViewPagerAdapter.getPageFragment(webViewPosition); @@ -126,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 { @@ -135,17 +149,38 @@ public class PinnedMismatchDialog extends DialogFragment { dialogBuilder = new AlertDialog.Builder(getActivity(), R.style.PrivacyBrowserAlertDialogLight); } + // Get the context. + Context context = getContext(); + + // 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 (MainWebViewActivity.favoriteIconBitmap.equals(MainWebViewActivity.favoriteIconDefaultBitmap)) { // There is no favorite icon. + 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); } } 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); @@ -167,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()) { @@ -216,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; @@ -289,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(); @@ -386,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)); @@ -393,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 {