P.kt raw

   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