]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/commitdiff
Create a Content URL encryption dialog. https://redmine.stoutner.com/issues/672
authorSoren Stoutner <soren@stoutner.com>
Fri, 16 Jun 2023 19:10:34 +0000 (12:10 -0700)
committerSoren Stoutner <soren@stoutner.com>
Fri, 16 Jun 2023 19:10:34 +0000 (12:10 -0700)
app/src/main/java/com/stoutner/privacybrowser/dialogs/ViewSslCertificateDialog.kt
app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.kt
app/src/main/res/layout/unencrypted_website_dialog.xml
app/src/main/res/values/strings.xml

index 98ad3fa56d959972164618485c2ee6d12991d4f9..fd269459690398cd0b53dd9d2dbbb649cda45ff8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2016-2023 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2016-2023 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -46,19 +46,20 @@ import java.util.Calendar
 import java.util.Date
 
 // Define the private class constants.
-private const val DOMAIN = "domain"
-private const val END_DATE = "end_date"
-private const val FAVORITE_ICON_BYTE_ARRAY = "favorite_icon_byte_array"
-private const val HAS_SSL_CERTIFICATE = "has_ssl_certificate"
-private const val IP_ADDRESSES = "ip_addresses"
-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 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 START_DATE = "start_date"
-private const val WEBVIEW_FRAGMENT_ID = "webview_fragment_id"
+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() {
     companion object {
@@ -105,6 +106,7 @@ class ViewSslCertificateDialog : DialogFragment() {
     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.
@@ -130,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!!
@@ -154,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) {
@@ -331,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()
@@ -357,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) {
@@ -372,4 +388,4 @@ class ViewSslCertificateDialog : DialogFragment() {
             savedInstanceState.putLong(END_DATE, endDate.time)
         }
     }
-}
\ No newline at end of file
+}
index 397dad08fc69a281065dfd8e00e42da1aa7a304e..190912553e410c054d26f0ee4c21e67f0f63a2b1 100644 (file)
@@ -607,7 +607,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
             fragmentRestarted = false
 
             // Set the scroll position.
-            listView.smoothScrollBy(0, scrollY)
+            listView.post { listView.smoothScrollBy(0, scrollY) }
         }
     }
 
index 9ad2b881bdba3311c44f62ae4abdf878b75526d4..92e8e053a017cc76a9cc5c43922e73e62ec05c59 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 
 <!--
-  Copyright 2016-2017,2020,2022 Soren Stoutner <soren@stoutner.com>.
+  Copyright 2016-2017,2020,2022-2023 Soren Stoutner <soren@stoutner.com>.
 
   This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
 
@@ -22,6 +22,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_height="match_parent"
     android:layout_width="match_parent"
-    android:padding="15dp"
+    android:padding="22dp"
     android:textColor="@color/red_text"
+    android:textSize="17sp"
     android:text="@string/no_ssl_certificate" />
index a759feb8505335041c916b4627d72dc9e9cd4c42..bc89d4e3f48c972af885802900d2982b78ff9391 100644 (file)
@@ -74,6 +74,8 @@
     <string name="view_ssl_certificate">View SSL Certificate</string>
     <string name="unencrypted_website">Unencrypted Website</string>
     <string name="no_ssl_certificate">Communication with this website is not encrypted. This allows third parties to intercept information, track your browsing, and inject malicious content.</string>
+    <string name="content_url">Content URL</string>
+    <string name="content_url_message">Content URLs are data loaded from other apps on your device.</string>
     <string name="ssl_certificate">SSL Certificate</string>
     <string name="close">Close</string>
     <string name="domain">Domain</string>