diff --git a/lawnchair/res/values/dimens.xml b/lawnchair/res/values/dimens.xml
index 089c259e81..ac35ec8da2 100644
--- a/lawnchair/res/values/dimens.xml
+++ b/lawnchair/res/values/dimens.xml
@@ -20,6 +20,9 @@
0dp
72dp
+ 8dp
+ 2dp
+
16dp
56dp
-
\ No newline at end of file
+
diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml
index 14907cc6fa..021c859fe8 100644
--- a/lawnchair/res/values/strings.xml
+++ b/lawnchair/res/values/strings.xml
@@ -81,4 +81,6 @@
- %1$d App
- %1$d Apps
+
+ Show search bar
diff --git a/lawnchair/src/app/lawnchair/nexuslauncher/AllAppsHotseatQsb.kt b/lawnchair/src/app/lawnchair/nexuslauncher/AllAppsHotseatQsb.kt
index 4bfdd4ac52..6b0729d82d 100644
--- a/lawnchair/src/app/lawnchair/nexuslauncher/AllAppsHotseatQsb.kt
+++ b/lawnchair/src/app/lawnchair/nexuslauncher/AllAppsHotseatQsb.kt
@@ -15,6 +15,7 @@ import android.view.animation.Interpolator
import android.widget.EditText
import android.widget.FrameLayout
import androidx.recyclerview.widget.RecyclerView
+import app.lawnchair.util.preferences.PreferenceManager
import com.android.launcher3.*
import com.android.launcher3.allapps.AllAppsContainerView
import com.android.launcher3.allapps.AllAppsStore
@@ -31,7 +32,7 @@ import com.android.launcher3.views.ActivityContext
import java.util.*
import kotlin.math.round
-class AllAppsHotseatQsb @JvmOverloads constructor(context: Context?, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :
+class AllAppsHotseatQsb @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :
QsbContainerView(context, attrs, defStyleAttr), Insettable, SearchUiManager, AllAppsSearchBarController.Callbacks, AllAppsStore.OnUpdateListener {
private val mActivity: ActivityContext = ActivityContext.lookupContext(context)
private val mFixedTranslationY: Int = resources.getDimensionPixelSize(R.dimen.search_widget_hotseat_height) / 2
@@ -43,6 +44,8 @@ class AllAppsHotseatQsb @JvmOverloads constructor(context: Context?, attrs: Attr
private lateinit var mSearchWrapperView: View
private lateinit var mFallbackSearchView: ExtendedEditText
+ private val enableHotseatQsb by PreferenceManager.getInstance(context).enableHotseatQsb
+
init {
clipChildren = false
clipToPadding = false
@@ -189,8 +192,9 @@ class AllAppsHotseatQsb @JvmOverloads constructor(context: Context?, attrs: Attr
override fun setContentVisibility(visibleElements: Int, setter: PropertySetter,
interpolator: Interpolator) {
+ val showHotseatMode = visibleElements and LauncherState.HOTSEAT_SEARCH_BOX != 0 && enableHotseatQsb
val showAllAppsMode = visibleElements and LauncherState.ALL_APPS_CONTENT != 0
- setter.setViewAlpha(mSearchWrapperView, if (showAllAppsMode) 0f else 1f, Interpolators.LINEAR)
+ setter.setViewAlpha(mSearchWrapperView, if (showHotseatMode) 1f else 0f, Interpolators.LINEAR)
setter.setViewAlpha(mFallbackSearchView, if (showAllAppsMode) 1f else 0f, Interpolators.LINEAR)
}
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt
index 793dc5b4a5..9d09eddb3c 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt
@@ -23,6 +23,7 @@ import androidx.navigation.NavGraphBuilder
import app.lawnchair.ui.preferences.components.PreferenceGroup
import app.lawnchair.ui.preferences.components.PreferenceLayout
import app.lawnchair.ui.preferences.components.SliderPreference
+import app.lawnchair.ui.preferences.components.SwitchPreference
import app.lawnchair.util.Meta
import app.lawnchair.util.pageMeta
import app.lawnchair.util.preferences.getAdapter
@@ -37,12 +38,20 @@ fun NavGraphBuilder.dockGraph(route: String) {
@ExperimentalAnimationApi
@Composable
fun DockPreferences() {
+ val prefs = preferenceManager()
pageMeta.provide(Meta(title = stringResource(id = R.string.dock_label)))
PreferenceLayout {
- PreferenceGroup(heading = stringResource(id = R.string.grid), isFirstChild = true) {
+ PreferenceGroup(isFirstChild = true) {
+ SwitchPreference(
+ adapter = prefs.enableHotseatQsb.getAdapter(),
+ label = stringResource(id = R.string.hotseat_qsb_label),
+ showDivider = false
+ )
+ }
+ PreferenceGroup(heading = stringResource(id = R.string.grid)) {
SliderPreference(
label = stringResource(id = R.string.dock_icons),
- adapter = preferenceManager().hotseatColumns.getAdapter(),
+ adapter = prefs.hotseatColumns.getAdapter(),
steps = 3,
valueRange = 3.0F..7.0F,
showDivider = false
diff --git a/lawnchair/src/app/lawnchair/util/preferences/BasePreferenceManager.kt b/lawnchair/src/app/lawnchair/util/preferences/BasePreferenceManager.kt
index a16decc987..902d5a8634 100644
--- a/lawnchair/src/app/lawnchair/util/preferences/BasePreferenceManager.kt
+++ b/lawnchair/src/app/lawnchair/util/preferences/BasePreferenceManager.kt
@@ -22,6 +22,7 @@ import com.android.launcher3.InvariantDeviceProfile
import com.android.launcher3.Utilities
import java.util.*
import kotlin.collections.HashMap
+import kotlin.reflect.KProperty
abstract class BasePreferenceManager(context: Context) : SharedPreferences.OnSharedPreferenceChangeListener {
val sp: SharedPreferences = Utilities.getPrefs(context)
@@ -50,6 +51,11 @@ abstract class BasePreferenceManager(context: Context) : SharedPreferences.OnSha
fun addListener(listener: PreferenceChangeListener)
fun removeListener(listener: PreferenceChangeListener)
+
+ operator fun getValue(thisObj: Any?, property: KProperty<*>): T = get()
+ operator fun setValue(thisObj: Any?, property: KProperty<*>, newValue: T) {
+ set(newValue)
+ }
}
abstract inner class BasePref(val key: String, private val primaryListener: ChangeListener?) : PrefEntry {
diff --git a/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt b/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt
index aa0a026497..6a09003850 100644
--- a/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt
+++ b/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt
@@ -50,6 +50,7 @@ class PreferenceManager private constructor(context: Context) : BasePreferenceMa
val allowRotation = BoolPref("pref_allowRotation", true)
val wrapAdaptiveIcons = BoolPref("prefs_wrapAdaptive", false, reloadIcons)
val addIconToHome = BoolPref("pref_add_icon_to_home", true)
+ val enableHotseatQsb = BoolPref("pref_dockSearchBar", true, reloadGrid)
val hotseatColumns = IdpIntPref("pref_hotseatColumns", { numHotseatIcons }, reloadGrid)
val workspaceColumns = IdpIntPref("pref_workspaceColumns", { numColumns }, reloadGrid)
val workspaceRows = IdpIntPref("pref_workspaceRows", { numRows }, reloadGrid)
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index b7dd156a04..803eff8c99 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -215,11 +215,23 @@ public class DeviceProfile {
workspaceCellPaddingXPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_cell_padding_x);
+ // Lawnchair prefs
+ PreferenceManager prefs = PreferenceManager.getInstance(mContext);
+
+ int hotseatTopPaddingRes;
+ int hotseatBottomPaddingRes;
+ if (prefs.getEnableHotseatQsb().get()) {
+ hotseatTopPaddingRes = R.dimen.dynamic_grid_hotseat_top_padding;
+ hotseatBottomPaddingRes = R.dimen.dynamic_grid_hotseat_bottom_padding;
+ } else {
+ hotseatTopPaddingRes = R.dimen.noqsb_hotseat_top_padding;
+ hotseatBottomPaddingRes = R.dimen.noqsb_hotseat_bottom_padding;
+ }
hotseatBarTopPaddingPx =
- res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_top_padding);
+ res.getDimensionPixelSize(hotseatTopPaddingRes);
hotseatBarBottomPaddingPx = (isTallDevice ? 0
: res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_bottom_non_tall_padding))
- + res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_bottom_padding);
+ + res.getDimensionPixelSize(hotseatBottomPaddingRes);
hotseatBarSidePaddingEndPx =
res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_side_padding);
// Add a bit of space between nav bar and hotseat in vertical bar layout.