Skip to content

Commit f2ef93a

Browse files
authored
feat(extension): add set setting delegates (#471)
* feat(extension): add set setting delegates * chore(config): update release drafter config for enhanced autolabeling
1 parent 0d95f2b commit f2ef93a

8 files changed

Lines changed: 59 additions & 125 deletions

File tree

.claude/skills/debug-issue.md

Lines changed: 0 additions & 27 deletions
This file was deleted.

.claude/skills/explore-codebase.md

Lines changed: 0 additions & 28 deletions
This file was deleted.

.claude/skills/refactor-safely.md

Lines changed: 0 additions & 28 deletions
This file was deleted.

.claude/skills/review-changes.md

Lines changed: 0 additions & 29 deletions
This file was deleted.

.github/release-drafter-config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,14 @@ autolabeler:
3535
- label: 'feature'
3636
branch:
3737
- '/feature\/.+/'
38+
- '/feat\/.+/'
3839
- label: 'enhancement'
3940
branch:
4041
- '/enhancement\/.+/'
4142
- label: 'refactor'
4243
branch:
4344
- '/refactor\/.+/'
45+
- '/chore\/.+/'
4446
- label: 'dependencies'
4547
branch:
4648
- '/dependencies\/.+/'

.opencode.json

Lines changed: 0 additions & 13 deletions
This file was deleted.

extension/src/main/kotlin/co/anitrend/arch/extension/preference/PreferenceDelegates.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,3 +211,30 @@ internal class NullableStringPreference(
211211
}
212212
}
213213
}
214+
215+
/**
216+
* [Set<String>] preference delegate
217+
*
218+
* @see ISupportPreferenceDelegate
219+
*/
220+
internal class SetPreference(
221+
override val key: String,
222+
override val default: Set<String> = emptySet(),
223+
) : ISupportPreferenceDelegate<Set<String>> {
224+
override fun getValue(
225+
thisRef: AbstractSetting<Set<String>>,
226+
property: KProperty<*>,
227+
): Set<String> {
228+
return thisRef.preference.getStringSet(key, default) ?: default
229+
}
230+
231+
override fun setValue(
232+
thisRef: AbstractSetting<Set<String>>,
233+
property: KProperty<*>,
234+
value: Set<String>,
235+
) {
236+
thisRef.preference.edit {
237+
putStringSet(key, value)
238+
}
239+
}
240+
}

extension/src/main/kotlin/co/anitrend/arch/extension/settings/SettingDelegates.kt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import co.anitrend.arch.extension.preference.FloatPreference
2525
import co.anitrend.arch.extension.preference.IntPreference
2626
import co.anitrend.arch.extension.preference.LongPreference
2727
import co.anitrend.arch.extension.preference.NullableStringPreference
28+
import co.anitrend.arch.extension.preference.SetPreference
2829
import co.anitrend.arch.extension.preference.StringPreference
2930
import co.anitrend.arch.extension.settings.contract.AbstractSetting
3031
import kotlinx.coroutines.channels.awaitClose
@@ -237,3 +238,32 @@ class NullableStringSetting(
237238
}
238239
}
239240
}
241+
242+
/**
243+
* @since v1.9.0
244+
* @see AbstractSetting
245+
*/
246+
class SetSetting(
247+
key: Int,
248+
default: Set<String>,
249+
resources: Resources,
250+
preference: SharedPreferences,
251+
) : AbstractSetting<Set<String>>(preference, default) {
252+
override val identifier = resources.getString(key)
253+
254+
override var value by SetPreference(identifier, default)
255+
256+
override val flow by lazy(UNSAFE) {
257+
callbackFlow {
258+
val listener =
259+
SettingsListener { _, id ->
260+
if (id == identifier) {
261+
trySendBlocking(value)
262+
.onFailure { Timber.e(it) }
263+
}
264+
}
265+
preference.registerOnSharedPreferenceChangeListener(listener)
266+
awaitClose { preference.unregisterOnSharedPreferenceChangeListener(listener) }
267+
}
268+
}
269+
}

0 commit comments

Comments
 (0)