Add scary warning

This commit is contained in:
Philipp Heckel 2026-01-09 09:55:57 -05:00
parent 467fdb2328
commit c1a04bee83
4 changed files with 65 additions and 8 deletions

View file

@ -62,6 +62,7 @@ class TrustedCertificateFragment : DialogFragment() {
// Page 2 views
private lateinit var page2Layout: LinearLayout
private lateinit var securityWarningLayout: LinearLayout
private lateinit var descriptionText: TextView
private lateinit var warningText: TextView
private lateinit var baseUrlValueLabel: TextView
@ -174,6 +175,7 @@ class TrustedCertificateFragment : DialogFragment() {
// Page 2 views
page2Layout = view.findViewById(R.id.trusted_certificate_page2)
securityWarningLayout = view.findViewById(R.id.trusted_certificate_security_warning)
descriptionText = view.findViewById(R.id.trusted_certificate_description)
warningText = view.findViewById(R.id.trusted_certificate_warning)
baseUrlValueLabel = view.findViewById(R.id.trusted_certificate_base_url_value_label)
@ -196,7 +198,7 @@ class TrustedCertificateFragment : DialogFragment() {
}
private fun setupUnknownMode() {
// Go directly to page 2 with details
// Go directly to page 2 with details and security warning
toolbar.setTitle(R.string.trusted_certificate_dialog_title_unknown)
toolbar.setNavigationIcon(R.drawable.ic_close_white_24dp)
page1Layout.isVisible = false
@ -205,8 +207,9 @@ class TrustedCertificateFragment : DialogFragment() {
trustMenuItem.isVisible = true
deleteMenuItem.isVisible = false
descriptionText.setText(R.string.trusted_certificate_dialog_description_unknown)
descriptionText.isVisible = true
// Show security warning banner instead of description
securityWarningLayout.isVisible = true
descriptionText.isVisible = false
baseUrlValueLabel.isVisible = true
baseUrlValueText.isVisible = true
baseUrlValueText.text = baseUrl

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF8C00"
android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
</vector>

View file

@ -96,7 +96,50 @@
android:orientation="vertical"
android:visibility="gone">
<!-- Description (shown in ADD and UNKNOWN modes) -->
<!-- Security warning banner (UNKNOWN mode only) -->
<LinearLayout
android:id="@+id/trusted_certificate_security_warning"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:paddingTop="24dp"
android:paddingBottom="8dp"
android:visibility="gone">
<ImageView
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/ic_warning_amber_24dp"
android:importantForAccessibility="no" />
<TextView
android:id="@+id/trusted_certificate_security_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/trusted_certificate_dialog_security_title"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="@android:color/holo_orange_dark"
android:gravity="center"
android:paddingStart="4dp"
android:paddingEnd="4dp"
android:layout_marginTop="12dp" />
<TextView
android:id="@+id/trusted_certificate_security_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/trusted_certificate_dialog_security_description"
android:textSize="14sp"
android:gravity="center"
android:paddingStart="4dp"
android:paddingEnd="4dp"
android:layout_marginTop="8dp" />
</LinearLayout>
<!-- Description (shown in ADD mode) -->
<TextView
android:id="@+id/trusted_certificate_description"
android:layout_width="match_parent"

View file

@ -431,7 +431,7 @@
<string name="settings_advanced_certificates_trusted_item_summary">%1$s, expires %2$s</string>
<string name="settings_advanced_certificates_trusted_item_summary_expired">%1$s, expired</string>
<string name="settings_advanced_certificates_trusted_add_title">Add a trusted certificate</string>
<string name="settings_advanced_certificates_trusted_add_summary">Import a certificate into the trust store (PEM). HTTPS and WebSocket connections will trust this certificate.</string>
<string name="settings_advanced_certificates_trusted_add_summary">Import a certificate into the trust store (PEM). When connecting to the specified ntfy server, this certificate will be trusted.</string>
<string name="settings_advanced_certificates_client_header">Client certificates (mTLS)</string>
<string name="settings_advanced_certificates_client_item_summary">Client certificate, issued by %1$s\nExpires %2$s, used by %3$s</string>
<string name="settings_advanced_certificates_client_item_summary_expired">Client certificate, issued by %1$s\nExpired, used by %2$s</string>
@ -501,11 +501,12 @@
<!-- Trusted certificate dialog (TrustedCertificateFragment) -->
<string name="trusted_certificate_dialog_title">Certificate details</string>
<string name="trusted_certificate_dialog_title_unknown">Unknown certificate</string>
<string name="trusted_certificate_dialog_title_unknown">Security warning</string>
<string name="trusted_certificate_dialog_title_add">Add trusted certificate</string>
<string name="trusted_certificate_dialog_description">The server\'s certificate could not be verified. Review the details below before trusting.</string>
<string name="trusted_certificate_dialog_description_unknown">The server\'s certificate could not be verified. Review the details below before trusting.</string>
<string name="trusted_certificate_dialog_description_add">You\'ve selected a certificate file. Please review the details below before adding it to your trusted certificates.</string>
<string name="trusted_certificate_dialog_security_title">Your connection is not private</string>
<string name="trusted_certificate_dialog_security_description">Attackers might be trying to steal your information. You should not proceed unless you know why this certificate is not trusted.</string>
<string name="trusted_certificate_dialog_description_add">You\'ve selected a certificate file. Review the details below before adding it to your trusted certificates.</string>
<string name="trusted_certificate_dialog_description_page1">Enter the service URL that this certificate should be pinned to. The certificate will only be trusted for this URL.</string>
<string name="trusted_certificate_dialog_base_url_hint">Service URL</string>
<string name="trusted_certificate_dialog_base_url_placeholder">https://ntfy.example.com</string>