X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fdialogs%2FViewSslCertificateDialog.kt;h=04cdad8dd3b292555970cacd612f6986a34d6831;hp=793c50bcf3c07e4e75830d524bb98c6f799dedb6;hb=HEAD;hpb=aba828cabddd0a277271c90816b50292bb64baf1 diff --git a/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.kt b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.kt index 793c50bc..fd269459 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.kt @@ -1,5 +1,5 @@ /* - * Copyright © 2016-2022 Soren Stoutner . + * Copyright 2016-2023 Soren Stoutner . * * This file is part of Privacy Browser Android . * @@ -20,7 +20,6 @@ package com.stoutner.privacybrowser.dialogs import android.app.Dialog -import android.content.res.Configuration import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.drawable.BitmapDrawable @@ -46,43 +45,24 @@ import java.text.DateFormat import java.util.Calendar import java.util.Date -// Define the class constants. -private const val WEBVIEW_FRAGMENT_ID = "webview_fragment_id" -private const val FAVORITE_ICON_BYTE_ARRAY = "favorite_icon_byte_array" -private const val HAS_SSL_CERTIFICATE = "has_ssl_certificate" -private const val DOMAIN = "domain" -private const val IP_ADDRESSES = "ip_addresses" -private const val ISSUED_TO_CNAME = "issued_to_cname" -private const val ISSUED_TO_ONAME = "issued_to_oname" -private const val ISSUED_TO_UNAME = "issued_to_uname" -private const val ISSUED_BY_CNAME = "issued_by_cname" -private const val ISSUED_BY_ONAME = "issued_by_oname" -private const val ISSUED_BY_UNAME = "issued_by_uname" -private const val START_DATE = "start_date" -private const val END_DATE = "end_date" +// Define the private class constants. +private const val DOMAIN = "A" +private const val END_DATE = "B" +private const val FAVORITE_ICON_BYTE_ARRAY = "C" +private const val HAS_SSL_CERTIFICATE = "D" +private const val IP_ADDRESSES = "E" +private const val ISSUED_BY_CNAME = "F" +private const val ISSUED_BY_ONAME = "G" +private const val ISSUED_BY_UNAME = "H" +private const val ISSUED_TO_CNAME = "I" +private const val ISSUED_TO_ONAME = "J" +private const val ISSUED_TO_UNAME = "K" +private const val START_DATE = "L" +private const val WEBVIEW_FRAGMENT_ID = "M" +private const val URL = "N" class ViewSslCertificateDialog : DialogFragment() { - // Define the class variables. - private var hasSslCertificate: Boolean = false - - // Declare the class variables. - private lateinit var domainString: String - private lateinit var ipAddresses: String - private lateinit var issuedToCName: String - private lateinit var issuedToOName: String - private lateinit var issuedToUName: String - private lateinit var issuedByCName: String - private lateinit var issuedByOName: String - private lateinit var issuedByUName: String - private lateinit var startDate: Date - private lateinit var endDate: Date - - // Declare the class views. - private lateinit var nestedScrollWebView: NestedScrollWebView - companion object { - // `@JvmStatic` will no longer be required once all the code has transitioned to Kotlin. - @JvmStatic fun displayDialog(webViewFragmentId: Long, favoriteIconBitmap: Bitmap): ViewSslCertificateDialog { // Create an arguments bundle. val argumentsBundle = Bundle() @@ -111,6 +91,23 @@ class ViewSslCertificateDialog : DialogFragment() { } } + // Define the class variables. + private var hasSslCertificate: Boolean = false + + // Declare the class variables. + private lateinit var domainString: String + private lateinit var endDate: Date + private lateinit var ipAddresses: String + private lateinit var issuedByCName: String + private lateinit var issuedByOName: String + private lateinit var issuedByUName: String + private lateinit var issuedToCName: String + private lateinit var issuedToOName: String + private lateinit var issuedToUName: String + private lateinit var nestedScrollWebView: NestedScrollWebView + private lateinit var startDate: Date + private lateinit var urlString: String + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { // Use a builder to create the alert dialog. val dialogBuilder = AlertDialog.Builder(requireContext(), R.style.PrivacyBrowserAlertDialog) @@ -118,10 +115,10 @@ class ViewSslCertificateDialog : DialogFragment() { // Populate the class variables. if (savedInstanceState == null) { // The dialog is starting for the first time. // Get the current position of this WebView fragment. - val webViewPosition = MainWebViewActivity.webViewPagerAdapter.getPositionForId(requireArguments().getLong(WEBVIEW_FRAGMENT_ID)) + val webViewPosition = MainWebViewActivity.webViewStateAdapter!!.getPositionForId(requireArguments().getLong(WEBVIEW_FRAGMENT_ID)) // Get the WebView tab fragment. - val webViewTabFragment = MainWebViewActivity.webViewPagerAdapter.getPageFragment(webViewPosition) + val webViewTabFragment = MainWebViewActivity.webViewStateAdapter!!.getPageFragment(webViewPosition) // Get the fragment view. val fragmentView = webViewTabFragment.requireView() @@ -135,10 +132,13 @@ class ViewSslCertificateDialog : DialogFragment() { // Store the status of the SSL certificate. hasSslCertificate = sslCertificate != null + // Store the URL string. + urlString = nestedScrollWebView.currentUrl + // Populate the certificate class variables if the webpage has an SSL certificate. if (hasSslCertificate) { // Convert the URL to a URI. - val uri = Uri.parse(nestedScrollWebView.url) + val uri = Uri.parse(nestedScrollWebView.currentUrl) // Extract the domain name from the URI. domainString = uri.host!! @@ -159,6 +159,7 @@ class ViewSslCertificateDialog : DialogFragment() { } else { // The dialog has been restarted. // Get the data from the saved instance state. hasSslCertificate = savedInstanceState.getBoolean(HAS_SSL_CERTIFICATE) + urlString = savedInstanceState.getString(URL)!! // Populate the certificate class variables if the webpage has an SSL certificate. if (hasSslCertificate) { @@ -230,13 +231,13 @@ class ViewSslCertificateDialog : DialogFragment() { val endDateTextView = alertDialog.findViewById(R.id.end_date)!! // Setup the labels. - val domainLabel = getString(R.string.domain_label) + " " - val ipAddressesLabel = getString(R.string.ip_addresses) + " " - val cNameLabel = getString(R.string.common_name) + " " - val oNameLabel = getString(R.string.organization) + " " - val uNameLabel = getString(R.string.organizational_unit) + " " - val startDateLabel = getString(R.string.start_date) + " " - val endDateLabel = getString(R.string.end_date) + " " + val domainLabel = getString(R.string.domain_label) + val ipAddressesLabel = getString(R.string.ip_addresses) + val cNameLabel = getString(R.string.common_name) + val oNameLabel = getString(R.string.organization) + val uNameLabel = getString(R.string.organizational_unit) + val startDateLabel = getString(R.string.start_date) + val endDateLabel = getString(R.string.end_date) // Create spannable string builders for each text view that needs multiple colors of text. val domainStringBuilder = SpannableStringBuilder(domainLabel + domainString) @@ -251,24 +252,8 @@ class ViewSslCertificateDialog : DialogFragment() { val endDateStringBuilder = SpannableStringBuilder(endDateLabel + DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG).format(endDate)) // Define the color spans. - val blueColorSpan: ForegroundColorSpan - val redColorSpan: ForegroundColorSpan - - // Get the current theme status. - val currentThemeStatus = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK - - // Set the color spans according to the theme. The deprecated `getColor()` must be used until the minimum API >= 23. - if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) { - @Suppress("DEPRECATION") - blueColorSpan = ForegroundColorSpan(resources.getColor(R.color.blue_700)) - @Suppress("DEPRECATION") - redColorSpan = ForegroundColorSpan(resources.getColor(R.color.red_a700)) - } else { - @Suppress("DEPRECATION") - blueColorSpan = ForegroundColorSpan(resources.getColor(R.color.violet_700)) - @Suppress("DEPRECATION") - redColorSpan = ForegroundColorSpan(resources.getColor(R.color.red_900)) - } + val blueColorSpan = ForegroundColorSpan(requireContext().getColor(R.color.alt_blue_text)) + val redColorSpan = ForegroundColorSpan(requireContext().getColor(R.color.red_text)) // Format the domain string and issued to CName colors. if (domainString == issuedToCName) { // The domain and issued to CName match. @@ -352,11 +337,20 @@ class ViewSslCertificateDialog : DialogFragment() { // Return the alert dialog. return alertDialog } else { // The website is not encrypted. - // Set the title. - dialogBuilder.setTitle(R.string.unencrypted_website) - - // Set the Layout. - dialogBuilder.setView(R.layout.unencrypted_website_dialog) + // Populate the dialog according to the URL type. + if (urlString.startsWith("content://")) { // A content URL is loaded. + // Set the title. + dialogBuilder.setTitle(R.string.content_url) + + // Set the message. + dialogBuilder.setMessage(R.string.content_url_message) + } else { // The website is unencrypted. + // Set the title. + dialogBuilder.setTitle(R.string.unencrypted_website) + + // Set the layout. + dialogBuilder.setView(R.layout.unencrypted_website_dialog) + } // Create an alert dialog from the builder. val alertDialog = dialogBuilder.create() @@ -378,6 +372,7 @@ class ViewSslCertificateDialog : DialogFragment() { // Save the common class variables. savedInstanceState.putBoolean(HAS_SSL_CERTIFICATE, hasSslCertificate) + savedInstanceState.putString(URL, urlString) // Save the SSL certificate strings if they exist. if (hasSslCertificate) { @@ -393,4 +388,4 @@ class ViewSslCertificateDialog : DialogFragment() { savedInstanceState.putLong(END_DATE, endDate.time) } } -} \ No newline at end of file +}