From a405fe591bcfca2eb4fb04a542de71b465460de4 Mon Sep 17 00:00:00 2001 From: Suphon Thanakornpakapong Date: Thu, 5 Aug 2021 22:56:20 +0700 Subject: [PATCH] Improve preference subscribe methods --- .../src/app/lawnchair/LawnchairLauncher.kt | 2 +- .../allapps/LawnchairAlphabeticalAppsList.kt | 2 +- .../app/lawnchair/preferences/PrefEntry.kt | 22 +++++++++++++++---- .../preferences/PrefLifecycleObserver.kt | 9 ++------ .../quickstep/views/OverviewActionsView.java | 2 +- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt index 580c7c9c2a..cd41f96a43 100644 --- a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt +++ b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt @@ -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() { diff --git a/lawnchair/src/app/lawnchair/allapps/LawnchairAlphabeticalAppsList.kt b/lawnchair/src/app/lawnchair/allapps/LawnchairAlphabeticalAppsList.kt index 89da455027..d007fd990c 100644 --- a/lawnchair/src/app/lawnchair/allapps/LawnchairAlphabeticalAppsList.kt +++ b/lawnchair/src/app/lawnchair/allapps/LawnchairAlphabeticalAppsList.kt @@ -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?) { diff --git a/lawnchair/src/app/lawnchair/preferences/PrefEntry.kt b/lawnchair/src/app/lawnchair/preferences/PrefEntry.kt index 11ee5127ea..fc9b5e0c62 100644 --- a/lawnchair/src/app/lawnchair/preferences/PrefEntry.kt +++ b/lawnchair/src/app/lawnchair/preferences/PrefEntry.kt @@ -16,12 +16,12 @@ interface PrefEntry { fun addListener(listener: PreferenceChangeListener) fun removeListener(listener: PreferenceChangeListener) - fun subscribe(lifecycleOwner: LifecycleOwner, fireOnAttach: Boolean = true, onChange: Consumer) { - 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) { - 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 { }) } + fun subscribeValues(lifecycleOwner: LifecycleOwner, onChange: Consumer) { + onChange.accept(get()) + subscribeChanges(lifecycleOwner) { + onChange.accept(get()) + } + } + + fun subscribeValues(view: View, onChange: Consumer) { + 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) diff --git a/lawnchair/src/app/lawnchair/preferences/PrefLifecycleObserver.kt b/lawnchair/src/app/lawnchair/preferences/PrefLifecycleObserver.kt index 90384a5c54..b0f6b6d40d 100644 --- a/lawnchair/src/app/lawnchair/preferences/PrefLifecycleObserver.kt +++ b/lawnchair/src/app/lawnchair/preferences/PrefLifecycleObserver.kt @@ -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( private val prefEntry: PrefEntry, - private val fireOnAttach: Boolean, - private val onChange: Consumer + 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( } override fun onPreferenceChange() { - onChange.accept(prefEntry.get()) + onChange.run() } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/OverviewActionsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/OverviewActionsView.java index 6ecf163470..34232c8f37 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/OverviewActionsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/OverviewActionsView.java @@ -128,7 +128,7 @@ public class OverviewActionsView 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);