LAFRulesActivity.kt raw

   1  package io.github.domi04151309.alwayson.activities
   2  
   3  import android.app.TimePickerDialog
   4  import android.content.Intent
   5  import android.content.SharedPreferences
   6  import android.os.Bundle
   7  import androidx.core.content.edit
   8  import androidx.preference.Preference
   9  import io.github.domi04151309.alwayson.R
  10  import io.github.domi04151309.alwayson.custom.BasePreferenceFragment
  11  import io.github.domi04151309.alwayson.custom.EditIntegerPreference
  12  import io.github.domi04151309.alwayson.helpers.P
  13  import io.github.domi04151309.alwayson.helpers.PreferenceScreenHelper
  14  import io.github.domi04151309.alwayson.helpers.Rules
  15  import java.lang.Integer.parseInt
  16  
  17  class LAFRulesActivity : BaseActivity() {
  18      override fun onCreate(savedInstanceState: Bundle?) {
  19          super.onCreate(savedInstanceState)
  20          setContentView(R.layout.activity_settings)
  21          supportFragmentManager
  22              .beginTransaction()
  23              .replace(R.id.settings, PreferenceFragment())
  24              .commit()
  25      }
  26  
  27      class PreferenceFragment :
  28          BasePreferenceFragment(),
  29          SharedPreferences.OnSharedPreferenceChangeListener {
  30          private var rulesTimeStartValue = DEFAULT_START_TIME
  31          private var rulesTimeEndValue = DEFAULT_END_TIME
  32  
  33          private lateinit var rulesBatteryLevel: EditIntegerPreference
  34          private lateinit var rulesTime: Preference
  35          private lateinit var rulesTimeout: EditIntegerPreference
  36  
  37          override fun onCreatePreferences(
  38              savedInstanceState: Bundle?,
  39              rootKey: String?,
  40          ) {
  41              addPreferencesFromResource(R.xml.pref_laf_rules)
  42  
  43              rulesBatteryLevel = findPreference(P.RULES_BATTERY) ?: error(INVALID_LAYOUT)
  44              rulesTime = findPreference("rules_time") ?: error(INVALID_LAYOUT)
  45              rulesTimeout = findPreference(P.RULES_TIMEOUT) ?: error(INVALID_LAYOUT)
  46              val is24Hour = preferenceManager.sharedPreferences?.getBoolean("hour", false) != true
  47  
  48              updateSummaries()
  49              checkPermissions()
  50  
  51              PreferenceScreenHelper.linkPreferenceToActivity(
  52                  this,
  53                  "pref_filter_notifications",
  54                  Intent(requireContext(), LAFFilterNotificationsActivity::class.java),
  55              )
  56  
  57              rulesTime.setOnPreferenceClickListener {
  58                  TimePickerDialog(
  59                      context,
  60                      { _, selectedStartHour, selectedStartMinute ->
  61                          preferenceManager.sharedPreferences?.edit {
  62                              putString(
  63                                  "rules_time_start",
  64                                  formatTime(selectedStartHour, selectedStartMinute),
  65                              )
  66                          }
  67                          TimePickerDialog(
  68                              context,
  69                              { _, selectedEndHour, selectedEndMinute ->
  70                                  preferenceManager.sharedPreferences?.edit {
  71                                      putString(
  72                                          "rules_time_end",
  73                                          formatTime(selectedEndHour, selectedEndMinute),
  74                                      )
  75                                  }
  76                              },
  77                              parseInt(rulesTimeEndValue.substringBefore(":")),
  78                              parseInt(rulesTimeEndValue.substringAfter(":")),
  79                              is24Hour,
  80                          ).show()
  81                      },
  82                      parseInt(rulesTimeStartValue.substringBefore(":")),
  83                      parseInt(rulesTimeStartValue.substringAfter(":")),
  84                      is24Hour,
  85                  ).show()
  86                  true
  87              }
  88          }
  89  
  90          private fun updateSummaries() {
  91              val rulesBatteryLevelValue =
  92                  preferenceManager.sharedPreferences?.getInt(
  93                      P.RULES_BATTERY,
  94                      P.RULES_BATTERY_DEFAULT,
  95                  ) ?: P.RULES_BATTERY_DEFAULT
  96              rulesTimeStartValue = preferenceManager.sharedPreferences?.getString(
  97                  "rules_time_start",
  98                  DEFAULT_START_TIME,
  99              ) ?: DEFAULT_START_TIME
 100              rulesTimeEndValue =
 101                  preferenceManager.sharedPreferences?.getString("rules_time_end", DEFAULT_END_TIME)
 102                      ?: DEFAULT_END_TIME
 103              val rulesTimeoutValue =
 104                  preferenceManager.sharedPreferences?.getInt(
 105                      P.RULES_TIMEOUT,
 106                      P.RULES_TIMEOUT_DEFAULT,
 107                  ) ?: P.RULES_TIMEOUT_DEFAULT
 108  
 109              if (rulesBatteryLevelValue > Rules.BATTERY_FULL) {
 110                  preferenceManager.sharedPreferences?.edit {
 111                      putInt(P.RULES_BATTERY, P.RULES_BATTERY_DEFAULT)
 112                  }
 113                  return
 114              }
 115  
 116              rulesTime.summary =
 117                  resources.getString(
 118                      R.string.pref_look_and_feel_rules_time_summary,
 119                      rulesTimeStartValue,
 120                      rulesTimeEndValue,
 121                  )
 122              rulesBatteryLevel.summary =
 123                  if (rulesBatteryLevelValue > 0) {
 124                      resources.getString(
 125                          R.string.pref_look_and_feel_rules_battery_level_summary,
 126                          rulesBatteryLevelValue,
 127                      )
 128                  } else {
 129                      resources.getString(
 130                          R.string.pref_look_and_feel_rules_battery_level_summary_zero,
 131                      )
 132                  }
 133              rulesTimeout.summary =
 134                  if (rulesTimeoutValue > 0) {
 135                      resources.getQuantityString(
 136                          R.plurals.pref_look_and_feel_rules_timeout_summary,
 137                          rulesTimeoutValue,
 138                          rulesTimeoutValue,
 139                      )
 140                  } else {
 141                      resources.getString(R.string.pref_look_and_feel_rules_timeout_summary_zero)
 142                  }
 143          }
 144  
 145          private fun formatTime(
 146              hours: Int,
 147              minutes: Int,
 148          ): String = hours.toString() + ":" + minutes.toString().padStart(2, '0')
 149  
 150          override fun onStart() {
 151              super.onStart()
 152              preferenceManager.sharedPreferences?.registerOnSharedPreferenceChangeListener(this)
 153          }
 154  
 155          override fun onStop() {
 156              super.onStop()
 157              preferenceManager.sharedPreferences?.unregisterOnSharedPreferenceChangeListener(this)
 158          }
 159  
 160          override fun onSharedPreferenceChanged(
 161              preferences: SharedPreferences,
 162              key: String?,
 163          ) {
 164              updateSummaries()
 165          }
 166  
 167          companion object {
 168              const val DEFAULT_START_TIME: String = "0:00"
 169              const val DEFAULT_END_TIME: String = "0:00"
 170  
 171              private const val INVALID_LAYOUT = "Invalid layout."
 172          }
 173      }
 174  }
 175