X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyCell.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacycell%2Ffragments%2FSettingsFragment.kt;h=3708bc225716db77487878f5a1be766cdea89218;hp=f23a1168a91e8ae2e77ddd9f4bd1886df285f570;hb=dc76c6f07fd9a5718049d160e079842fa60ff406;hpb=976d7da4c16f9ddc87f0cd7c67cd2eefc9f260b1 diff --git a/app/src/main/java/com/stoutner/privacycell/fragments/SettingsFragment.kt b/app/src/main/java/com/stoutner/privacycell/fragments/SettingsFragment.kt index f23a116..3708bc2 100644 --- a/app/src/main/java/com/stoutner/privacycell/fragments/SettingsFragment.kt +++ b/app/src/main/java/com/stoutner/privacycell/fragments/SettingsFragment.kt @@ -19,15 +19,19 @@ package com.stoutner.privacycell.fragments +import android.Manifest import android.content.Intent import android.content.SharedPreferences +import android.content.pm.PackageManager import android.os.Bundle import android.os.Handler import android.os.Looper import android.provider.Settings +import androidx.core.app.ActivityCompat import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import androidx.work.WorkManager import com.stoutner.privacycell.R import com.stoutner.privacycell.services.RealtimeMonitoringService @@ -45,7 +49,7 @@ class SettingsFragment : PreferenceFragmentCompat() { setPreferencesFromResource(R.xml.preferences, rootKey) // Get a handle for the shared preferences. - val sharedPreferences = preferenceScreen.sharedPreferences + val sharedPreferences = preferenceScreen.sharedPreferences!! // Get handles for the preferences. realtimeMonitoringPreference = findPreference(getString(R.string.realtime_monitoring_key))!! @@ -53,13 +57,22 @@ class SettingsFragment : PreferenceFragmentCompat() { val insecureNetworkNotificationPreference = findPreference(getString(R.string.insecure_network_notification_key))!! bottomAppBarPreference = findPreference(getString(R.string.bottom_app_bar_key))!! - // 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) + // Only enable the realtime monitoring preference if the READ_PHONE_STATE permission has been granted. + realtimeMonitoringPreference.isEnabled = (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) + + // Set the realtime monitoring icon according to the status. + 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) + } else { + // Set the disabled icon. + realtimeMonitoringPreference.setIcon(R.drawable.realtime_monitoring_disabled) + } } else { - // Set the disabled icon. - realtimeMonitoringPreference.setIcon(R.drawable.realtime_monitoring_disabled) + // Set the ghosted icon. + realtimeMonitoringPreference.setIcon(R.drawable.realtime_monitoring_ghosted) } // Set the notification preferences to depend on the realtime monitoring preference. @@ -94,7 +107,7 @@ class SettingsFragment : PreferenceFragmentCompat() { super.onPause() // Get a handle for the shared preferences. - val sharedPreferences = preferenceScreen.sharedPreferences + val sharedPreferences = preferenceScreen.sharedPreferences!! // Unregister the shared preference listener. sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener) @@ -109,7 +122,7 @@ class SettingsFragment : PreferenceFragmentCompat() { sharedPreferenceChangeListener = getSharedPreferenceChangeListener() // Get a handle for the shared preferences. - val sharedPreferences = preferenceScreen.sharedPreferences + val sharedPreferences = preferenceScreen.sharedPreferences!! // Re-register the shared preference listener. sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener) @@ -136,6 +149,9 @@ class SettingsFragment : PreferenceFragmentCompat() { } else { // Realtime monitoring has been disabled. // Stop the realtime monitoring service. requireActivity().stopService(Intent(context, RealtimeMonitoringService::class.java)) + + // Cancel the realtime listener work request. + WorkManager.getInstance(requireContext()).cancelUniqueWork(getString(R.string.register_listener_work_request)) } }