diff --git a/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt index 61b0fe96..b3b0e6f6 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt @@ -45,6 +45,8 @@ import xyz.quaver.pupil.Pupil import xyz.quaver.pupil.R import xyz.quaver.pupil.types.Tags import xyz.quaver.pupil.ui.dialog.DownloadLocationDialog +import xyz.quaver.pupil.ui.fragment.LockFragment +import xyz.quaver.pupil.ui.fragment.SettingsFragment import xyz.quaver.pupil.util.* import java.io.File import java.nio.charset.Charset @@ -82,380 +84,6 @@ class SettingsActivity : AppCompatActivity() { super.onResume() } - class SettingsFragment : PreferenceFragmentCompat() { - - override fun onResume() { - super.onResume() - - val lockManager = LockManager(context!!) - - findPreference("app_lock")?.summary = if (lockManager.locks.isNullOrEmpty()) { - getString(R.string.settings_lock_none) - } else { - lockManager.locks?.joinToString(", ") { - when(it.type) { - Lock.Type.PATTERN -> getString(R.string.settings_lock_pattern) - Lock.Type.PIN -> getString(R.string.settings_lock_pin) - Lock.Type.PASSWORD -> getString(R.string.settings_lock_password) - } - } - } - } - - private fun getDirSize(dir: File) : String { - val size = dir.walk().map { it.length() }.sum() - - return getString(R.string.settings_clear_summary, byteToString(size)) - } - - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.root_preferences, rootKey) - - with(findPreference("app_version")) { - this!! - - val manager = context.packageManager - val info = manager.getPackageInfo(context.packageName, 0) - - summary = context.getString(R.string.settings_app_version_description, info.versionName) - - setOnPreferenceClickListener { - checkUpdate(activity as SettingsActivity, true) - - true - } - } - - with(findPreference("delete_cache")) { - this!! - - val dir = File(context.cacheDir, "imageCache") - - summary = getDirSize(dir) - - onPreferenceClickListener = Preference.OnPreferenceClickListener { - AlertDialog.Builder(context).apply { - setTitle(R.string.warning) - setMessage(R.string.settings_clear_cache_alert_message) - setPositiveButton(android.R.string.yes) { _, _ -> - if (dir.exists()) - dir.deleteRecursively() - - summary = getDirSize(dir) - } - setNegativeButton(android.R.string.no) { _, _ -> } - }.show() - - true - } - } - - with(findPreference("delete_downloads")) { - this!! - - val dir = getDownloadDirectory(context) - - summary = getDirSize(dir) - - onPreferenceClickListener = Preference.OnPreferenceClickListener { - AlertDialog.Builder(context).apply { - setTitle(R.string.warning) - setMessage(R.string.settings_clear_downloads_alert_message) - setPositiveButton(android.R.string.yes) { _, _ -> - if (dir.exists()) - dir.deleteRecursively() - - val downloads = (activity!!.application as Pupil).downloads - - downloads.clear() - - summary = getDirSize(dir) - } - setNegativeButton(android.R.string.no) { _, _ -> } - }.show() - - true - } - } - with(findPreference("clear_history")) { - this!! - - val histories = (activity!!.application as Pupil).histories - - summary = getString(R.string.settings_clear_history_summary, histories.size) - - onPreferenceClickListener = Preference.OnPreferenceClickListener { - AlertDialog.Builder(context).apply { - setTitle(R.string.warning) - setMessage(R.string.settings_clear_history_alert_message) - setPositiveButton(android.R.string.yes) { _, _ -> - histories.clear() - summary = getString(R.string.settings_clear_history_summary, histories.size) - } - setNegativeButton(android.R.string.no) { _, _ -> } - }.show() - - true - } - } - - with(findPreference("dl_location")) { - this!! - - summary = getDownloadDirectory(context).absolutePath - - onPreferenceClickListener = Preference.OnPreferenceClickListener { - DownloadLocationDialog(context).apply { - onDownloadLocationChangedListener = { value -> - PreferenceManager.getDefaultSharedPreferences(context).edit() - .putInt(key, value) - .apply() - summary = getDownloadDirectory(context).absolutePath - } - }.show() - - true - } - } - - with(findPreference("default_query")) { - this!! - - val preferences = PreferenceManager.getDefaultSharedPreferences(context) - - summary = preferences.getString("default_query", "") ?: "" - - val languages = resources.getStringArray(R.array.languages).map { - it.split("|").let { split -> - Pair(split[0], split[1]) - } - }.toMap() - val reverseLanguages = languages.entries.associate { (k, v) -> v to k } - - val excludeBL = "-male:yaoi" - val excludeGuro = listOf("-female:guro", "-male:guro") - - onPreferenceClickListener = Preference.OnPreferenceClickListener { - val dialogView = LayoutInflater.from(context).inflate( - R.layout.dialog_default_query, - LinearLayout(context), - false - ) - - val tags = Tags.parse( - preferences.getString("default_query", "") ?: "" - ) - - summary = tags.toString() - - with(dialogView.default_query_dialog_language_selector) { - adapter = - ArrayAdapter( - context, - android.R.layout.simple_spinner_dropdown_item, - arrayListOf( - getString(R.string.default_query_dialog_language_selector_none) - ).apply { - addAll(languages.values) - } - ) - if (tags.any { it.area == "language" && !it.isNegative }) { - val tag = languages[tags.first { it.area == "language" }.tag] - if (tag != null) { - setSelection( - @Suppress("UNCHECKED_CAST") - (adapter as ArrayAdapter).getPosition(tag) - ) - tags.removeByArea("language", false) - } - } - } - - with(dialogView.default_query_dialog_BL_checkbox) { - isChecked = tags.contains(excludeBL) - if (tags.contains(excludeBL)) - tags.remove(excludeBL) - } - - with(dialogView.default_query_dialog_guro_checkbox) { - isChecked = excludeGuro.all { tags.contains(it) } - if (excludeGuro.all { tags.contains(it) }) - excludeGuro.forEach { - tags.remove(it) - } - } - - with(dialogView.default_query_dialog_edittext) { - setText(tags.toString(), TextView.BufferType.EDITABLE) - addTextChangedListener(object : TextWatcher { - override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} - - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} - - override fun afterTextChanged(s: Editable?) { - s ?: return - - if (s.any { it.isUpperCase() }) - s.replace(0, s.length, s.toString().toLowerCase(Locale.getDefault())) - } - }) - } - - val dialog = AlertDialog.Builder(context!!).apply { - setView(dialogView) - }.create() - - dialogView.default_query_dialog_ok.setOnClickListener { - val newTags = Tags.parse(dialogView.default_query_dialog_edittext.text.toString()) - - with(dialogView.default_query_dialog_language_selector) { - if (selectedItemPosition != 0) - newTags.add("language:${reverseLanguages[selectedItem]}") - } - - if (dialogView.default_query_dialog_BL_checkbox.isChecked) - newTags.add(excludeBL) - - if (dialogView.default_query_dialog_guro_checkbox.isChecked) - excludeGuro.forEach { tag -> - newTags.add(tag) - } - - preferenceManager.sharedPreferences.edit().putString("default_query", newTags.toString()).apply() - summary = preferences.getString("default_query", "") ?: "" - tags.clear() - tags.addAll(newTags) - dialog.dismiss() - } - - dialog.show() - - true - } - } - with(findPreference("app_lock")) { - this!! - - val lockManager = LockManager(context) - - summary = if (lockManager.locks.isNullOrEmpty()) { - getString(R.string.settings_lock_none) - } else { - lockManager.locks?.joinToString(", ") { - when(it.type) { - Lock.Type.PATTERN -> getString(R.string.settings_lock_pattern) - Lock.Type.PIN -> getString(R.string.settings_lock_pin) - Lock.Type.PASSWORD -> getString(R.string.settings_lock_password) - } - } - } - - onPreferenceClickListener = Preference.OnPreferenceClickListener { - val intent = Intent(context, LockActivity::class.java) - activity?.startActivityForResult(intent, (activity as SettingsActivity).REQUEST_LOCK) - - true - } - } - - with(findPreference("dark_mode")) { - this!! - - onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue -> - AppCompatDelegate.setDefaultNightMode(when (newValue as Boolean) { - true -> AppCompatDelegate.MODE_NIGHT_YES - false -> AppCompatDelegate.MODE_NIGHT_NO - }) - - true - } - } - - with(findPreference("backup")) { - this!! - - onPreferenceClickListener = Preference.OnPreferenceClickListener { - File(ContextCompat.getDataDir(context), "favorites.json").copyTo( - File(getDownloadDirectory(context), "favorites.json"), - true - ) - - Snackbar.make(this@SettingsFragment.listView, R.string.settings_backup_snackbar, Snackbar.LENGTH_LONG) - .show() - - true - } - } - - with(findPreference("restore")) { - this!! - - onPreferenceClickListener = Preference.OnPreferenceClickListener { - val intent = Intent(Intent.ACTION_GET_CONTENT).apply { - addCategory(Intent.CATEGORY_OPENABLE) - type = "*/*" - } - - activity?.startActivityForResult(intent, (activity as SettingsActivity).REQUEST_RESTORE) - - true - } - } - } - } - - class LockFragment : PreferenceFragmentCompat() { - - override fun onResume() { - super.onResume() - - val lockManager = LockManager(context!!) - - findPreference("lock_pattern")?.summary = - if (lockManager.contains(Lock.Type.PATTERN)) - getString(R.string.settings_lock_enabled) - else - "" - } - - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.lock_preferences, rootKey) - - with(findPreference("lock_pattern")) { - this!! - - if (LockManager(context!!).contains(Lock.Type.PATTERN)) - summary = getString(R.string.settings_lock_enabled) - - onPreferenceClickListener = Preference.OnPreferenceClickListener { - val lockManager = LockManager(context!!) - - if (lockManager.contains(Lock.Type.PATTERN)) { - AlertDialog.Builder(context).apply { - setTitle(R.string.warning) - setMessage(R.string.settings_lock_remove_message) - - setPositiveButton(android.R.string.yes) { _, _ -> - lockManager.remove(Lock.Type.PATTERN) - onResume() - } - setNegativeButton(android.R.string.no) { _, _ -> } - }.show() - } else { - val intent = Intent(context, LockActivity::class.java).apply { - putExtra("mode", "add_lock") - putExtra("type", "pattern") - } - - startActivity(intent) - } - - true - } - } - } - } - override fun onOptionsItemSelected(item: MenuItem?): Boolean { when (item?.itemId) { android.R.id.home -> onBackPressed() diff --git a/app/src/main/java/xyz/quaver/pupil/ui/dialog/DefaultQueryDialog.kt b/app/src/main/java/xyz/quaver/pupil/ui/dialog/DefaultQueryDialog.kt new file mode 100644 index 00000000..6506cfab --- /dev/null +++ b/app/src/main/java/xyz/quaver/pupil/ui/dialog/DefaultQueryDialog.kt @@ -0,0 +1,141 @@ +/* + * Pupil, Hitomi.la viewer for Android + * Copyright (C) 2020 tom5079 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package xyz.quaver.pupil.ui.dialog + +import android.annotation.SuppressLint +import android.app.AlertDialog +import android.content.Context +import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher +import android.view.LayoutInflater +import android.view.View +import android.widget.ArrayAdapter +import androidx.preference.PreferenceManager +import kotlinx.android.synthetic.main.dialog_default_query.view.* +import xyz.quaver.pupil.R +import xyz.quaver.pupil.types.Tags + +class DefaultQueryDialog(context : Context) : AlertDialog(context) { + + private val languages = context.resources.getStringArray(R.array.languages).map { + it.split("|").let { split -> + Pair(split[0], split[1]) + } + }.toMap() + private val reverseLanguages = languages.entries.associate { (k, v) -> v to k } + + private val excludeBL = "-male:yaoi" + private val excludeGuro = listOf("-female:guro", "-male:guro") + + private lateinit var dialogView : View + + var onPositiveButtonClickListener : ((Tags) -> (Unit))? = null + + @SuppressLint("InflateParams") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_default_query, null) + + initView() + + setContentView(dialogView) + } + + private fun initView() { + val preferences = PreferenceManager.getDefaultSharedPreferences(context) + val tags = Tags.parse( + preferences.getString("default_query", "") ?: "" + ) + + with(dialogView.default_query_dialog_language_selector) { + adapter = + ArrayAdapter( + context, + android.R.layout.simple_spinner_dropdown_item, + arrayListOf( + context.getString(R.string.default_query_dialog_language_selector_none) + ).apply { + addAll(languages.values) + } + ) + if (tags.any { it.area == "language" && !it.isNegative }) { + val tag = languages[tags.first { it.area == "language" }.tag] + if (tag != null) { + setSelection( + @Suppress("UNCHECKED_CAST") + (adapter as ArrayAdapter).getPosition(tag) + ) + tags.removeByArea("language", false) + } + } + } + + with(dialogView.default_query_dialog_BL_checkbox) { + isChecked = tags.contains(excludeBL) + if (tags.contains(excludeBL)) + tags.remove(excludeBL) + } + + with(dialogView.default_query_dialog_guro_checkbox) { + isChecked = excludeGuro.all { tags.contains(it) } + if (excludeGuro.all { tags.contains(it) }) + excludeGuro.forEach { + tags.remove(it) + } + } + + with(dialogView.default_query_dialog_edittext) { + setText(tags.toString(), android.widget.TextView.BufferType.EDITABLE) + addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} + + override fun afterTextChanged(s: Editable?) { + s ?: return + + if (s.any { it.isUpperCase() }) + s.replace(0, s.length, s.toString().toLowerCase(java.util.Locale.getDefault())) + } + }) + } + + dialogView.default_query_dialog_ok.setOnClickListener { + val newTags = Tags.parse(dialogView.default_query_dialog_edittext.text.toString()) + + with(dialogView.default_query_dialog_language_selector) { + if (selectedItemPosition != 0) + newTags.add("language:${reverseLanguages[selectedItem]}") + } + + if (dialogView.default_query_dialog_BL_checkbox.isChecked) + newTags.add(excludeBL) + + if (dialogView.default_query_dialog_guro_checkbox.isChecked) + excludeGuro.forEach { tag -> + newTags.add(tag) + } + + onPositiveButtonClickListener?.invoke(newTags) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/xyz/quaver/pupil/ui/fragment/LockFragment.kt b/app/src/main/java/xyz/quaver/pupil/ui/fragment/LockFragment.kt new file mode 100644 index 00000000..b95900c1 --- /dev/null +++ b/app/src/main/java/xyz/quaver/pupil/ui/fragment/LockFragment.kt @@ -0,0 +1,81 @@ +/* + * Pupil, Hitomi.la viewer for Android + * Copyright (C) 2020 tom5079 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package xyz.quaver.pupil.ui.fragment + +import android.content.Intent +import android.os.Bundle +import androidx.appcompat.app.AlertDialog +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat +import xyz.quaver.pupil.R +import xyz.quaver.pupil.ui.LockActivity +import xyz.quaver.pupil.util.Lock +import xyz.quaver.pupil.util.LockManager + +class LockFragment : PreferenceFragmentCompat() { + + override fun onResume() { + super.onResume() + + val lockManager = LockManager(context!!) + + findPreference("lock_pattern")?.summary = + if (lockManager.contains(Lock.Type.PATTERN)) + getString(R.string.settings_lock_enabled) + else + "" + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.lock_preferences, rootKey) + + with(findPreference("lock_pattern")) { + this!! + + if (LockManager(context!!).contains(Lock.Type.PATTERN)) + summary = getString(R.string.settings_lock_enabled) + + onPreferenceClickListener = Preference.OnPreferenceClickListener { + val lockManager = LockManager(context!!) + + if (lockManager.contains(Lock.Type.PATTERN)) { + AlertDialog.Builder(context).apply { + setTitle(R.string.warning) + setMessage(R.string.settings_lock_remove_message) + + setPositiveButton(android.R.string.yes) { _, _ -> + lockManager.remove(Lock.Type.PATTERN) + onResume() + } + setNegativeButton(android.R.string.no) { _, _ -> } + }.show() + } else { + val intent = Intent(context, LockActivity::class.java).apply { + putExtra("mode", "add_lock") + putExtra("type", "pattern") + } + + startActivity(intent) + } + + true + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/xyz/quaver/pupil/ui/fragment/SettingsFragment.kt b/app/src/main/java/xyz/quaver/pupil/ui/fragment/SettingsFragment.kt new file mode 100644 index 00000000..7657fd5b --- /dev/null +++ b/app/src/main/java/xyz/quaver/pupil/ui/fragment/SettingsFragment.kt @@ -0,0 +1,275 @@ +/* + * Pupil, Hitomi.la viewer for Android + * Copyright (C) 2020 tom5079 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package xyz.quaver.pupil.ui.fragment + +import android.content.Intent +import android.os.Bundle +import androidx.appcompat.app.AlertDialog +import androidx.appcompat.app.AppCompatDelegate +import androidx.core.content.ContextCompat +import androidx.preference.Preference +import androidx.preference.PreferenceCategory +import androidx.preference.PreferenceFragmentCompat +import androidx.preference.PreferenceManager +import com.google.android.material.snackbar.Snackbar +import xyz.quaver.pupil.Pupil +import xyz.quaver.pupil.R +import xyz.quaver.pupil.ui.LockActivity +import xyz.quaver.pupil.ui.SettingsActivity +import xyz.quaver.pupil.ui.dialog.DefaultQueryDialog +import xyz.quaver.pupil.ui.dialog.DownloadLocationDialog +import xyz.quaver.pupil.util.* +import java.io.File + + +class SettingsFragment : + PreferenceFragmentCompat(), + Preference.OnPreferenceClickListener, + Preference.OnPreferenceChangeListener { + + override fun onResume() { + super.onResume() + + val lockManager = LockManager(context!!) + + findPreference("app_lock")?.summary = if (lockManager.locks.isNullOrEmpty()) { + getString(R.string.settings_lock_none) + } else { + lockManager.locks?.joinToString(", ") { + when(it.type) { + Lock.Type.PATTERN -> getString(R.string.settings_lock_pattern) + Lock.Type.PIN -> getString(R.string.settings_lock_pin) + Lock.Type.PASSWORD -> getString(R.string.settings_lock_password) + } + } + } + } + + private fun getDirSize(dir: File) : String { + val size = dir.walk().map { it.length() }.sum() + + return getString(R.string.settings_clear_summary, byteToString(size)) + } + + override fun onPreferenceClick(preference: Preference?): Boolean { + with (preference) { + this ?: return false + + when (key) { + "app_version" -> { + checkUpdate(activity as SettingsActivity, true) + } + "delete_cache" -> { + val dir = File(context.cacheDir, "imageCache") + + AlertDialog.Builder(context).apply { + setTitle(R.string.warning) + setMessage(R.string.settings_clear_cache_alert_message) + setPositiveButton(android.R.string.yes) { _, _ -> + if (dir.exists()) + dir.deleteRecursively() + + summary = getDirSize(dir) + } + setNegativeButton(android.R.string.no) { _, _ -> } + }.show() + } + "delete_downloads" -> { + val dir = getDownloadDirectory(context) + + AlertDialog.Builder(context).apply { + setTitle(R.string.warning) + setMessage(R.string.settings_clear_downloads_alert_message) + setPositiveButton(android.R.string.yes) { _, _ -> + if (dir.exists()) + dir.deleteRecursively() + + val downloads = (activity!!.application as Pupil).downloads + + downloads.clear() + + summary = getDirSize(dir) + } + setNegativeButton(android.R.string.no) { _, _ -> } + }.show() + } + "clear_history" -> { + val histories = (context.applicationContext as Pupil).histories + + AlertDialog.Builder(context).apply { + setTitle(R.string.warning) + setMessage(R.string.settings_clear_history_alert_message) + setPositiveButton(android.R.string.yes) { _, _ -> + histories.clear() + summary = getString(R.string.settings_clear_history_summary, histories.size) + } + setNegativeButton(android.R.string.no) { _, _ -> } + }.show() + } + "dl_location" -> { + DownloadLocationDialog(context).apply { + onDownloadLocationChangedListener = { value -> + PreferenceManager.getDefaultSharedPreferences(context).edit() + .putInt(key, value) + .apply() + summary = getDownloadDirectory(context).absolutePath + } + }.show() + } + "default_query" -> { + DefaultQueryDialog(context).apply { + onPositiveButtonClickListener = { newTags -> + sharedPreferences.edit().putString("default_query", newTags.toString()).apply() + summary = newTags.toString() + } + }.show() + } + "app_lock" -> { + val intent = Intent(context, LockActivity::class.java) + activity?.startActivityForResult(intent, (activity as SettingsActivity).REQUEST_LOCK) + } + "backup" -> { + File(ContextCompat.getDataDir(context), "favorites.json").copyTo( + File(getDownloadDirectory(context), "favorites.json"), + true + ) + + Snackbar.make(this@SettingsFragment.listView, R.string.settings_backup_snackbar, Snackbar.LENGTH_LONG) + .show() + } + "restore" -> { + val intent = Intent(Intent.ACTION_GET_CONTENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "*/*" + } + + activity?.startActivityForResult(intent, (activity as SettingsActivity).REQUEST_RESTORE) + } + else -> return false + } + } + + return true + } + + override fun onPreferenceChange(preference: Preference?, newValue: Any?): Boolean { + with (preference) { + this ?: return false + + when (key) { + "dark_mode" -> { + AppCompatDelegate.setDefaultNightMode(when (newValue as Boolean) { + true -> AppCompatDelegate.MODE_NIGHT_YES + false -> AppCompatDelegate.MODE_NIGHT_NO + }) + } + else -> return false + } + } + + return true + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.root_preferences, rootKey) + + initPreferences() + } + + private fun initPreferences() { + for (i in 0 until preferenceScreen.preferenceCount) { + + preferenceScreen.getPreference(i).run { + if (this is PreferenceCategory) + (0 until preferenceCount).map { getPreference(it) } + else + listOf(this) + }.forEach { preference -> + with (preference) { + + when (key) { + "app_version" -> { + val manager = context.packageManager + val info = manager.getPackageInfo(context.packageName, 0) + summary = context.getString(R.string.settings_app_version_description, info.versionName) + + onPreferenceClickListener = this@SettingsFragment + } + "delete_cache" -> { + val dir = File(context.cacheDir, "imageCache") + summary = getDirSize(dir) + + onPreferenceClickListener = this@SettingsFragment + } + "delete_downloads" -> { + val dir = getDownloadDirectory(context) + summary = getDirSize(dir) + + onPreferenceClickListener = this@SettingsFragment + } + "clear_history" -> { + val histories = (activity!!.application as Pupil).histories + summary = getString(R.string.settings_clear_history_summary, histories.size) + + onPreferenceClickListener = this@SettingsFragment + } + "dl_location" -> { + summary = getDownloadDirectory(context).absolutePath + + onPreferenceClickListener = this@SettingsFragment + } + "default_query" -> { + val preferences = PreferenceManager.getDefaultSharedPreferences(context) + summary = preferences.getString("default_query", "") ?: "" + + onPreferenceClickListener = this@SettingsFragment + } + "app_lock" -> { + val lockManager = LockManager(context) + summary = + if (lockManager.locks.isNullOrEmpty()) { + getString(R.string.settings_lock_none) + } else { + lockManager.locks?.joinToString(", ") { + when (it.type) { + Lock.Type.PATTERN -> getString(R.string.settings_lock_pattern) + Lock.Type.PIN -> getString(R.string.settings_lock_pin) + Lock.Type.PASSWORD -> getString(R.string.settings_lock_password) + } + } + } + + onPreferenceClickListener = this@SettingsFragment + } + "dark_mode" -> { + onPreferenceChangeListener = this@SettingsFragment + } + "backup" -> { + onPreferenceClickListener = this@SettingsFragment + } + "restore" -> { + onPreferenceClickListener = this@SettingsFragment + } + } + + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/xyz/quaver/pupil/util/misc.kt b/app/src/main/java/xyz/quaver/pupil/util/misc.kt index 342e794b..67cbbf77 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/misc.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/misc.kt @@ -18,10 +18,12 @@ package xyz.quaver.pupil.util +import android.annotation.SuppressLint import java.util.* import kotlin.collections.ArrayList import kotlin.math.round +@SuppressLint("DefaultLocale") @UseExperimental(ExperimentalStdlibApi::class) fun String.wordCapitalize() : String { val result = ArrayList() @@ -32,14 +34,6 @@ fun String.wordCapitalize() : String { return result.joinToString(" ") } - -//https://discuss.kotlinlang.org/t/how-do-you-round-a-number-to-n-decimal-places/8843(fvasco) -fun Double.round(decimals: Int): Double { - var multiplier = 1.0 - repeat(decimals) { multiplier *= 10 } - return round(this * multiplier) / multiplier -} - fun byteToString(byte: Long, precision : Int = 1) : String { val suffix = listOf( @@ -56,6 +50,6 @@ fun byteToString(byte: Long, precision : Int = 1) : String { suffixIndex++ } - return "${size.round(precision)} ${suffix[suffixIndex]}" + return "%.${precision}f ${suffix[suffixIndex]}".format(size) } \ No newline at end of file