Improve preference subscribe methods

This commit is contained in:
Suphon Thanakornpakapong
2021-08-05 22:56:20 +07:00
parent 2cf27dbb2c
commit a405fe591b
5 changed files with 23 additions and 14 deletions
@@ -52,7 +52,7 @@ open class LawnchairLauncher : QuickstepLauncher(), LifecycleOwner,
private fun subscribePreferences() {
val preferenceManager = PreferenceManager.getInstance(this)
preferenceManager.launcherTheme.subscribe(this) { updateTheme() }
preferenceManager.launcherTheme.subscribeChanges(this, ::updateTheme)
}
override fun setupViews() {
@@ -26,7 +26,7 @@ class LawnchairAlphabeticalAppsList(context: Context, appsStore: AllAppsStore, i
else -> true
}
}
hiddenApps.subscribe(context.launcher, false) { onAppsUpdated() }
hiddenApps.subscribeChanges(context.launcher, ::onAppsUpdated)
}
override fun updateItemFilter(itemFilter: ItemInfoMatcher?) {
@@ -16,12 +16,12 @@ interface PrefEntry<T> {
fun addListener(listener: PreferenceChangeListener)
fun removeListener(listener: PreferenceChangeListener)
fun subscribe(lifecycleOwner: LifecycleOwner, fireOnAttach: Boolean = true, onChange: Consumer<T>) {
lifecycleOwner.lifecycle.addObserver(PrefLifecycleObserver(this, fireOnAttach, onChange))
fun subscribeChanges(lifecycleOwner: LifecycleOwner, onChange: Runnable) {
lifecycleOwner.lifecycle.addObserver(PrefLifecycleObserver(this, onChange))
}
fun subscribe(view: View, fireOnAttach: Boolean = true, onChange: Consumer<T>) {
val observer = PrefLifecycleObserver(this, fireOnAttach, onChange)
fun subscribeChanges(view: View, onChange: Runnable) {
val observer = PrefLifecycleObserver(this, onChange)
view.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
override fun onViewAttachedToWindow(v: View) {
observer.connectListener()
@@ -33,6 +33,20 @@ interface PrefEntry<T> {
})
}
fun subscribeValues(lifecycleOwner: LifecycleOwner, onChange: Consumer<T>) {
onChange.accept(get())
subscribeChanges(lifecycleOwner) {
onChange.accept(get())
}
}
fun subscribeValues(view: View, onChange: Consumer<T>) {
onChange.accept(get())
subscribeChanges(view) {
onChange.accept(get())
}
}
operator fun getValue(thisObj: Any?, property: KProperty<*>): T = get()
operator fun setValue(thisObj: Any?, property: KProperty<*>, newValue: T) {
set(newValue)
@@ -1,22 +1,17 @@
package app.lawnchair.preferences
import androidx.core.util.Consumer
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
class PrefLifecycleObserver<T>(
private val prefEntry: PrefEntry<T>,
private val fireOnAttach: Boolean,
private val onChange: Consumer<T>
private val onChange: Runnable
) : LifecycleObserver, PreferenceChangeListener {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun connectListener() {
prefEntry.addListener(this)
if (fireOnAttach) {
onPreferenceChange()
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
@@ -25,6 +20,6 @@ class PrefLifecycleObserver<T>(
}
override fun onPreferenceChange() {
onChange.accept(prefEntry.get())
onChange.run()
}
}
@@ -128,7 +128,7 @@ public class OverviewActionsView<T extends OverlayUICallbacks> extends FrameLayo
View clearAllSpace = findViewById(R.id.clear_all_space);
PreferenceManager prefs = PreferenceManager.getInstance(getContext());
prefs.getClearAllAsAction().subscribe(this, true, enabled -> {
prefs.getClearAllAsAction().subscribeValues(this, enabled -> {
if (enabled) {
mClearAllButton.setVisibility(View.VISIBLE);
clearAllSpace.setVisibility(View.VISIBLE);