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