From 6dad9352a51311d54b85d6d41fa307bb411e207e Mon Sep 17 00:00:00 2001 From: Kshitij Gupta Date: Thu, 6 May 2021 02:21:57 +0530 Subject: [PATCH 1/2] Lawnchair: Make GNow feed toggleable - Convert to PreferenceManager - TODO: Add checks for package changes, disable pref if !OverlayCallbackImpl.minusOneAvailable(ctx) --- lawnchair/res/values/strings.xml | 1 + lawnchair/src/app/lawnchair/FeedBridge.kt | 2 +- .../src/app/lawnchair/LawnchairLauncher.kt | 4 ++- .../lawnchair/LawnchairLauncherQuickstep.kt | 3 ++- .../nexuslauncher/OverlayCallbackImpl.java | 27 +++++++++---------- .../ui/preferences/HomeScreenPreferences.kt | 5 ++++ .../util/preferences/PreferenceManager.kt | 12 +++++++-- 7 files changed, 35 insertions(+), 19 deletions(-) diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml index d951b2e17f..e41e908e04 100644 --- a/lawnchair/res/values/strings.xml +++ b/lawnchair/res/values/strings.xml @@ -83,4 +83,5 @@ Show Search Bar + Show Feed diff --git a/lawnchair/src/app/lawnchair/FeedBridge.kt b/lawnchair/src/app/lawnchair/FeedBridge.kt index 43f6475ef9..d0eb4dcd4d 100644 --- a/lawnchair/src/app/lawnchair/FeedBridge.kt +++ b/lawnchair/src/app/lawnchair/FeedBridge.kt @@ -34,7 +34,7 @@ import com.android.launcher3.Utilities class FeedBridge(private val context: Context) { private val shouldUseFeed = context.applicationInfo.flags and FLAG_SYSTEM == 0 - private val prefs = PreferenceManager.getInstance(context) + private val prefs by lazy { PreferenceManager.getInstance(context) } private val bridgePackages by lazy { listOf( PixelBridgeInfo("com.google.android.apps.nexuslauncher", R.integer.bridge_signature_hash), diff --git a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt index 578aad6097..9a72aa5f30 100644 --- a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt +++ b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt @@ -26,9 +26,11 @@ import com.android.launcher3.LauncherAppState open class LawnchairLauncher : Launcher() { private var paused = false + public var defaultOverlay: OverlayCallbackImpl? = null override fun getDefaultOverlay(): LauncherOverlayManager { - return OverlayCallbackImpl(this) + defaultOverlay = OverlayCallbackImpl(this) + return defaultOverlay!! } override fun onResume() { diff --git a/lawnchair/src/app/lawnchair/LawnchairLauncherQuickstep.kt b/lawnchair/src/app/lawnchair/LawnchairLauncherQuickstep.kt index 9f622ebde6..1570ffbf53 100644 --- a/lawnchair/src/app/lawnchair/LawnchairLauncherQuickstep.kt +++ b/lawnchair/src/app/lawnchair/LawnchairLauncherQuickstep.kt @@ -31,6 +31,7 @@ import com.android.launcher3.LauncherAppState open class LawnchairLauncherQuickstep : QuickstepLauncher(), LifecycleOwner { private val lifecycleRegistry = LifecycleRegistry(this) + val defaultOverlay by lazy { OverlayCallbackImpl(this) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -68,7 +69,7 @@ open class LawnchairLauncherQuickstep : QuickstepLauncher(), LifecycleOwner { } override fun getDefaultOverlay(): LauncherOverlayManager { - return OverlayCallbackImpl(this) + return defaultOverlay } open fun restartIfPending() { diff --git a/lawnchair/src/app/lawnchair/nexuslauncher/OverlayCallbackImpl.java b/lawnchair/src/app/lawnchair/nexuslauncher/OverlayCallbackImpl.java index 2e1c1316d6..e99dca209e 100644 --- a/lawnchair/src/app/lawnchair/nexuslauncher/OverlayCallbackImpl.java +++ b/lawnchair/src/app/lawnchair/nexuslauncher/OverlayCallbackImpl.java @@ -3,9 +3,11 @@ package app.lawnchair.nexuslauncher; import static android.content.pm.ApplicationInfo.FLAG_SYSTEM; import android.app.Activity; +import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; +import android.util.Log; import com.android.launcher3.Launcher; import com.android.launcher3.Utilities; @@ -18,6 +20,7 @@ import com.google.android.libraries.launcherclient.LauncherClientCallbacks; import com.google.android.libraries.launcherclient.StaticInteger; import app.lawnchair.FeedBridge; +import app.lawnchair.util.preferences.PreferenceManager; /** * Implements {@link LauncherOverlay} and passes all the corresponding events to {@link @@ -28,7 +31,7 @@ import app.lawnchair.FeedBridge; */ public class OverlayCallbackImpl implements LauncherOverlay, LauncherClientCallbacks, LauncherOverlayManager, - OnSharedPreferenceChangeListener, ISerializableScrollCallback { + ISerializableScrollCallback { // TODO: migrate to PreferenceManager final static String ENABLE_MINUS_ONE = "pref_enableMinusOne"; @@ -43,13 +46,11 @@ public class OverlayCallbackImpl private int mFlags; public OverlayCallbackImpl(Launcher launcher) { - SharedPreferences prefs = Utilities.getPrefs(launcher); + PreferenceManager prefs = PreferenceManager.getInstance(launcher); mLauncher = launcher; mClient = new LauncherClient(mLauncher, this, new StaticInteger( - (prefs.getBoolean(ENABLE_MINUS_ONE, - minusOneAvailable()) ? 1 : 0) | 2 | 4 | 8)); - prefs.registerOnSharedPreferenceChangeListener(this); + (prefs.getMinusOneEnable().get() ? 1 : 0) | 2 | 4 | 8)); } @Override @@ -118,14 +119,12 @@ public class OverlayCallbackImpl @Override public void onActivityDestroyed(Activity activity) { mClient.mDestroyed = true; - mLauncher.getSharedPrefs().unregisterOnSharedPreferenceChangeListener(this); } - @Override - public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { - if (ENABLE_MINUS_ONE.equals(key)) { - mClient.showOverlay(prefs.getBoolean(ENABLE_MINUS_ONE, minusOneAvailable())); - } + public void onMinusOneChanged() { + PreferenceManager prefs = PreferenceManager.getInstance(mLauncher); + boolean enable = prefs.getMinusOneEnable().get(); + mLauncher.setLauncherOverlay(enable ? this : null); } @Override @@ -178,8 +177,8 @@ public class OverlayCallbackImpl } } - boolean minusOneAvailable() { - return FeedBridge.useBridge(mLauncher) - || ((mLauncher.getApplicationInfo().flags & FLAG_SYSTEM) == FLAG_SYSTEM); + public static boolean minusOneAvailable(Context context) { + return FeedBridge.useBridge(context) + || ((context.getApplicationInfo().flags & FLAG_SYSTEM) == FLAG_SYSTEM); } } \ No newline at end of file diff --git a/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt index 5c186a9494..b5d8ac5fed 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt @@ -42,6 +42,11 @@ fun HomeScreenPreferences() { pageMeta.provide(Meta(title = stringResource(id = R.string.home_screen_label))) PreferenceLayout { PreferenceGroup(heading = "General", isFirstChild = true) { + SwitchPreference( + prefs.minusOneEnable.getAdapter(), + label = stringResource(id = R.string.minus_one_enable), + showDivider = true + ) SwitchPreference( prefs.addIconToHome.getAdapter(), label = stringResource(id = R.string.auto_add_shortcuts_label), diff --git a/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt b/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt index 0866f60e31..f584382513 100644 --- a/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt +++ b/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt @@ -20,11 +20,10 @@ import android.content.Context import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import app.lawnchair.LawnchairLauncher -import app.lawnchair.LawnchairLauncherQuickstep import app.lawnchair.launcher +import app.lawnchair.nexuslauncher.OverlayCallbackImpl import com.android.launcher3.BuildConfig import com.android.launcher3.LauncherAppState -import com.android.launcher3.pm.UserCache import com.android.launcher3.util.MainThreadInitializedObject class PreferenceManager private constructor(context: Context) : BasePreferenceManager(context) { @@ -40,6 +39,14 @@ class PreferenceManager private constructor(context: Context) : BasePreferenceMa LawnchairLauncher.getLauncher(context).scheduleRestart() } } + + private val reloadMinusOne = { + if (BuildConfig.FLAVOR_recents == "withQuickstep") { + context.launcher.defaultOverlay.onMinusOneChanged() + } else { + LawnchairLauncher.getLauncher(context).defaultOverlay!!.onMinusOneChanged() + } + } private val reloadGrid = scheduleRestart val hiddenAppSet = StringSetPref("hidden-app-set", setOf()) @@ -59,6 +66,7 @@ class PreferenceManager private constructor(context: Context) : BasePreferenceMa val allAppsTextSizeFactor = FloatPref("pref_allAppsTextSizeFactor", 1F, scheduleRestart) val allAppsColumns = IdpIntPref("pref_allAppsColumns", { numAllAppsColumns }, reloadGrid) val smartSpaceEnable = BoolPref("pref_smartSpaceEnable", true, scheduleRestart) + val minusOneEnable = BoolPref("pref_enableMinusOne", OverlayCallbackImpl.minusOneAvailable(context), reloadMinusOne) // TODO: Add the ability to manually delete empty pages. val allowEmptyPages = BoolPref("pref_allowEmptyPages", false) From 50ba95f0cf0fe20dac67eef5c9dac1d65133ad2e Mon Sep 17 00:00:00 2001 From: Suphon Thanakornpakapong Date: Thu, 3 Jun 2021 13:47:55 +0700 Subject: [PATCH 2/2] Subscribe minusOne pref through listener --- .../src/app/lawnchair/LawnchairLauncher.kt | 6 ------ .../nexuslauncher/OverlayCallbackImpl.java | 18 ++++++------------ .../util/preferences/PreferenceManager.kt | 9 +-------- 3 files changed, 7 insertions(+), 26 deletions(-) diff --git a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt index 9a72aa5f30..95d984388b 100644 --- a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt +++ b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt @@ -26,12 +26,6 @@ import com.android.launcher3.LauncherAppState open class LawnchairLauncher : Launcher() { private var paused = false - public var defaultOverlay: OverlayCallbackImpl? = null - - override fun getDefaultOverlay(): LauncherOverlayManager { - defaultOverlay = OverlayCallbackImpl(this) - return defaultOverlay!! - } override fun onResume() { super.onResume() diff --git a/lawnchair/src/app/lawnchair/nexuslauncher/OverlayCallbackImpl.java b/lawnchair/src/app/lawnchair/nexuslauncher/OverlayCallbackImpl.java index e99dca209e..5a541b62ce 100644 --- a/lawnchair/src/app/lawnchair/nexuslauncher/OverlayCallbackImpl.java +++ b/lawnchair/src/app/lawnchair/nexuslauncher/OverlayCallbackImpl.java @@ -4,22 +4,20 @@ import static android.content.pm.ApplicationInfo.FLAG_SYSTEM; import android.app.Activity; import android.content.Context; -import android.content.SharedPreferences; -import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; -import android.util.Log; import com.android.launcher3.Launcher; import com.android.launcher3.Utilities; import com.android.systemui.plugins.shared.LauncherOverlayManager; import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlay; - import com.google.android.libraries.launcherclient.ISerializableScrollCallback; import com.google.android.libraries.launcherclient.LauncherClient; import com.google.android.libraries.launcherclient.LauncherClientCallbacks; import com.google.android.libraries.launcherclient.StaticInteger; import app.lawnchair.FeedBridge; +import app.lawnchair.LawnchairLauncherQuickstep; +import app.lawnchair.util.preferences.PrefEntry; import app.lawnchair.util.preferences.PreferenceManager; /** @@ -45,12 +43,14 @@ public class OverlayCallbackImpl boolean mFlagsChanged = false; private int mFlags; - public OverlayCallbackImpl(Launcher launcher) { + public OverlayCallbackImpl(LawnchairLauncherQuickstep launcher) { PreferenceManager prefs = PreferenceManager.getInstance(launcher); + PrefEntry minusOnePref = prefs.getMinusOneEnable(); mLauncher = launcher; mClient = new LauncherClient(mLauncher, this, new StaticInteger( - (prefs.getMinusOneEnable().get() ? 1 : 0) | 2 | 4 | 8)); + (minusOnePref.get() ? 1 : 0) | 2 | 4 | 8)); + minusOnePref.subscribe(launcher, (enabled) -> mLauncher.setLauncherOverlay(enabled ? this : null)); } @Override @@ -121,12 +121,6 @@ public class OverlayCallbackImpl mClient.mDestroyed = true; } - public void onMinusOneChanged() { - PreferenceManager prefs = PreferenceManager.getInstance(mLauncher); - boolean enable = prefs.getMinusOneEnable().get(); - mLauncher.setLauncherOverlay(enable ? this : null); - } - @Override public void onOverlayScrollChanged(float progress) { if (mLauncherOverlayCallbacks != null) { diff --git a/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt b/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt index f584382513..1ed3209acc 100644 --- a/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt +++ b/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt @@ -40,13 +40,6 @@ class PreferenceManager private constructor(context: Context) : BasePreferenceMa } } - private val reloadMinusOne = { - if (BuildConfig.FLAVOR_recents == "withQuickstep") { - context.launcher.defaultOverlay.onMinusOneChanged() - } else { - LawnchairLauncher.getLauncher(context).defaultOverlay!!.onMinusOneChanged() - } - } private val reloadGrid = scheduleRestart val hiddenAppSet = StringSetPref("hidden-app-set", setOf()) @@ -66,7 +59,7 @@ class PreferenceManager private constructor(context: Context) : BasePreferenceMa val allAppsTextSizeFactor = FloatPref("pref_allAppsTextSizeFactor", 1F, scheduleRestart) val allAppsColumns = IdpIntPref("pref_allAppsColumns", { numAllAppsColumns }, reloadGrid) val smartSpaceEnable = BoolPref("pref_smartSpaceEnable", true, scheduleRestart) - val minusOneEnable = BoolPref("pref_enableMinusOne", OverlayCallbackImpl.minusOneAvailable(context), reloadMinusOne) + val minusOneEnable = BoolPref("pref_enableMinusOne", OverlayCallbackImpl.minusOneAvailable(context)) // TODO: Add the ability to manually delete empty pages. val allowEmptyPages = BoolPref("pref_allowEmptyPages", false)