aboutsummaryrefslogtreecommitdiffhomepage
path: root/app/src/main/java/me/texx/Texx/SettingsActivity.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/me/texx/Texx/SettingsActivity.kt')
-rw-r--r--app/src/main/java/me/texx/Texx/SettingsActivity.kt208
1 files changed, 208 insertions, 0 deletions
diff --git a/app/src/main/java/me/texx/Texx/SettingsActivity.kt b/app/src/main/java/me/texx/Texx/SettingsActivity.kt
new file mode 100644
index 0000000..663f05a
--- /dev/null
+++ b/app/src/main/java/me/texx/Texx/SettingsActivity.kt
@@ -0,0 +1,208 @@
+package me.texx.Texx
+
+import android.annotation.TargetApi
+import android.content.Context
+import android.content.Intent
+import android.content.res.Configuration
+import android.os.Build
+import android.os.Bundle
+import android.preference.*
+import android.support.v4.app.NavUtils
+import android.view.MenuItem
+import daio.io.dresscode.dressCodeName
+import daio.io.dresscode.matchDressCode
+import me.texx.Texx.util.ThemeUtil.getThemeName
+
+/**
+ * A [PreferenceActivity] that presents a set of application settings. On
+ * handset devices, settings are presented as a single list. On tablets,
+ * settings are split by category, with category headers shown to the left of
+ * the list of settings.
+ *
+ * See [Android Design: Settings](http://developer.android.com/design/patterns/settings.html)
+ * for design guidelines and the [Settings API Guide](http://developer.android.com/guide/topics/ui/settings.html)
+ * for more information on developing a Settings UI.
+ */
+class SettingsActivity : PreferenceActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ matchDressCode()
+ super.onCreate(savedInstanceState)
+ dressCodeName = getThemeName(this)
+ setupActionBar()
+ }
+
+ /**
+ * Set up the [android.app.ActionBar], if the API is available.
+ */
+ private fun setupActionBar() {
+ actionBar?.setDisplayHomeAsUpEnabled(true)
+ }
+
+ fun updateTheme() {
+ dressCodeName = getThemeName(this)
+ }
+
+ /**
+ * Listener for menu item selector
+ */
+ override fun onMenuItemSelected(featureId: Int, item: MenuItem): Boolean {
+ val id = item.itemId
+ if (id == android.R.id.home) {
+ if (!super.onMenuItemSelected(featureId, item)) {
+ NavUtils.navigateUpFromSameTask(this)
+ }
+ return true
+ }
+ return super.onMenuItemSelected(featureId, item)
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ override fun onIsMultiPane(): Boolean {
+ return isXLargeTablet(this)
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+ override fun onBuildHeaders(target: List<PreferenceActivity.Header>) {
+ loadHeadersFromResource(R.xml.pref_headers, target)
+ }
+
+ /**
+ * This method stops fragment injection in malicious applications.
+ * Make sure to deny any unknown fragments here.
+ */
+ override fun isValidFragment(fragmentName: String): Boolean {
+ return PreferenceFragment::class.java.name == fragmentName
+ || GeneralPreferenceFragment::class.java.name == fragmentName
+ || AccountPreferenceFragment::class.java.name == fragmentName
+ }
+
+ /**
+ * This fragment shows general preferences only. It is used when the
+ * activity is showing a two-pane settings UI.
+ */
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+ class GeneralPreferenceFragment : PreferenceFragment() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ addPreferencesFromResource(R.xml.pref_general)
+ setHasOptionsMenu(true)
+ }
+
+ override fun onPreferenceTreeClick(preferenceScreen: PreferenceScreen?, preference: Preference?): Boolean {
+ if (preference?.key == "dark_theme_switch") {
+ (activity as SettingsActivity).updateTheme()
+ return true
+ }
+ return true
+ }
+
+ /**
+ * Listener for action bar option selector
+ */
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ val id = item.itemId
+ if (id == android.R.id.home) {
+ startActivity(Intent(activity, SettingsActivity::class.java))
+ return true
+ }
+ return super.onOptionsItemSelected(item)
+ }
+ }
+
+ /**
+ * This fragment shows general preferences only. It is used when the
+ * activity is showing a two-pane settings UI.
+ */
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+ class AccountPreferenceFragment : PreferenceFragment() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ addPreferencesFromResource(R.xml.pref_account)
+ setHasOptionsMenu(true)
+
+ // Bind the summaries of EditText/List/Dialog/Ringtone preferences
+ // to their values. When their values change, their summaries are
+ // updated to reflect the new value, per the Android Design
+ // guidelines.
+ //bindPreferenceSummaryToValue(findPreference("example_list"))
+ }
+
+ /**
+ * Listener for action bar option selector
+ */
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ val id = item.itemId
+ if (id == android.R.id.home) {
+ startActivity(Intent(activity, SettingsActivity::class.java))
+ return true
+ }
+ return super.onOptionsItemSelected(item)
+ }
+ }
+
+ companion object {
+
+ /**
+ * A preference value change listener that updates the preference's summary
+ * to reflect its new value.
+ */
+ private val sBindPreferenceSummaryToValueListener = Preference.OnPreferenceChangeListener { preference, value ->
+ val stringValue = value.toString()
+
+ if (preference is ListPreference) {
+ // For list preferences, look up the correct display value in
+ // the preference's 'entries' list.
+ val listPreference = preference
+ val index = listPreference.findIndexOfValue(stringValue)
+
+ // Set the summary to reflect the new value.
+ preference.setSummary(
+ if (index >= 0)
+ listPreference.entries[index]
+ else
+ null)
+
+ } else {
+ // For all other preferences, set the summary to the value's
+ // simple string representation.
+ preference.summary = stringValue
+ }
+ true
+ }
+
+ /**
+ * Helper method to determine if the device has an extra-large screen. For
+ * example, 10" tablets are extra-large.
+ */
+ private fun isXLargeTablet(context: Context): Boolean {
+ return context.resources.configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK >= Configuration.SCREENLAYOUT_SIZE_XLARGE
+ }
+
+ /**
+ * Binds a preference's summary to its value. More specifically, when the
+ * preference's value is changed, its summary (line of text below the
+ * preference title) is updated to reflect the value. The summary is also
+ * immediately updated upon calling this method. The exact display format is
+ * dependent on the type of preference.
+
+ * @see .sBindPreferenceSummaryToValueListener
+ */
+ private fun bindPreferenceSummaryToValue(preference: Preference) {
+ // Set the listener to watch for value changes.
+ preference.onPreferenceChangeListener = sBindPreferenceSummaryToValueListener
+
+ // Trigger the listener immediately with the preference's
+ // current value.
+ sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
+ PreferenceManager
+ .getDefaultSharedPreferences(preference.context)
+ .getString(preference.key, ""))
+ }
+ }
+}