Add a higher level warning for antiquated protocols. https://redmine.stoutner.com...
[PrivacyCell.git] / app / src / main / java / com / stoutner / privacycell / fragments / SettingsFragment.kt
index 3708bc225716db77487878f5a1be766cdea89218..20dfb37be3cdbb74e847fabe05125ba0b4546569 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2021 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2021-2022 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Cell <https://www.stoutner.com/privacy-cell>.
  *
@@ -42,6 +42,10 @@ class SettingsFragment : PreferenceFragmentCompat() {
 
     // Declare the class views.
     private lateinit var realtimeMonitoringPreference: Preference
+    private lateinit var secureNetworkNotificationPreference: Preference
+    private lateinit var insecureNetworkNotificationPreference: Preference
+    private lateinit var antiquatedNetworkNotificationPreference: Preference
+    private lateinit var consider3gAntiquatedPreference: Preference
     private lateinit var bottomAppBarPreference: Preference
 
     override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
@@ -53,8 +57,10 @@ class SettingsFragment : PreferenceFragmentCompat() {
 
         // Get handles for the preferences.
         realtimeMonitoringPreference = findPreference(getString(R.string.realtime_monitoring_key))!!
-        val secureNetworkNotificationPreference = findPreference<Preference>(getString(R.string.secure_network_notification_key))!!
-        val insecureNetworkNotificationPreference = findPreference<Preference>(getString(R.string.insecure_network_notification_key))!!
+        secureNetworkNotificationPreference = findPreference(getString(R.string.secure_network_notification_key))!!
+        insecureNetworkNotificationPreference = findPreference(getString(R.string.insecure_network_notification_key))!!
+        antiquatedNetworkNotificationPreference = findPreference(getString(R.string.antiquated_network_notification_key))!!
+        consider3gAntiquatedPreference = findPreference(getString(R.string.consider_3g_antiquated_key))!!
         bottomAppBarPreference = findPreference(getString(R.string.bottom_app_bar_key))!!
 
         // Only enable the realtime monitoring preference if the READ_PHONE_STATE permission has been granted.
@@ -64,20 +70,30 @@ class SettingsFragment : PreferenceFragmentCompat() {
         if (realtimeMonitoringPreference.isEnabled) {
             // Set the realtime monitoring preference icon.
             if (sharedPreferences.getBoolean(getString(R.string.realtime_monitoring_key), false)) {
-                // Set the enabled icon.
-                realtimeMonitoringPreference.setIcon(R.drawable.realtime_monitoring_enabled)
+                // Set the icons.
+                realtimeMonitoringPreference.setIcon(R.drawable.secure_notification_enabled)
+                secureNetworkNotificationPreference.setIcon(R.drawable.secure_notification_enabled)
+                insecureNetworkNotificationPreference.setIcon(R.drawable.insecure_notification_enabled)
+                antiquatedNetworkNotificationPreference.setIcon(R.drawable.antiquated_notification_enabled)
             } else {
-                // Set the disabled icon.
-                realtimeMonitoringPreference.setIcon(R.drawable.realtime_monitoring_disabled)
+                // Set the icons.
+                realtimeMonitoringPreference.setIcon(R.drawable.secure_notification_disabled)
+                secureNetworkNotificationPreference.setIcon(R.drawable.secure_notification_disabled)
+                insecureNetworkNotificationPreference.setIcon(R.drawable.insecure_notification_disabled)
+                antiquatedNetworkNotificationPreference.setIcon(R.drawable.antiquated_notification_disabled)
             }
         } else {
-            // Set the ghosted icon.
-            realtimeMonitoringPreference.setIcon(R.drawable.realtime_monitoring_ghosted)
+            // Set the icons.
+            realtimeMonitoringPreference.setIcon(R.drawable.secure_notification_ghosted)
+            secureNetworkNotificationPreference.setIcon(R.drawable.secure_notification_ghosted)
+            insecureNetworkNotificationPreference.setIcon(R.drawable.insecure_notification_ghosted)
+            antiquatedNetworkNotificationPreference.setIcon(R.drawable.antiquated_notification_ghosted)
         }
 
         // Set the notification preferences to depend on the realtime monitoring preference.
         secureNetworkNotificationPreference.dependency = getString(R.string.realtime_monitoring_key)
         insecureNetworkNotificationPreference.dependency = getString(R.string.realtime_monitoring_key)
+        antiquatedNetworkNotificationPreference.dependency = getString(R.string.realtime_monitoring_key)
 
         // Create the notification intents.
         val secureNetworkNotificationIntent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
@@ -86,17 +102,26 @@ class SettingsFragment : PreferenceFragmentCompat() {
         val insecureNetworkNotificationIntent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
             .putExtra(Settings.EXTRA_APP_PACKAGE, requireContext().packageName)
             .putExtra(Settings.EXTRA_CHANNEL_ID, RealtimeMonitoringService.INSECURE_NETWORK)
+        val antiquatedNetworkNotificationIntent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
+            .putExtra(Settings.EXTRA_APP_PACKAGE, requireContext().packageName)
+            .putExtra(Settings.EXTRA_CHANNEL_ID, RealtimeMonitoringService.ANTIQUATED_NETWORK)
 
         // Set the notification preference intents.
         secureNetworkNotificationPreference.intent = secureNetworkNotificationIntent
         insecureNetworkNotificationPreference.intent = insecureNetworkNotificationIntent
+        antiquatedNetworkNotificationPreference.intent = antiquatedNetworkNotificationIntent
+
+        // Set the consider 3G antiquated preference icon.
+        if (sharedPreferences.getBoolean(getString(R.string.consider_3g_antiquated_key), false)) {
+            consider3gAntiquatedPreference.setIcon(R.drawable.antiquated_3g_enabled)
+        } else {
+            consider3gAntiquatedPreference.setIcon(R.drawable.antiquated_3g_disabled)
+        }
 
         // Set the bottom app bar preference icon.
         if (sharedPreferences.getBoolean(getString(R.string.bottom_app_bar_key), false)) {
-            // Set the enabled icon.
             bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_enabled)
         } else {
-            // Set the disabled icon.
             bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled)
         }
     }
@@ -135,11 +160,17 @@ class SettingsFragment : PreferenceFragmentCompat() {
                 getString(R.string.realtime_monitoring_key) -> {
                     // Update the icon.
                     if (sharedPreferences.getBoolean(getString(R.string.realtime_monitoring_key), false)) {
-                        // Set the enabled icon.
-                        realtimeMonitoringPreference.setIcon(R.drawable.realtime_monitoring_enabled)
+                        // Set the icons.
+                        realtimeMonitoringPreference.setIcon(R.drawable.secure_notification_enabled)
+                        secureNetworkNotificationPreference.setIcon(R.drawable.secure_notification_enabled)
+                        insecureNetworkNotificationPreference.setIcon(R.drawable.insecure_notification_enabled)
+                        antiquatedNetworkNotificationPreference.setIcon(R.drawable.antiquated_notification_enabled)
                     } else {
-                        // Set the disabled icon.
-                        realtimeMonitoringPreference.setIcon(R.drawable.realtime_monitoring_disabled)
+                        // Set the icons.
+                        realtimeMonitoringPreference.setIcon(R.drawable.secure_notification_disabled)
+                        secureNetworkNotificationPreference.setIcon(R.drawable.secure_notification_disabled)
+                        insecureNetworkNotificationPreference.setIcon(R.drawable.insecure_notification_disabled)
+                        antiquatedNetworkNotificationPreference.setIcon(R.drawable.antiquated_notification_disabled)
                     }
 
                     // Start or stop the service.
@@ -155,35 +186,50 @@ class SettingsFragment : PreferenceFragmentCompat() {
                     }
                 }
 
+                getString(R.string.consider_3g_antiquated_key) -> {
+                    // Update the icon.
+                    if (sharedPreferences.getBoolean(getString(R.string.consider_3g_antiquated_key), false)) {
+                        consider3gAntiquatedPreference.setIcon(R.drawable.antiquated_3g_enabled)
+                    } else {
+                        consider3gAntiquatedPreference.setIcon(R.drawable.antiquated_3g_disabled)
+                    }
+
+                    // Restart Privacy Cell.
+                    restartPrivacyCell()
+                }
+
                 getString(R.string.bottom_app_bar_key) -> {
                     // Update the icon.
                     if (sharedPreferences.getBoolean(getString(R.string.bottom_app_bar_key), false)) {
-                        // Set the enabled icon.
                         bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_enabled)
                     } else {
-                        // Set the disabled icon.
                         bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled)
                     }
 
-                    // Create an intent to restart Privacy Cell.
-                    val restartIntent = requireActivity().parentActivityIntent!!
+                    // Restart Privacy Cell after 400 milliseconds.
+                    restartPrivacyCell()
+                }
+            }
+        }
+    }
 
