package net.mezimmah.wkt9.preferences import android.content.SharedPreferences import android.os.Bundle import android.Manifest import android.os.Build import android.util.Log import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference import net.mezimmah.wkt9.R class PreferencesFragment: PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener { private val tag = "WKT9" private val requestPermissionLauncher = registerForActivityResult(RequestMultiplePermissions()) { isGranted: Map -> // If any permission got denied we programmatically disable the option if (isGranted.containsValue(false)) { val key = getString(R.string.preference_setting_speech_to_text_key) findPreference(key)?.isChecked = false } } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { Log.d(tag, "Loading preferences") setPreferencesFromResource(R.xml.preferences, rootKey) } override fun onResume() { super.onResume() preferenceScreen.sharedPreferences?.registerOnSharedPreferenceChangeListener(this) } override fun onPause() { super.onPause() preferenceScreen.sharedPreferences?.unregisterOnSharedPreferenceChangeListener(this) } override fun onSharedPreferenceChanged(p0: SharedPreferences?, key: String?) { when (key) { getString(R.string.preference_setting_speech_to_text_key) -> { if (findPreference(key)?.isChecked == true) { val permissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { arrayOf( Manifest.permission.RECORD_AUDIO, Manifest.permission.POST_NOTIFICATIONS ) } else arrayOf(Manifest.permission.RECORD_AUDIO) requestPermissionLauncher.launch(permissions) } } } } }