diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml
index ab0ee8e565..b5da9c326e 100644
--- a/lawnchair/res/values/strings.xml
+++ b/lawnchair/res/values/strings.xml
@@ -89,4 +89,5 @@
Accessibility service required
To use Double Tap to Sleep, enable the accessibility service.
Open Settings
+ 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..95d984388b 100644
--- a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt
+++ b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt
@@ -27,10 +27,6 @@ import com.android.launcher3.LauncherAppState
open class LawnchairLauncher : Launcher() {
private var paused = false
- override fun getDefaultOverlay(): LauncherOverlayManager {
- return OverlayCallbackImpl(this)
- }
-
override fun onResume() {
super.onResume()
diff --git a/lawnchair/src/app/lawnchair/LawnchairLauncherQuickstep.kt b/lawnchair/src/app/lawnchair/LawnchairLauncherQuickstep.kt
index a4607f8dc0..fe1f2fcd44 100644
--- a/lawnchair/src/app/lawnchair/LawnchairLauncherQuickstep.kt
+++ b/lawnchair/src/app/lawnchair/LawnchairLauncherQuickstep.kt
@@ -47,6 +47,7 @@ open class LawnchairLauncherQuickstep : QuickstepLauncher(), LifecycleOwner,
super.onBackPressed()
}
val gestureController by lazy { GestureController(this) }
+ private val defaultOverlay by lazy { OverlayCallbackImpl(this) }
override fun setupViews() {
super.setupViews()
@@ -109,7 +110,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..5a541b62ce 100644
--- a/lawnchair/src/app/lawnchair/nexuslauncher/OverlayCallbackImpl.java
+++ b/lawnchair/src/app/lawnchair/nexuslauncher/OverlayCallbackImpl.java
@@ -3,21 +3,22 @@ package app.lawnchair.nexuslauncher;
import static android.content.pm.ApplicationInfo.FLAG_SYSTEM;
import android.app.Activity;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.content.Context;
import android.os.Bundle;
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;
/**
* Implements {@link LauncherOverlay} and passes all the corresponding events to {@link
@@ -28,7 +29,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";
@@ -42,14 +43,14 @@ public class OverlayCallbackImpl
boolean mFlagsChanged = false;
private int mFlags;
- public OverlayCallbackImpl(Launcher launcher) {
- SharedPreferences prefs = Utilities.getPrefs(launcher);
+ public OverlayCallbackImpl(LawnchairLauncherQuickstep launcher) {
+ PreferenceManager prefs = PreferenceManager.getInstance(launcher);
+ PrefEntry minusOnePref = prefs.getMinusOneEnable();
mLauncher = launcher;
mClient = new LauncherClient(mLauncher, this, new StaticInteger(
- (prefs.getBoolean(ENABLE_MINUS_ONE,
- minusOneAvailable()) ? 1 : 0) | 2 | 4 | 8));
- prefs.registerOnSharedPreferenceChangeListener(this);
+ (minusOnePref.get() ? 1 : 0) | 2 | 4 | 8));
+ minusOnePref.subscribe(launcher, (enabled) -> mLauncher.setLauncherOverlay(enabled ? this : null));
}
@Override
@@ -118,14 +119,6 @@ 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()));
- }
}
@Override
@@ -178,8 +171,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 7e9f35aa21..397dce4c91 100644
--- a/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt
+++ b/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt
@@ -21,7 +21,7 @@ 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.states.RotationHelper
@@ -41,6 +41,7 @@ class PreferenceManager private constructor(context: Context) : BasePreferenceMa
LawnchairLauncher.getLauncher(context).scheduleRestart()
}
}
+
private val reloadGrid = scheduleRestart
val hiddenAppSet = StringSetPref("hidden-app-set", setOf())
@@ -60,6 +61,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))
// TODO: Add the ability to manually delete empty pages.
val allowEmptyPages = BoolPref("pref_allowEmptyPages", false)