-
-
Notifications
You must be signed in to change notification settings - Fork 7
/
RssConfigFragment.kt
126 lines (121 loc) · 5.48 KB
/
RssConfigFragment.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.skyd.anivu.ui.fragment.settings.rssconfig
import android.content.Context
import android.os.Bundle
import androidx.lifecycle.lifecycleScope
import androidx.preference.DropDownPreference
import androidx.preference.ListPreference
import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceScreen
import androidx.preference.SwitchPreferenceCompat
import com.skyd.anivu.R
import com.skyd.anivu.base.BasePreferenceFragmentCompat
import com.skyd.anivu.ext.dataStore
import com.skyd.anivu.ext.getOrDefault
import com.skyd.anivu.model.preference.rss.ParseLinkTagAsEnclosurePreference
import com.skyd.anivu.model.preference.rss.RssSyncBatteryNotLowConstraintPreference
import com.skyd.anivu.model.preference.rss.RssSyncChargingConstraintPreference
import com.skyd.anivu.model.preference.rss.RssSyncFrequencyPreference
import com.skyd.anivu.model.preference.rss.RssSyncWifiConstraintPreference
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class RssConfigFragment : BasePreferenceFragmentCompat() {
override val title by lazy { resources.getString(R.string.rss_config_fragment_name) }
override fun Context.onAddPreferences(
savedInstanceState: Bundle?,
rootKey: String?,
screen: PreferenceScreen
) {
val rssSyncCategory = PreferenceCategory(this).apply {
key = "rssSyncCategory"
title = getString(R.string.rss_config_fragment_sync_category)
screen.addPreference(this)
}
DropDownPreference(this).apply {
key = "rssSyncFrequency"
title = getString(R.string.rss_config_fragment_sync_frequency)
setIcon(R.drawable.ic_timer_24)
value = context.dataStore.getOrDefault(RssSyncFrequencyPreference).toString()
summaryProvider = ListPreference.SimpleSummaryProvider.getInstance()
entries = RssSyncFrequencyPreference.frequencies.map {
RssSyncFrequencyPreference.toDisplayName(context, it)
}.toTypedArray()
entryValues =
RssSyncFrequencyPreference.frequencies.map { it.toString() }.toTypedArray()
setOnPreferenceChangeListener { _, newValue ->
RssSyncFrequencyPreference.put(
requireContext(), lifecycleScope, (newValue as String).toLong(),
)
true
}
rssSyncCategory.addPreference(this)
}
SwitchPreferenceCompat(this).apply {
key = "rssSyncWifiConstraint"
title = getString(R.string.rss_config_fragment_sync_wifi_constraint)
setIcon(R.drawable.ic_wifi_24)
isChecked = requireContext().dataStore.getOrDefault(RssSyncWifiConstraintPreference)
setOnPreferenceChangeListener { _, newValue ->
RssSyncWifiConstraintPreference.put(
context = requireContext(),
scope = lifecycleScope,
value = newValue as Boolean,
)
true
}
rssSyncCategory.addPreference(this)
}
SwitchPreferenceCompat(this).apply {
key = "rssSyncChargingConstraint"
title = getString(R.string.rss_config_fragment_sync_charging_constraint)
setIcon(R.drawable.ic_battery_charging_full_24)
isChecked = requireContext().dataStore.getOrDefault(RssSyncChargingConstraintPreference)
setOnPreferenceChangeListener { _, newValue ->
RssSyncChargingConstraintPreference.put(
context = requireContext(),
scope = lifecycleScope,
value = newValue as Boolean,
)
true
}
rssSyncCategory.addPreference(this)
}
SwitchPreferenceCompat(this).apply {
key = "rssSyncBatteryNotLowConstraint"
title = getString(R.string.rss_config_fragment_sync_battery_not_low_constraint)
setIcon(R.drawable.ic_battery_full_alt_24)
isChecked =
requireContext().dataStore.getOrDefault(RssSyncBatteryNotLowConstraintPreference)
setOnPreferenceChangeListener { _, newValue ->
RssSyncBatteryNotLowConstraintPreference.put(
context = requireContext(),
scope = lifecycleScope,
value = newValue as Boolean,
)
true
}
rssSyncCategory.addPreference(this)
}
val rssParseCategory = PreferenceCategory(this).apply {
key = "rssParseCategory"
title = getString(R.string.rss_config_fragment_parse_category)
screen.addPreference(this)
}
SwitchPreferenceCompat(this).apply {
key = "parseLinkTagAsEnclosure"
title = getString(R.string.rss_config_fragment_parse_link_tag_as_enclosure)
summary =
getString(R.string.rss_config_fragment_parse_link_tag_as_enclosure_description)
setIcon(R.drawable.ic_link_24)
isChecked = requireContext().dataStore.getOrDefault(ParseLinkTagAsEnclosurePreference)
setOnPreferenceChangeListener { _, newValue ->
ParseLinkTagAsEnclosurePreference.put(
context = requireContext(),
scope = lifecycleScope,
value = newValue as Boolean,
)
true
}
rssParseCategory.addPreference(this)
}
}
}