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