]> gitweb.stoutner.com Git - PrivacyCell.git/blobdiff - app/src/main/java/com/stoutner/privacycell/services/RealtimeMonitoringService.kt
Disable swiping to dismiss realtime notifications. https://redmine.stoutner.com/issue...
[PrivacyCell.git] / app / src / main / java / com / stoutner / privacycell / services / RealtimeMonitoringService.kt
index 5d9ad3a4a76f6f7d746c9dfc6148e0ebb7fe8467..19e1a3e2cede164c571b6dbc4558801bd5108979 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2021-2022 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>.
  *
@@ -148,39 +148,57 @@ class RealtimeMonitoringService : Service() {
             // Set the color.
             notificationBuilder.setColor(getColor(R.color.red_notification_icon))
 
+            // Prevent swiping to dismiss the notification.
+            notificationBuilder.setOngoing(true)
+
             // Start the foreground notification.
             startForeground(NOTIFICATION_ID, notificationBuilder.build())
 
             // Instantiate the protocol helper.
             val protocolHelper = ProtocolHelper()
 
+            // Get a handle for the telephony manager.
+            val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
+
             // Define the phone state listener.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
             phoneStateListener = object : PhoneStateListener() {
                 @Deprecated("Deprecated in Java")
                 override fun onServiceStateChanged(serviceState: ServiceState) {  // Update the voice network status.
-                    // Get the network registration info for the voice network, which is the second of the three entries (the first appears to be Wi-Fi and the third appears to be the cell data network).
-                    val networkRegistrationInfo = serviceState.networkRegistrationInfoList[1]
-
-                    // Get the consider 3G antiquated preference.
-                    val consider3gAntiquated = sharedPreferences.getBoolean(getString(R.string.consider_3g_antiquated_key), false)
-
-                    // Update the voice network security status.
-                    voiceNetworkSecurityStatus = protocolHelper.checkNetwork(networkRegistrationInfo.accessNetworkTechnology, consider3gAntiquated)
-
-                    // Populate the notification.
-                    populateNotification()
+                    // Check to see if realtime monitoring is enabled.  Sometimes the system keeps running the service even when it is supposed to shut down.
+                    if (sharedPreferences.getBoolean(applicationContext.getString(R.string.realtime_monitoring_key), true)) {  // Realtime monitoring is enabled.
+                        // Get the network registration info for the voice network, which is the second of the three entries (the first appears to be Wi-Fi and the third appears to be the cell data network).
+                        val networkRegistrationInfo = serviceState.networkRegistrationInfoList[1]
+
+                        // Get the consider 3G antiquated preference.
+                        val consider3gAntiquated = sharedPreferences.getBoolean(getString(R.string.consider_3g_antiquated_key), false)
+
+                        // Update the voice network security status.
+                        voiceNetworkSecurityStatus = protocolHelper.checkNetwork(networkRegistrationInfo.accessNetworkTechnology, consider3gAntiquated)
+
+                        // Populate the notification.
+                        populateNotification()
+                    } else {  // Realtime monitoring is disabled.
+                        // Cancel the current listener if it exists.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
+                        telephonyManager.listen(phoneStateListener, LISTEN_NONE)
+                    }
                 }
 
                 @Deprecated("Deprecated in Java")
                 override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {  // Update the data network status.
-                    // Get the consider 3G antiquated preference.
-                    val consider3gAntiquated = sharedPreferences.getBoolean(getString(R.string.consider_3g_antiquated_key), false)
-
-                    // Update the data network security status.
-                    dataNetworkSecurityStatus = protocolHelper.checkNetwork(telephonyDisplayInfo.networkType, consider3gAntiquated)
-
-                    // Populate the notification.
-                    populateNotification()
+                    // Check to see if realtime monitoring is enabled.  Sometimes the system keeps running the service even when it is supposed to shut down.
+                    if (sharedPreferences.getBoolean(applicationContext.getString(R.string.realtime_monitoring_key), true)) {  // Realtime monitoring is enabled.
+                        // Get the consider 3G antiquated preference.
+                        val consider3gAntiquated = sharedPreferences.getBoolean(getString(R.string.consider_3g_antiquated_key), false)
+
+                        // Update the data network security status.
+                        dataNetworkSecurityStatus = protocolHelper.checkNetwork(telephonyDisplayInfo.networkType, consider3gAntiquated)
+
+                        // Populate the notification.
+                        populateNotification()
+                    } else {  // Realtime monitoring is disabled.
+                        // Cancel the current listener if it exists.  The `PhoneStateListener` can be replaced by `TelephonyCallback` once the minimum API >= 31.
+                        telephonyManager.listen(phoneStateListener, LISTEN_NONE)
+                    }
                 }
             }
 
@@ -236,6 +254,9 @@ class RealtimeMonitoringService : Service() {
                 // Set the color.
                 antiquatedNetworkNotificationBuilder.setColor(getColor(R.color.red_notification_icon))
 
+                // Prevent swiping to dismiss the notification.
+                antiquatedNetworkNotificationBuilder.setOngoing(true)
+
                 // Update the notification.
                 notificationManager.notify(NOTIFICATION_ID, antiquatedNetworkNotificationBuilder.build())
 
@@ -260,6 +281,9 @@ class RealtimeMonitoringService : Service() {
                 // Set the color.
                 insecureNetworkNotificationBuilder.setColor(getColor(R.color.yellow_notification_icon))
 
+                // Prevent swiping to dismiss the notification.
+                insecureNetworkNotificationBuilder.setOngoing(true)
+
                 // Update the notification.
                 notificationManager.notify(NOTIFICATION_ID, insecureNetworkNotificationBuilder.build())
 
@@ -284,6 +308,9 @@ class RealtimeMonitoringService : Service() {
                 // Set the color.
                 secureNetworkNotificationBuilder.setColor(getColor(R.color.blue_icon))
 
+                // Prevent swiping to dismiss the notification.
+                secureNetworkNotificationBuilder.setOngoing(true)
+
                 // Update the notification.
                 notificationManager.notify(NOTIFICATION_ID, secureNetworkNotificationBuilder.build())
 
@@ -292,4 +319,4 @@ class RealtimeMonitoringService : Service() {
             }
         }
     }
-}
\ No newline at end of file
+}