]> gitweb.stoutner.com Git - PrivacyCell.git/commitdiff
Restore the scroll position when restarting the Settings activity. https://redmine...
authorSoren Stoutner <soren@stoutner.com>
Tue, 29 Nov 2022 22:22:59 +0000 (15:22 -0700)
committerSoren Stoutner <soren@stoutner.com>
Tue, 29 Nov 2022 22:22:59 +0000 (15:22 -0700)
app/src/main/java/com/stoutner/privacycell/fragments/SettingsFragment.kt
app/src/main/res/values-es/strings.xml
app/src/main/res/values/strings.xml

index 9adae226fc76d8e34ae1016da741c705b01af433..dc8545ffb0abcfa96225bc19f86dcb6f29b250b9 100644 (file)
@@ -40,6 +40,9 @@ import com.stoutner.privacycell.activities.PrivacyCellActivity
 import com.stoutner.privacycell.dialogs.NotificationPermissionDialog
 import com.stoutner.privacycell.services.RealtimeMonitoringService
 
+// Define the class constants.
+private const val SCROLL_Y = "scroll_y"
+
 class SettingsFragment : PreferenceFragmentCompat() {
     // Declare the class variables.
     private lateinit var sharedPreferenceChangeListener: OnSharedPreferenceChangeListener
@@ -52,6 +55,12 @@ class SettingsFragment : PreferenceFragmentCompat() {
     private lateinit var consider3gAntiquatedPreference: Preference
     private lateinit var bottomAppBarPreference: Preference
 
+    companion object {
+        // Declare the private static class variables.  Otherwise, onRestart will not pull the same values that are populated from the saved instance state.
+        private var fragmentRestarted: Boolean = false
+        private var scrollY: Int = 0
+    }
+
     override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
         // Load the preferences from the XML file.
         setPreferencesFromResource(R.xml.preferences, rootKey)
@@ -128,36 +137,15 @@ class SettingsFragment : PreferenceFragmentCompat() {
         } else {
             bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled)
         }
-    }
-
-    // The listener should be unregistered when the app is paused.
-    override fun onPause() {
-        // Run the default commands.
-        super.onPause()
 
-        // Get a handle for the shared preferences.
-        val sharedPreferences = preferenceScreen.sharedPreferences!!
+        // Check if the fragment has been restarted.
+        if (savedInstanceState != null) {
+            // Set the fragment restored flag.
+            fragmentRestarted = true
 
-        // Unregister the shared preference listener.
-        sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
-    }
-
-    // The listener should be re-registered when the app is resumed.
-    override fun onResume() {
-        // Run the default commands.
-        super.onResume()
-
-        // Get a new shared preference change listener.
-        sharedPreferenceChangeListener = getSharedPreferenceChangeListener()
-
-        // Get a handle for the shared preferences.
-        val sharedPreferences = preferenceScreen.sharedPreferences!!
-
-        // Re-register the shared preference listener.
-        sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
-
-        // Update the realtime monitoring preference summary.
-        updateRealtimeMonitoringSummary()
+            // Save the scroll Y.
+            scrollY = savedInstanceState.getInt(SCROLL_Y)
+        }
     }
 
     private fun getSharedPreferenceChangeListener(): OnSharedPreferenceChangeListener {
@@ -244,6 +232,53 @@ class SettingsFragment : PreferenceFragmentCompat() {
         }
     }
 
+    // The listener should be unregistered when the app is paused.
+    override fun onPause() {
+        // Run the default commands.
+        super.onPause()
+
+        // Get a handle for the shared preferences.
+        val sharedPreferences = preferenceScreen.sharedPreferences!!
+
+        // Unregister the shared preference listener.
+        sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
+    }
+
+    // The listener should be re-registered when the app is resumed.
+    override fun onResume() {
+        // Run the default commands.
+        super.onResume()
+
+        // Get a new shared preference change listener.
+        sharedPreferenceChangeListener = getSharedPreferenceChangeListener()
+
+        // Get a handle for the shared preferences.
+        val sharedPreferences = preferenceScreen.sharedPreferences!!
+
+        // Re-register the shared preference listener.
+        sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
+
+        // Update the realtime monitoring preference summary.
+        updateRealtimeMonitoringSummary()
+
+        // Restore the scroll position if the fragment has been restarted.
+        if (fragmentRestarted) {
+            // Reset the fragment restarted flag.
+            fragmentRestarted = false
+
+            // Set the scroll position.
+            listView.smoothScrollBy(0, scrollY)
+        }
+    }
+
+    override fun onSaveInstanceState(savedInstanceState: Bundle) {
+        // Run the default commands.
+        super.onSaveInstanceState(savedInstanceState)
+
+        // Save the scroll position.
+        savedInstanceState.putInt(SCROLL_Y, listView.computeVerticalScrollOffset())
+    }
+
     private fun restartPrivacyCell() {
         // Create an intent to restart Privacy Cell.
         val restartIntent = requireActivity().parentActivityIntent!!
index 7ff040c63b6fcfeb3abdeabae4aa96468735d465..a839c1c105bcb1c459bd3c609daaf70b2b97b34a 100644 (file)
     <string name="monitoring">Monitorización</string>
     <string name="realtime_monitoring">Monitorización en tiempo real</string>
     <string name="realtime_monitoring_summary">Coloca un icono en la barra de estado que monitoriza la red celular.</string>
+        <string name="notification_permission_denied">El permiso de publicación de notificaciones está actualmente denegado, por lo que no se mostrarán las notificaciones.</string>
     <string name="secure_network_notification">Notificación de red segura</string>
     <string name="insecure_network_notification">Notificación de red insegura</string>
     <string name="antiquated_network_notification">Notificación de red obsoleta</string>
index 2b47728db771cf408b11f27fbb907c568d2d81f4..609cde0760e3189b1a1f5853362ea576bf02ea71 100644 (file)
     <string name="monitoring">Monitoring</string>
     <string name="realtime_monitoring">Realtime monitoring</string>
     <string name="realtime_monitoring_summary">Place an icon in the status bar that monitors the cell network.</string>
-        <string name="notification_permission_denied">The Post Notification permission is currently denied, so no notifications will be displayed.</string>
+        <string name="notification_permission_denied">The Post Notification permission is currently denied, so notifications will not be displayed.</string>
     <string name="secure_network_notification">Secure network notification</string>
     <string name="insecure_network_notification">Insecure network notification</string>
     <string name="antiquated_network_notification">Antiquated network notification</string>