LAFWatchFaceActivity.kt raw

   1  package io.github.domi04151309.alwayson.activities
   2  
   3  import android.Manifest
   4  import android.annotation.SuppressLint
   5  import android.content.Intent
   6  import android.os.Bundle
   7  import android.util.Log
   8  import android.widget.EditText
   9  import android.widget.Toast
  10  import androidx.appcompat.app.AlertDialog
  11  import androidx.core.app.ActivityCompat
  12  import androidx.core.content.edit
  13  import androidx.core.net.toUri
  14  import androidx.preference.Preference
  15  import androidx.preference.SeekBarPreference
  16  import com.google.android.material.dialog.MaterialAlertDialogBuilder
  17  import io.github.domi04151309.alwayson.R
  18  import io.github.domi04151309.alwayson.custom.BasePreferenceFragment
  19  import io.github.domi04151309.alwayson.helpers.Global
  20  import io.github.domi04151309.alwayson.helpers.P
  21  import io.github.domi04151309.alwayson.helpers.PreferenceScreenHelper
  22  import java.text.SimpleDateFormat
  23  import java.util.Locale
  24  
  25  class LAFWatchFaceActivity : BaseActivity() {
  26      override fun onCreate(savedInstanceState: Bundle?) {
  27          super.onCreate(savedInstanceState)
  28          setContentView(R.layout.activity_settings)
  29          supportFragmentManager
  30              .beginTransaction()
  31              .replace(R.id.settings, PreferenceFragment())
  32              .commit()
  33      }
  34  
  35      class PreferenceFragment : BasePreferenceFragment() {
  36          @Suppress("SameReturnValue")
  37          private fun onDateFormatClicked(): Boolean {
  38              val dialogView = layoutInflater.inflate(R.layout.dialog_edit_text, null, false)
  39              val editText = dialogView.findViewById<EditText>(R.id.editText)
  40              editText.setText(
  41                  preferenceManager.sharedPreferences?.getString(
  42                      P.DATE_FORMAT,
  43                      P.DATE_FORMAT_DEFAULT,
  44                  ),
  45              )
  46              val dialog =
  47                  MaterialAlertDialogBuilder(requireContext())
  48                      .setTitle(R.string.pref_ao_date_format)
  49                      .setView(dialogView)
  50                      .setPositiveButton(android.R.string.ok, null)
  51                      .setNegativeButton(android.R.string.cancel) { _, _ -> }
  52                      .setNeutralButton(R.string.pref_ao_date_format_dialog_neutral, null)
  53                      .show()
  54              dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
  55                  try {
  56                      SimpleDateFormat(editText.text.toString(), Locale.getDefault())
  57                      preferenceManager.sharedPreferences?.edit {
  58                          putString(P.DATE_FORMAT, editText.text.toString())
  59                      }
  60                      dialog.dismiss()
  61                  } catch (exception: IllegalArgumentException) {
  62                      Log.w(Global.LOG_TAG, exception.toString())
  63                      Toast.makeText(
  64                          requireContext(),
  65                          R.string.pref_ao_date_format_illegal,
  66                          Toast.LENGTH_LONG,
  67                      ).show()
  68                  }
  69              }
  70              dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener {
  71                  startActivity(
  72                      Intent(Intent.ACTION_VIEW)
  73                          .setData(
  74                              (
  75                                  "https://developer.android.com/reference/java/text" +
  76                                      "/SimpleDateFormat#date-and-time-patterns"
  77                              ).toUri(),
  78                          ),
  79                  )
  80              }
  81              return true
  82          }
  83  
  84          @SuppressLint("InflateParams")
  85          override fun onCreatePreferences(
  86              savedInstanceState: Bundle?,
  87              rootKey: String?,
  88          ) {
  89              addPreferencesFromResource(R.xml.pref_laf_watch_face)
  90              checkPermissions()
  91  
  92              PreferenceScreenHelper.linkPreferenceToActivity(
  93                  this,
  94                  "ao_style",
  95                  Intent(requireContext(), LAFAlwaysOnLookActivity::class.java),
  96              )
  97              PreferenceScreenHelper.linkPreferenceToActivity(
  98                  this,
  99                  "ao_colors",
 100                  Intent(requireContext(), LAFWFColorsActivity::class.java),
 101              )
 102              findPreference<Preference>(P.SHOW_CALENDAR)
 103                  ?.setOnPreferenceChangeListener { _, newValue ->
 104                      if (newValue is Boolean && newValue) {
 105                          ActivityCompat.requestPermissions(
 106                              requireActivity(),
 107                              arrayOf(Manifest.permission.READ_CALENDAR),
 108                              0,
 109                          )
 110                      }
 111                      true
 112                  }
 113              findPreference<Preference>(P.DATE_FORMAT)?.setOnPreferenceClickListener {
 114                  onDateFormatClicked()
 115              }
 116              PreferenceScreenHelper.linkPreferenceToActivity(
 117                  this,
 118                  "pref_weather",
 119                  Intent(requireContext(), LAFWeatherActivity::class.java),
 120              )
 121              findPreference<SeekBarPreference>("pref_aod_scale_2")?.apply {
 122                  summary =
 123                      resources.getString(
 124                          R.string.pref_look_and_feel_display_size_summary,
 125                          value,
 126                      )
 127                  setOnPreferenceChangeListener { preference, newValue ->
 128                      preference.summary =
 129                          resources.getString(
 130                              R.string.pref_look_and_feel_display_size_summary,
 131                              newValue as Int,
 132                          )
 133                      true
 134                  }
 135              }
 136          }
 137      }
 138  }
 139