1 @file:Suppress("HardCodedStringLiteral")
2
3 package io.github.domi04151309.alwayson.helpers
4
5 import android.content.Context
6 import android.content.SharedPreferences
7 import android.view.ViewConfiguration
8 import androidx.preference.PreferenceManager
9 import io.github.domi04151309.alwayson.R
10 import java.net.URLEncoder
11
12 internal class P(private val prefs: SharedPreferences) {
13 fun get(
14 key: String,
15 default: Boolean,
16 ): Boolean = prefs.getBoolean(key, default)
17
18 fun get(
19 key: String,
20 default: String,
21 ): String = prefs.getString(key, default) ?: default
22
23 fun get(
24 key: String,
25 default: Int,
26 ): Int = prefs.getInt(key, default)
27
28 fun displayScale(): Float = prefs.getInt("pref_aod_scale_2", DISPLAY_SCALE_DEFAULT) / NUMBER_TO_PERCENT
29
30 fun backgroundImage(): Int? =
31 when (get(BACKGROUND_IMAGE, BACKGROUND_IMAGE_DEFAULT)) {
32 BACKGROUND_IMAGE_DANIEL_OLAH_1 -> R.drawable.unsplash_daniel_olah_1
33 BACKGROUND_IMAGE_DANIEL_OLAH_2 -> R.drawable.unsplash_daniel_olah_2
34 BACKGROUND_IMAGE_DANIEL_OLAH_3 -> R.drawable.unsplash_daniel_olah_3
35 BACKGROUND_IMAGE_DANIEL_OLAH_4 -> R.drawable.unsplash_daniel_olah_4
36 BACKGROUND_IMAGE_DANIEL_OLAH_5 -> R.drawable.unsplash_daniel_olah_5
37 BACKGROUND_IMAGE_DANIEL_OLAH_6 -> R.drawable.unsplash_daniel_olah_6
38 BACKGROUND_IMAGE_DANIEL_OLAH_7 -> R.drawable.unsplash_daniel_olah_7
39 BACKGROUND_IMAGE_DANIEL_OLAH_8 -> R.drawable.unsplash_daniel_olah_8
40 BACKGROUND_IMAGE_FILIP_BAOTIC_1 -> R.drawable.unsplash_filip_baotic_1
41 BACKGROUND_IMAGE_TYLER_LASTOVICH_1 ->
42 R.drawable.unsplash_tyler_lastovich_1
43
44 BACKGROUND_IMAGE_TYLER_LASTOVICH_2 ->
45 R.drawable.unsplash_tyler_lastovich_2
46
47 BACKGROUND_IMAGE_TYLER_LASTOVICH_3 ->
48 R.drawable.unsplash_tyler_lastovich_3
49
50 else -> null
51 }
52
53 fun getSingleLineTimeFormat() =
54 if (get(USE_12_HOUR_CLOCK, USE_12_HOUR_CLOCK_DEFAULT)) {
55 if (get(SHOW_AM_PM, SHOW_AM_PM_DEFAULT)) {
56 "h:mm a"
57 } else {
58 "h:mm"
59 }
60 } else {
61 "H:mm"
62 }
63
64 fun getMultiLineTimeFormat(): String {
65 val singleLineFormat = getSingleLineTimeFormat()
66 return singleLineFormat[0] +
67 singleLineFormat
68 .replace(':', '\n')
69 .replace(' ', '\n')
70 }
71
72 fun getWeatherUrl(): String =
73 "https://wttr.in/" +
74 URLEncoder.encode(
75 get(
76 WEATHER_LOCATION,
77 WEATHER_LOCATION_DEFAULT,
78 ),
79 "utf-8",
80 ) +
81 if (get(WEATHER_IMPERIAL, WEATHER_IMPERIAL_DEFAULT)) {
82 "?u"
83 } else {
84 "?m"
85 } +
86 "T&format=" +
87 URLEncoder.encode(
88 get(
89 WEATHER_FORMAT,
90 WEATHER_FORMAT_DEFAULT,
91 ),
92 "utf-8",
93 )
94
95 companion object {
96 const val RULES_DISABLE_IN_DO_NOT_DISTURB = "rules_disable_in_do_not_disturb"
97 const val RULES_CHARGING_STATE = "rules_charging_state"
98 const val RULES_BATTERY = "rules_battery_level"
99 const val RULES_TIMEOUT = "rules_timeout_sec"
100
101 const val ALWAYS_ON = "always_on"
102 const val ROOT_MODE = "root_mode"
103 const val POWER_SAVING_MODE = "ao_power_saving"
104 const val USER_THEME = "ao_style"
105 const val SHOW_CLOCK = "ao_clock"
106 const val SHOW_DATE = "ao_date"
107 const val SHOW_BATTERY_ICON = "ao_batteryIcn"
108 const val SHOW_BATTERY_PERCENTAGE = "ao_battery"
109 const val SHOW_CALENDAR = "ao_calendar"
110 const val SHOW_NOTIFICATION_COUNT = "ao_notifications"
111 const val SHOW_NOTIFICATION_ICONS = "ao_notification_icons"
112 const val SHOW_FINGERPRINT_ICON = "ao_fingerprint"
113 const val FINGERPRINT_MARGIN = "ao_fingerprint_margin"
114 const val BACKGROUND_IMAGE = "ao_background_image"
115 const val CUSTOM_BACKGROUND = "custom_background"
116 const val EDGE_GLOW = "ao_edgeGlow"
117 const val POCKET_MODE = "ao_pocket_mode"
118 const val DO_NOT_DISTURB = "ao_dnd"
119 const val DISABLE_HEADS_UP_NOTIFICATIONS = "heads_up"
120 const val USE_12_HOUR_CLOCK = "hour"
121 const val SHOW_AM_PM = "am_pm"
122 const val DATE_FORMAT = "ao_date_format"
123 const val FORCE_BRIGHTNESS = "ao_force_brightness"
124 const val DISABLE_DOUBLE_TAP = "ao_double_tap_disabled"
125 const val DOUBLE_TAP_SPEED = "ao_double_tap_speed"
126 const val SHOW_MUSIC_CONTROLS = "ao_musicControls"
127 const val MESSAGE = "ao_message"
128 const val SHOW_WEATHER = "ao_weather"
129 const val WEATHER_LOCATION = "ao_weather_location"
130 const val WEATHER_FORMAT = "ao_weather_format"
131 const val WEATHER_IMPERIAL = "ao_weather_imperial"
132 const val TINT_NOTIFICATIONS = "ao_tint_notifications"
133 const val ANIMATE_MOTION = "ao_smooth_animation"
134 const val DISPLAY_COLOR_CLOCK = "display_color_clock"
135 const val DISPLAY_COLOR_DATE = "display_color_date"
136 const val DISPLAY_COLOR_BATTERY = "display_color_battery"
137 const val DISPLAY_COLOR_MUSIC_CONTROLS = "display_color_music_controls"
138 const val DISPLAY_COLOR_CALENDAR = "display_color_calendar"
139 const val DISPLAY_COLOR_NOTIFICATION = "display_color_notification"
140 const val DISPLAY_COLOR_MESSAGE = "display_color_message"
141 const val DISPLAY_COLOR_WEATHER = "display_color_weather"
142 const val DISPLAY_COLOR_FINGERPRINT = "display_color_fingerprint"
143 const val DISPLAY_COLOR_EDGE_GLOW = "display_color_edge_glow"
144 const val FORCE_BRIGHTNESS_VALUE = "ao_force_brightness_value"
145 const val VIBRATION_DURATION = "ao_vibration"
146 const val EDGE_GLOW_DURATION = "ao_glowDuration"
147 const val EDGE_GLOW_DELAY = "ao_glowDelay"
148 const val EDGE_GLOW_STYLE = "ao_glowStyle"
149
150 const val CHARGING_STYLE = "charging_style"
151
152 const val RULES_CHARGING_STATE_CHARGING = "charging"
153 const val RULES_CHARGING_STATE_DISCHARGING = "discharging"
154
155 const val USER_THEME_GOOGLE = "google"
156 const val USER_THEME_ONEPLUS = "oneplus"
157 const val USER_THEME_SAMSUNG = "samsung"
158 const val USER_THEME_SAMSUNG2 = "samsung2"
159 const val USER_THEME_SAMSUNG3 = "samsung3"
160 const val USER_THEME_80S = "80s"
161 const val USER_THEME_FAST = "fast"
162 const val USER_THEME_FLOWER = "flower"
163 const val USER_THEME_GAME = "game"
164 const val USER_THEME_HANDWRITTEN = "handwritten"
165 const val USER_THEME_JUNGLE = "jungle"
166 const val USER_THEME_WESTERN = "western"
167 const val USER_THEME_ANALOG = "analog"
168 const val USER_THEME_RUSSIAN = "russian"
169
170 const val BACKGROUND_IMAGE_NONE = "none"
171 const val BACKGROUND_IMAGE_DANIEL_OLAH_1 = "daniel_olah_1"
172 const val BACKGROUND_IMAGE_DANIEL_OLAH_2 = "daniel_olah_2"
173 const val BACKGROUND_IMAGE_DANIEL_OLAH_3 = "daniel_olah_3"
174 const val BACKGROUND_IMAGE_DANIEL_OLAH_4 = "daniel_olah_4"
175 const val BACKGROUND_IMAGE_DANIEL_OLAH_5 = "daniel_olah_5"
176 const val BACKGROUND_IMAGE_DANIEL_OLAH_6 = "daniel_olah_6"
177 const val BACKGROUND_IMAGE_DANIEL_OLAH_7 = "daniel_olah_7"
178 const val BACKGROUND_IMAGE_DANIEL_OLAH_8 = "daniel_olah_8"
179 const val BACKGROUND_IMAGE_FILIP_BAOTIC_1 = "filip_baotic_1"
180 const val BACKGROUND_IMAGE_TYLER_LASTOVICH_1 = "tyler_lastovich_1"
181 const val BACKGROUND_IMAGE_TYLER_LASTOVICH_2 = "tyler_lastovich_2"
182 const val BACKGROUND_IMAGE_TYLER_LASTOVICH_3 = "tyler_lastovich_3"
183 const val BACKGROUND_IMAGE_CUSTOM = "custom"
184
185 const val CHARGING_STYLE_CIRCLE = "circle"
186 const val CHARGING_STYLE_FLASH = "flash"
187 const val CHARGING_STYLE_IOS = "ios"
188
189 private const val EDGE_GLOW_STYLE_ALL = "all"
190 const val EDGE_GLOW_STYLE_VERTICAL = "vertical"
191 const val EDGE_GLOW_STYLE_HORIZONTAL = "horizontal"
192
193 const val RULES_DISABLE_IN_DO_NOT_DISTURB_DEFAULT = false
194 const val RULES_CHARGING_STATE_DEFAULT = "always"
195 const val RULES_BATTERY_DEFAULT = 0
196 const val RULES_TIMEOUT_DEFAULT = 0
197
198 const val ALWAYS_ON_DEFAULT = false
199 const val ROOT_MODE_DEFAULT = false
200 const val POWER_SAVING_MODE_DEFAULT = false
201 const val USER_THEME_DEFAULT = USER_THEME_GOOGLE
202 const val SHOW_CLOCK_DEFAULT = true
203 const val SHOW_DATE_DEFAULT = true
204 const val SHOW_BATTERY_ICON_DEFAULT = true
205 const val SHOW_BATTERY_PERCENTAGE_DEFAULT = true
206 const val SHOW_CALENDAR_DEFAULT = false
207 const val SHOW_NOTIFICATION_COUNT_DEFAULT = false
208 const val SHOW_NOTIFICATION_ICONS_DEFAULT = true
209 const val SHOW_FINGERPRINT_ICON_DEFAULT = false
210 const val FINGERPRINT_MARGIN_DEFAULT = 200
211 const val BACKGROUND_IMAGE_DEFAULT = BACKGROUND_IMAGE_NONE
212 const val EDGE_GLOW_DEFAULT = false
213 const val POCKET_MODE_DEFAULT = false
214 const val DO_NOT_DISTURB_DEFAULT = false
215 const val DISABLE_HEADS_UP_NOTIFICATIONS_DEFAULT = false
216 const val USE_12_HOUR_CLOCK_DEFAULT = false
217 const val SHOW_AM_PM_DEFAULT = false
218 const val DATE_FORMAT_DEFAULT = "EEE, MMMM d"
219 const val FORCE_BRIGHTNESS_DEFAULT = false
220 const val DISABLE_DOUBLE_TAP_DEFAULT = false
221 const val SHOW_MUSIC_CONTROLS_DEFAULT = false
222 const val MESSAGE_DEFAULT = ""
223 const val SHOW_WEATHER_DEFAULT = false
224 const val WEATHER_LOCATION_DEFAULT = ""
225 const val WEATHER_FORMAT_DEFAULT = "%t"
226 const val WEATHER_IMPERIAL_DEFAULT = false
227 const val TINT_NOTIFICATIONS_DEFAULT = false
228 const val ANIMATE_MOTION_DEFAULT = false
229 const val DISPLAY_COLOR_CLOCK_DEFAULT = -1
230 const val DISPLAY_COLOR_DATE_DEFAULT = -1
231 const val DISPLAY_COLOR_BATTERY_DEFAULT = -1
232 const val DISPLAY_COLOR_MUSIC_CONTROLS_DEFAULT = -1
233 const val DISPLAY_COLOR_CALENDAR_DEFAULT = -1
234 const val DISPLAY_COLOR_NOTIFICATION_DEFAULT = -1
235 const val DISPLAY_COLOR_MESSAGE_DEFAULT = -1
236 const val DISPLAY_COLOR_WEATHER_DEFAULT = -1
237 const val DISPLAY_COLOR_FINGERPRINT_DEFAULT = -1
238 const val DISPLAY_COLOR_EDGE_GLOW_DEFAULT = -1
239 const val FORCE_BRIGHTNESS_VALUE_DEFAULT = 50
240 const val VIBRATION_DURATION_DEFAULT = 64
241 const val EDGE_GLOW_DURATION_DEFAULT = 2000
242 const val EDGE_GLOW_DELAY_DEFAULT = 2000
243
244 const val CHARGING_STYLE_DEFAULT = CHARGING_STYLE_CIRCLE
245 const val EDGE_GLOW_STYLE_DEFAULT = EDGE_GLOW_STYLE_ALL
246
247 val DOUBLE_TAP_SPEED_DEFAULT = ViewConfiguration.getDoubleTapTimeout()
248
249 private const val DISPLAY_SCALE_DEFAULT = 100
250 private const val NUMBER_TO_PERCENT = 100f
251
252 @Suppress("NOTHING_TO_INLINE")
253 inline fun getPreferences(context: Context): SharedPreferences =
254 PreferenceManager.getDefaultSharedPreferences(
255 context,
256 )
257 }
258 }
259