Improve preference subscribe methods
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user