-                    // `Intent.FLAG_ACTIVITY_CLEAR_TASK` removes all activities from the stack.  It requires `Intent.FLAG_ACTIVITY_NEW_TASK`.
-                    restartIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
+    private fun restartPrivacyCell() {
+        // Create an intent to restart Privacy Cell.
+        val restartIntent = requireActivity().parentActivityIntent!!
 
-                    // Create a handler to restart the activity.
-                    val restartHandler = Handler(Looper.getMainLooper())
+        // `Intent.FLAG_ACTIVITY_CLEAR_TASK` removes all activities from the stack.  It requires `Intent.FLAG_ACTIVITY_NEW_TASK`.
+        restartIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
 
-                    // Create a runnable to restart the activity.
-                    val restartRunnable = Runnable {
-                        // Restart the activity.
-                        startActivity(restartIntent)
-                    }
+        // Create a handler to restart the activity.
+        val restartHandler = Handler(Looper.getMainLooper())
 
-                    // Restart the activity after 400 milliseconds, so that the app has enough time to save the change to the preference.
-                    restartHandler.postDelayed(restartRunnable, 400)
-                }
-            }
+        // Create a runnable to restart the activity.
+        val restartRunnable = Runnable {
+            // Restart the activity.
+            startActivity(restartIntent)
         }
+
+        // Restart the activity after 400 milliseconds, so that the app has enough time to save the change to the preference.
+        restartHandler.postDelayed(restartRunnable, 400)
     }
 }
\ No newline at end of file