X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fdialogs%2FViewSslCertificateDialog.java;h=84848c6bea88a25a24a6a3f3a1e13bd09eb4bfc0;hp=d1ff91c2019f2b0d2303843d8b2721bebf0d5227;hb=f3b9172adedd74f705ddc0beac80798ae84f2920;hpb=9d5e4c56326502b6b74e8f3e463275f5c1e176cc diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java index d1ff91c2..84848c6b 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.java @@ -1,5 +1,5 @@ /* - * Copyright © 2016-2019 Soren Stoutner . + * Copyright © 2016-2020 Soren Stoutner . * * This file is part of Privacy Browser . * @@ -20,8 +20,11 @@ package com.stoutner.privacybrowser.dialogs; import android.annotation.SuppressLint; -import android.app.AlertDialog; +import android.app.Activity; import android.app.Dialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.Configuration; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; @@ -36,7 +39,9 @@ import android.view.WindowManager; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; // The AndroidX dialog fragment must be used or an error is produced on API <=22. +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; +import androidx.preference.PreferenceManager; import com.stoutner.privacybrowser.activities.MainWebViewActivity; import com.stoutner.privacybrowser.R; @@ -47,8 +52,6 @@ import java.text.DateFormat; import java.util.Calendar; import java.util.Date; -// `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`. -@SuppressLint("InflateParams") public class ViewSslCertificateDialog extends DialogFragment { public static ViewSslCertificateDialog displayDialog(long webViewFragmentId) { // Create an arguments bundle. @@ -67,19 +70,26 @@ public class ViewSslCertificateDialog extends DialogFragment { return viewSslCertificateDialog; } + // `@SuppressLint("InflateParams")` removes the warning about using `null` as the parent view group when inflating the alert dialog. + @SuppressLint("InflateParams") + @Override @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { - // Remove the incorrect lint warning below that the activity might be null. - assert getActivity() != null; + // Get a handle for the activity and the context. + Activity activity = requireActivity(); + Context context = requireContext(); // Get the activity's layout inflater. - LayoutInflater layoutInflater = getActivity().getLayoutInflater(); + LayoutInflater layoutInflater = activity.getLayoutInflater(); - // Remove the incorrect lint warning below that `getArguments().getLong()` might be null. - assert getArguments() != null; + // Get the arguments. + Bundle arguments = getArguments(); + + // Remove the incorrect lint warning below that the arguments might be 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); @@ -93,41 +103,41 @@ public class ViewSslCertificateDialog extends DialogFragment { // Get a handle for the current WebView. NestedScrollWebView nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview); - // Use a builder to create the alert dialog. - AlertDialog.Builder dialogBuilder; - // Set the style according to the theme. - if (MainWebViewActivity.darkTheme) { - dialogBuilder = new AlertDialog.Builder(getActivity(), R.style.PrivacyBrowserAlertDialogDark); - } else { - dialogBuilder = new AlertDialog.Builder(getActivity(), R.style.PrivacyBrowserAlertDialogLight); - } + // Use a builder to create the alert dialog. + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context, R.style.PrivacyBrowserAlertDialog); // Create a drawable version of the favorite icon. - Drawable favoriteIconDrawable = new BitmapDrawable(getResources(), MainWebViewActivity.favoriteIconBitmap); + Drawable favoriteIconDrawable = new BitmapDrawable(getResources(), nestedScrollWebView.getFavoriteOrDefaultIcon()); // Set the icon. dialogBuilder.setIcon(favoriteIconDrawable); - // Set a listener on the negative button. Using `null` as the listener closes the dialog without doing anything else. + // Set the close button listener. Using `null` as the listener closes the dialog without doing anything else. dialogBuilder.setNegativeButton(R.string.close, null); // Get the SSL certificate. SslCertificate sslCertificate = nestedScrollWebView.getCertificate(); + // Get a handle for the shared preferences. + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); + + // Get the screenshot preference. + boolean allowScreenshots = sharedPreferences.getBoolean("allow_screenshots", false); + // Check to see if the website is encrypted. if (sslCertificate == null) { // The website is not encrypted. // Set the title. dialogBuilder.setTitle(R.string.unencrypted_website); - // Set the Layout. The parent view is `null` because it will be assigned by `AlertDialog`. - dialogBuilder.setView(layoutInflater.inflate(R.layout.unencrypted_website, null)); + // Set the Layout. The parent view is `null` because it will be assigned by the alert dialog. + dialogBuilder.setView(layoutInflater.inflate(R.layout.unencrypted_website_dialog, null)); // Create an alert dialog from the alert dialog builder. 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; @@ -137,19 +147,18 @@ public class ViewSslCertificateDialog extends DialogFragment { // `onCreateDialog` requires the return of an `AlertDialog`. return alertDialog; - } else { // Display the SSL certificate information // Set the title. dialogBuilder.setTitle(R.string.ssl_certificate); - // Set the layout. The parent view is `null` because it will be assigned by `AlertDialog`. - dialogBuilder.setView(layoutInflater.inflate(R.layout.view_ssl_certificate, null)); + // Set the layout. The parent view is `null` because it will be assigned by the alert dialog. + dialogBuilder.setView(layoutInflater.inflate(R.layout.view_ssl_certificate_dialog, null)); // Create an alert dialog from the builder. 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; @@ -172,6 +181,18 @@ public class ViewSslCertificateDialog extends DialogFragment { TextView startDateTextView = alertDialog.findViewById(R.id.start_date); TextView endDateTextView = alertDialog.findViewById(R.id.end_date); + // Remove the incorrect warning that the views might be null. + assert domainTextView != null; + assert ipAddressesTextView != null; + assert issuedToCNameTextView != null; + assert issuedToONameTextView != null; + assert issuedToUNameTextView != null; + assert issuedByCNameTextView != null; + assert issuedByONameTextView != null; + assert issuedByUNameTextView != null; + assert startDateTextView != null; + assert endDateTextView != null; + // Setup the labels. String domainLabel = getString(R.string.domain_label) + " "; String ipAddressesLabel = getString(R.string.ip_addresses) + " "; @@ -182,7 +203,7 @@ public class ViewSslCertificateDialog extends DialogFragment { String endDateLabel = getString(R.string.end_date) + " "; // Convert the formatted URL string to a URI. - Uri uri = Uri.parse(MainWebViewActivity.formattedUrlString); + Uri uri = Uri.parse(nestedScrollWebView.getUrl()); // Extract the domain name from the URI. String domainString = uri.getHost(); @@ -209,19 +230,20 @@ public class ViewSslCertificateDialog extends DialogFragment { SpannableStringBuilder startDateStringBuilder = new SpannableStringBuilder(startDateLabel + DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG).format(startDate)); SpannableStringBuilder endDateStringBuilder = new SpannableStringBuilder(endDateLabel + DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG).format(endDate)); - // Create a red foreground color span. The deprecated `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 `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)); } // Remove the incorrect lint error that `.equals` might produce a NullPointerException.