@@ -3,50 +3,42 @@ package cc.chenhe.qqnotifyevo.preference
33import android.content.Intent
44import android.os.Bundle
55import android.widget.Toast
6+ import androidx.appcompat.app.AlertDialog
67import androidx.preference.ListPreference
78import androidx.preference.Preference
89import androidx.preference.PreferenceFragmentCompat
10+ import androidx.preference.SwitchPreferenceCompat
11+ import cc.chenhe.qqnotifyevo.MyApplication
912import cc.chenhe.qqnotifyevo.R
1013import cc.chenhe.qqnotifyevo.core.AvatarManager
11- import cc.chenhe.qqnotifyevo.utils.ACTION_DELETE_NEVO_CHANNEL
12- import cc.chenhe.qqnotifyevo.utils.getAvatarCachePeriod
13- import cc.chenhe.qqnotifyevo.utils.getAvatarDiskCacheDir
14+ import cc.chenhe.qqnotifyevo.utils.*
1415
1516class AdvancedFr : PreferenceFragmentCompat () {
1617
18+ private lateinit var deleteLog: Preference
19+
1720 override fun onCreatePreferences (savedInstanceState : Bundle ? , rootKey : String? ) {
1821 setPreferencesFromResource(R .xml.pref_advanced, rootKey)
1922
20- findPreference<ListPreference >(" avatar_cache_period" )?.setSummaryProvider { preference ->
21- if (preference is ListPreference ) {
22- val period: Long = preference.value.toLong() / 1000
23- val day = (period / (24 * 3600 )).toInt()
24- val hour = ((period / 3600 ) % 24 ).toInt()
25- val min = (period / 60 % 60 ).toInt()
26- val sec = (period % 60 ).toInt()
27-
28- val builder = StringBuilder (30 )
29- if (day > 0 ) {
30- builder.append(day)
31- builder.append(getString(R .string.day))
32- }
33- if (hour > 0 ) {
34- builder.append(hour)
35- builder.append(getString(R .string.hour))
36- }
37- if (min > 0 ) {
38- builder.append(min)
39- builder.append(getString(R .string.minute))
40- }
41- if (sec > 0 ) {
42- builder.append(sec)
43- builder.append(getString(R .string.second))
44- }
45- builder.toString()
23+ findPreference<ListPreference >(" avatar_cache_period" )!! .summaryProvider = AvatarCachePeriodSummaryProvider ()
24+ findPreference<SwitchPreferenceCompat >(" log" )!! .setOnPreferenceChangeListener { pref, new ->
25+ if (new as Boolean ) {
26+ AlertDialog .Builder (requireContext())
27+ .setTitle(R .string.tip)
28+ .setMessage(R .string.pref_log_dialog_message)
29+ .setCancelable(false )
30+ .setPositiveButton(R .string.confirm) { _, _ ->
31+ (pref as SwitchPreferenceCompat ).isChecked = true
32+ }
33+ .setNegativeButton(R .string.cancel, null )
34+ .show()
35+ false
4636 } else {
47- " error "
37+ true
4838 }
4939 }
40+ deleteLog = findPreference(" delete_log" )!!
41+ refreshLogSize()
5042 }
5143
5244 override fun onPreferenceTreeClick (preference : Preference ? ): Boolean {
@@ -61,7 +53,55 @@ class AdvancedFr : PreferenceFragmentCompat() {
6153 Toast .makeText(requireContext(), R .string.requested, Toast .LENGTH_SHORT ).show()
6254 return true
6355 }
56+ " delete_log" -> {
57+ AlertDialog .Builder (requireContext())
58+ .setTitle(R .string.tip)
59+ .setMessage(R .string.pref_delete_log_dialog_message)
60+ .setPositiveButton(R .string.confirm) { _, _ ->
61+ (requireContext().applicationContext as MyApplication ).deleteLog()
62+ Toast .makeText(requireContext(), R .string.done, Toast .LENGTH_SHORT ).show()
63+ refreshLogSize()
64+ }
65+ .setNegativeButton(R .string.cancel, null )
66+ .show()
67+ }
6468 }
6569 return super .onPreferenceTreeClick(preference)
6670 }
71+
72+ private fun refreshLogSize () {
73+ val files = getLogDir(requireContext()).listFiles { f -> f.isFile }
74+ val size = files?.sumByDouble { f -> f.length().toDouble() } ? : 0.0
75+ deleteLog.summary = getString(R .string.pref_delete_log_summary,
76+ files?.size ? : 0 , describeFileSize(size.toLong()))
77+ }
78+
79+ private inner class AvatarCachePeriodSummaryProvider : Preference .SummaryProvider <ListPreference > {
80+ override fun provideSummary (preference : ListPreference ): CharSequence {
81+ val period: Long = preference.value.toLong() / 1000
82+ val day = (period / (24 * 3600 )).toInt()
83+ val hour = ((period / 3600 ) % 24 ).toInt()
84+ val min = (period / 60 % 60 ).toInt()
85+ val sec = (period % 60 ).toInt()
86+
87+ val builder = StringBuilder (30 )
88+ if (day > 0 ) {
89+ builder.append(day)
90+ builder.append(getString(R .string.day))
91+ }
92+ if (hour > 0 ) {
93+ builder.append(hour)
94+ builder.append(getString(R .string.hour))
95+ }
96+ if (min > 0 ) {
97+ builder.append(min)
98+ builder.append(getString(R .string.minute))
99+ }
100+ if (sec > 0 ) {
101+ builder.append(sec)
102+ builder.append(getString(R .string.second))
103+ }
104+ return builder.toString()
105+ }
106+ }
67107}
0 commit comments