SettingsFragment.kt 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package im.angry.openeuicc.ui
  2. import android.content.Intent
  3. import android.net.Uri
  4. import android.os.Bundle
  5. import android.view.LayoutInflater
  6. import android.view.View
  7. import android.view.ViewGroup
  8. import androidx.datastore.preferences.core.Preferences
  9. import androidx.lifecycle.lifecycleScope
  10. import androidx.preference.CheckBoxPreference
  11. import androidx.preference.Preference
  12. import androidx.preference.PreferenceFragmentCompat
  13. import im.angry.openeuicc.common.R
  14. import im.angry.openeuicc.util.*
  15. import kotlinx.coroutines.flow.Flow
  16. import kotlinx.coroutines.launch
  17. import kotlinx.coroutines.runBlocking
  18. class SettingsFragment: PreferenceFragmentCompat() {
  19. override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
  20. setPreferencesFromResource(R.xml.pref_settings, rootKey)
  21. findPreference<Preference>("pref_info_app_version")
  22. ?.summary = requireContext().selfAppVersion
  23. findPreference<Preference>("pref_info_source_code")
  24. ?.setOnPreferenceClickListener {
  25. startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(it.summary.toString())))
  26. true
  27. }
  28. findPreference<Preference>("pref_advanced_logs")
  29. ?.setOnPreferenceClickListener {
  30. startActivity(Intent(requireContext(), LogsActivity::class.java))
  31. true
  32. }
  33. findPreference<CheckBoxPreference>("pref_notifications_download")
  34. ?.bindBooleanFlow(preferenceRepository.notificationDownloadFlow, PreferenceKeys.NOTIFICATION_DOWNLOAD)
  35. findPreference<CheckBoxPreference>("pref_notifications_delete")
  36. ?.bindBooleanFlow(preferenceRepository.notificationDeleteFlow, PreferenceKeys.NOTIFICATION_DELETE)
  37. findPreference<CheckBoxPreference>("pref_notifications_switch")
  38. ?.bindBooleanFlow(preferenceRepository.notificationSwitchFlow, PreferenceKeys.NOTIFICATION_SWITCH)
  39. findPreference<CheckBoxPreference>("pref_advanced_disable_safeguard_removable_esim")
  40. ?.bindBooleanFlow(preferenceRepository.disableSafeguardFlow, PreferenceKeys.DISABLE_SAFEGUARD_REMOVABLE_ESIM)
  41. }
  42. override fun onStart() {
  43. super.onStart()
  44. setupRootViewInsets(requireView().requireViewById(androidx.preference.R.id.recycler_view))
  45. }
  46. private fun CheckBoxPreference.bindBooleanFlow(flow: Flow<Boolean>, key: Preferences.Key<Boolean>) {
  47. lifecycleScope.launch {
  48. flow.collect { isChecked = it }
  49. }
  50. setOnPreferenceChangeListener { _, newValue ->
  51. runBlocking {
  52. preferenceRepository.updatePreference(key, newValue as Boolean)
  53. }
  54. true
  55. }
  56. }
  57. }