diff options
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/view/SettingFragment.kt')
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/view/SettingFragment.kt | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/SettingFragment.kt b/app/src/main/java/net/lacolaco/smileessence/view/SettingFragment.kt new file mode 100644 index 00000000..05490f97 --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/view/SettingFragment.kt @@ -0,0 +1,140 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2012-2014 lacolaco.net + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package net.lacolaco.smileessence.view + +import android.app.AlertDialog +import android.content.Intent +import android.content.SharedPreferences +import android.os.Bundle +import android.preference.EditTextPreference +import android.preference.ListPreference +import android.preference.Preference +import android.preference.PreferenceFragment +import android.text.TextUtils +import android.view.LayoutInflater +import android.view.View +import android.widget.TextView +import net.lacolaco.smileessence.Application +import net.lacolaco.smileessence.BuildConfig +import net.lacolaco.smileessence.R +import net.lacolaco.smileessence.activity.LicenseActivity + +import android.content.SharedPreferences.OnSharedPreferenceChangeListener + +class SettingFragment : PreferenceFragment(), OnSharedPreferenceChangeListener, Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener { + override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean { + val newValueStr = newValue.toString() + if (preference.key.contentEquals(getString(R.string.key_setting_text_size))) { + if (TextUtils.isDigitsOnly(newValueStr)) { + return true + } else { + Application.toast(R.string.error_setting_text_size_not_number) + } + return false + } else if (preference.key.contentEquals(getString(R.string.key_setting_theme))) { + Application.toast(R.string.notice_theme_changed) + } + return true + } + + // --------------------- Interface OnPreferenceClickListener --------------------- + + override fun onPreferenceClick(preference: Preference): Boolean { + val key = preference.key + if (key.contentEquals(getString(R.string.key_setting_application_information))) { + openAppInfoDialog() + } else if (key.contentEquals(getString(R.string.key_setting_licenses))) { + openLicenseActivity() + } + return true + } + + // --------------------- Interface OnSharedPreferenceChangeListener --------------------- + + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) { + setSummaryCurrentValue() + } + + // ------------------------ OVERRIDE METHODS ------------------------ + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + addPreferencesFromResource(R.xml.setting) + val textSizePreference = findPreference(R.string.key_setting_text_size) as EditTextPreference + textSizePreference.summary = textSizePreference.text + textSizePreference.onPreferenceChangeListener = this + val themePreference = findPreference(R.string.key_setting_theme) as ListPreference + themePreference.summary = themePreference.entry + themePreference.onPreferenceChangeListener = this + val appInfoPreference = findPreference(R.string.key_setting_application_information) + appInfoPreference.onPreferenceClickListener = this + appInfoPreference.summary = BuildConfig.VERSION_NAME + " (" + BuildConfig.VERSION_CODE + ")" + val license = findPreference(R.string.key_setting_licenses) + license.onPreferenceClickListener = this + } + + override fun onPause() { + super.onPause() + val sharedPreferences = preferenceScreen.sharedPreferences + sharedPreferences.unregisterOnSharedPreferenceChangeListener(this) + } + + override fun onResume() { + super.onResume() + val sharedPreferences = preferenceScreen.sharedPreferences + sharedPreferences.registerOnSharedPreferenceChangeListener(this) + } + + // -------------------------- OTHER METHODS -------------------------- + + fun findPreference(preferenceResID: Int): Preference { + return findPreference(getString(preferenceResID)) + } + + private fun openLicenseActivity() { + val intent = Intent(activity, LicenseActivity::class.java) + activity.startActivity(intent) + } + + private fun openAppInfoDialog() { + val inflater = activity.layoutInflater + val contentView = inflater.inflate(R.layout.dialog_app_info, null) + val versionTextView = contentView.findViewById(R.id.versionTextView) as TextView + versionTextView.text = BuildConfig.VERSION_NAME + " (rev: " + BuildConfig.VERSION_CODE + "; upstream: " + getString(R.string.app_version_full) + ")" + + AlertDialog.Builder(activity) + .setTitle(R.string.dialog_title_about) + .setView(contentView) + .setPositiveButton(R.string.alert_dialog_ok) { dialog, which -> dialog.dismiss() } + .create().show() + } + + private fun setSummaryCurrentValue() { + val textSizePreference = findPreference(R.string.key_setting_text_size) as EditTextPreference + textSizePreference.summary = textSizePreference.text + val themePreference = findPreference(R.string.key_setting_theme) as ListPreference + themePreference.summary = themePreference.entry + } +} |