perf: Cache PreferenceManager2 in memory (#6897)

Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
This commit is contained in:
Pun Butrach authored and GitHub committed 2026-06-19 18:21:55 +00:00
1 parent 5de4bb09fa
commit 83658ce7eb
72 files changed
+338 -238

No files matched your search

@@ -3,7 +3,7 @@ package app.lawnchair
import android.content.Context
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstBlocking
import app.lawnchair.preferences2.firstCached
import com.android.launcher3.InvariantDeviceProfile
import com.android.launcher3.InvariantDeviceProfile.INDEX_DEFAULT
import com.android.launcher3.InvariantDeviceProfile.INDEX_LANDSCAPE
@@ -14,7 +14,6 @@ import com.android.launcher3.dagger.LauncherAppComponent
import com.android.launcher3.dagger.LauncherAppSingleton
import com.android.launcher3.util.DaggerSingletonObject
import com.android.launcher3.util.SafeCloseable
import com.patrykmichalik.opto.core.firstBlocking
import javax.inject.Inject
@LauncherAppSingleton
@@ -97,20 +96,20 @@ class DeviceProfileOverrides @Inject constructor(
prefs2: PreferenceManager2,
defaultGrid: InvariantDeviceProfile.GridOption,
) : this(
numAllAppsColumns = prefs2.drawerColumns.firstBlocking(gridOption = defaultGrid),
numAllAppsColumns = prefs2.drawerColumns.firstCached(gridOption = defaultGrid),
numFolderRows = prefs.folderRows.get(defaultGrid),
numFolderColumns = prefs2.folderColumns.firstBlocking(gridOption = defaultGrid),
numFolderColumns = prefs2.folderColumns.firstCached(gridOption = defaultGrid),
iconSizeFactor = prefs2.homeIconSizeFactor.firstBlocking(),
allAppsIconSizeFactor = prefs2.drawerIconSizeFactor.firstBlocking(),
iconSizeFactor = prefs2.homeIconSizeFactor.firstCached(),
allAppsIconSizeFactor = prefs2.drawerIconSizeFactor.firstCached(),
allAppsIconTextSizeFactor =
if (prefs2.showIconLabelsInDrawer.firstBlocking()) {
prefs2.drawerIconLabelSizeFactor.firstBlocking()
if (prefs2.showIconLabelsInDrawer.firstCached()) {
prefs2.drawerIconLabelSizeFactor.firstCached()
} else {
0f
},
enableTaskbarOnPhone = prefs2.enableTaskbarOnPhone.firstBlocking(),
enableTaskbarOnPhone = prefs2.enableTaskbarOnPhone.firstCached(),
)
fun applyUi(idp: InvariantDeviceProfile) {
@@ -146,12 +145,12 @@ class DeviceProfileOverrides @Inject constructor(
constructor(
prefs2: PreferenceManager2,
) : this(
enableIconText = prefs2.showIconLabelsOnHomeScreen.firstBlocking(),
iconTextSizeFactor = prefs2.homeIconLabelSizeFactor.firstBlocking(),
enableIconTextFolder = prefs2.showIconLabelsOnHomeScreenFolder.firstBlocking(),
iconFolderTextSizeFactor = prefs2.homeIconLabelFolderSizeFactor.firstBlocking(),
enableAllAppsIconText = prefs2.showIconLabelsInDrawer.firstBlocking(),
allAppsIconTextSizeFactor = prefs2.drawerIconLabelSizeFactor.firstBlocking(),
enableIconText = prefs2.showIconLabelsOnHomeScreen.firstCached(),
iconTextSizeFactor = prefs2.homeIconLabelSizeFactor.firstCached(),
enableIconTextFolder = prefs2.showIconLabelsOnHomeScreenFolder.firstCached(),
iconFolderTextSizeFactor = prefs2.homeIconLabelFolderSizeFactor.firstCached(),
enableAllAppsIconText = prefs2.showIconLabelsInDrawer.firstCached(),
allAppsIconTextSizeFactor = prefs2.drawerIconLabelSizeFactor.firstCached(),
)
constructor(
@@ -42,6 +42,7 @@ import app.lawnchair.gestures.ui.LawnchairShortcutActivity
import app.lawnchair.nexuslauncher.OverlayCallbackImpl
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.root.RootHelperManager
import app.lawnchair.root.RootNotAvailableException
import app.lawnchair.theme.ThemeProvider
@@ -81,7 +82,6 @@ import com.android.launcher3.widget.RoundedCornerEnforcement
import com.android.systemui.plugins.shared.LauncherOverlayManager
import com.android.systemui.shared.system.QuickStepContract
import com.kieronquinn.app.smartspacer.sdk.client.SmartspacerClient
import com.patrykmichalik.opto.core.firstBlocking
import com.patrykmichalik.opto.core.onEach
import dev.kdrag0n.monet.theme.ColorScheme
import java.util.stream.Stream
@@ -324,7 +324,7 @@ class LawnchairLauncher : QuickstepLauncher() {
}
override fun showDefaultOptions(x: Float, y: Float) {
val showWallpaperCarousel = "+carousel" in preferenceManager2.launcherPopupOrder.firstBlocking()
val showWallpaperCarousel = "+carousel" in preferenceManager2.launcherPopupOrder.firstCached()
if (showWallpaperCarousel) {
show<LawnchairLauncher>(
@@ -494,7 +494,7 @@ class LawnchairLauncher : QuickstepLauncher() {
*/
private fun reloadIconsIfNeeded() {
if (
preferenceManager2.alwaysReloadIcons.firstBlocking()
preferenceManager2.alwaysReloadIcons.firstCached()
) {
LauncherAppState.getInstance(this).model.reloadIfActive()
}
@@ -28,6 +28,7 @@ import androidx.lifecycle.lifecycleScope
import app.lawnchair.launcher
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.preferences2.subscribeBlocking
import app.lawnchair.qsb.AssistantIconView
import app.lawnchair.qsb.LawnQsbLayout.Companion.getLensIntent
@@ -54,7 +55,6 @@ import com.android.launcher3.allapps.search.AllAppsSearchBarController
import com.android.launcher3.search.SearchCallback
import com.android.launcher3.util.Themes
import com.android.systemui.shared.system.BlurUtils
import com.patrykmichalik.opto.core.firstBlocking
import java.util.Locale
import kotlin.math.max
import kotlinx.coroutines.launch
@@ -127,7 +127,7 @@ class AllAppsSearchInput(context: Context, attrs: AttributeSet?) :
micIcon = ViewCompat.requireViewById(this, R.id.mic_btn)
lensIcon = ViewCompat.requireViewById(this, R.id.lens_btn)
val shouldShowIcons = prefs2.matchHotseatQsbStyle.firstBlocking()
val shouldShowIcons = prefs2.matchHotseatQsbStyle.firstCached()
val searchProvider = getSearchProvider(context, prefs2)
val isGoogle = searchProvider == Google || searchProvider == GoogleGo || searchProvider == PixelSearch
@@ -149,7 +149,7 @@ class AllAppsSearchInput(context: Context, attrs: AttributeSet?) :
}
}
prefs2.themedHotseatQsb.subscribeBlocking(scope = viewAttachedScope) { themed ->
prefs2.themedHotseatQsb.subscribeBlocking(prefs2 = prefs2, scope = viewAttachedScope) { themed ->
with(searchIcon) {
isVisible = true
@@ -190,7 +190,7 @@ class AllAppsSearchInput(context: Context, attrs: AttributeSet?) :
val currentPaddingRight = initialPaddingRight
input.onFocusChangeListener = OnFocusChangeListener { _, hasFocus ->
if (hasFocus) {
if (prefs2.searchAlgorithm.firstBlocking() != LawnchairSearchAlgorithm.APP_SEARCH) {
if (prefs2.searchAlgorithm.firstCached() != LawnchairSearchAlgorithm.APP_SEARCH) {
input.setHint(R.string.all_apps_device_search_hint)
} else {
input.setHint(R.string.all_apps_search_bar_hint)
@@ -246,7 +246,7 @@ class AllAppsSearchInput(context: Context, attrs: AttributeSet?) :
},
)
val hide = prefs2.hideAppDrawerSearchBar.firstBlocking()
val hide = prefs2.hideAppDrawerSearchBar.firstCached()
if (hide) {
isInvisible = true
layoutParams.height = 0
@@ -7,7 +7,6 @@ import app.lawnchair.gestures.config.GestureHandlerConfig
import app.lawnchair.gestures.type.GestureType
import app.lawnchair.launcher
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.util.firstBlocking
import com.android.launcher3.util.ComponentKey
import com.android.launcher3.util.VibratorWrapper
import kotlinx.coroutines.launch
@@ -61,7 +60,7 @@ class IconGestureListener(
* @param gestureType The type of gesture to resolve for the current component */
private fun resolveGesture(gestureType: GestureType): GestureHandlerConfig? {
val currentComponentKey = componentKey ?: return null
val gesture = prefs.getGestureForApp(currentComponentKey, gestureType).firstBlocking()
val gesture = prefs.getGestureForAppCached(currentComponentKey, gestureType)
return gesture.takeUnless { it is GestureHandlerConfig.NoOp }
}
}
@@ -16,7 +16,6 @@ import app.lawnchair.ui.preferences.components.controls.ClickablePreference
import app.lawnchair.ui.preferences.components.layout.PreferenceLayoutLazyColumn
import app.lawnchair.ui.preferences.components.layout.preferenceGroupItems
import com.android.launcher3.R
import com.patrykmichalik.opto.core.firstBlocking
import kotlinx.coroutines.launch
@Composable
@@ -7,6 +7,7 @@ import app.lawnchair.icons.shape.PathShapeDelegate
import app.lawnchair.preferences.PreferenceChangeListener
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import com.android.launcher3.LauncherPrefs
import com.android.launcher3.concurrent.annotations.Ui
import com.android.launcher3.dagger.ApplicationContext
@@ -14,7 +15,6 @@ import com.android.launcher3.dagger.LauncherAppSingleton
import com.android.launcher3.graphics.ThemeManager
import com.android.launcher3.util.DaggerSingletonTracker
import com.android.launcher3.util.LooperExecutor
import com.patrykmichalik.opto.core.firstBlocking
import javax.inject.Inject
import kotlinx.coroutines.CoroutineName
import kotlinx.coroutines.MainScope
@@ -86,14 +86,14 @@ constructor(
private fun parseIconStateV2(oldState: IconState?): IconState {
val currentAppShape: IconShape = try {
prefs2.iconShape.firstBlocking()
prefs2.iconShape.firstCached()
} catch (e: Exception) {
Log.d(TAG, "Error getting icon shape", e)
IconShape.Circle
}
val currentFolderShape: IconShape = try {
prefs2.folderShape.firstBlocking()
prefs2.folderShape.firstCached()
} catch (e: Exception) {
Log.d(TAG, "Error getting folder shape", e)
IconShape.Circle
@@ -22,13 +22,13 @@ package app.lawnchair.icons.shape
import android.content.Context
import android.graphics.drawable.AdaptiveIconDrawable
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import com.android.launcher3.Utilities
import com.android.launcher3.dagger.ApplicationContext
import com.android.launcher3.dagger.LauncherAppComponent
import com.android.launcher3.dagger.LauncherAppSingleton
import com.android.launcher3.util.DaggerSingletonObject
import com.android.launcher3.util.SafeCloseable
import com.patrykmichalik.opto.core.firstBlocking
import javax.inject.Inject
@LauncherAppSingleton
@@ -56,6 +56,9 @@ class IconShapeManager @Inject constructor(
fun getSystemIconShape(context: Context) = INSTANCE.get(context).systemIconShape
@JvmStatic
fun getWindowTransitionRadius(context: Context) = PreferenceManager2.getInstance(context).iconShape.firstBlocking().windowTransitionRadius
fun getWindowTransitionRadius(context: Context): Float {
val prefs = PreferenceManager2.getInstance(context)
return prefs.iconShape.firstCached().windowTransitionRadius
}
}
}
@@ -7,6 +7,7 @@ import android.os.Bundle
import app.lawnchair.FeedBridge
import app.lawnchair.LawnchairLauncher
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import com.android.launcher3.Launcher
import com.android.launcher3.LauncherPrefs
import com.android.systemui.plugins.shared.LauncherOverlayManager
@@ -17,7 +18,6 @@ import com.google.android.libraries.launcherclient.LauncherClient
import com.google.android.libraries.launcherclient.LauncherClientCallbacks
import com.google.android.libraries.launcherclient.LauncherClientService
import com.google.android.libraries.launcherclient.StaticInteger
import com.patrykmichalik.opto.core.firstBlocking
/**
* Implements [LauncherOverlay] and passes all the corresponding events to [LauncherClient],
@@ -37,7 +37,8 @@ class OverlayCallbackImpl(private val mLauncher: LawnchairLauncher) :
private var mFlags = 0
init {
val enableFeed = PreferenceManager2.getInstance(mLauncher).enableFeed.firstBlocking()
val prefs = PreferenceManager2.getInstance(mLauncher)
val enableFeed = prefs.enableFeed.firstCached()
mClient = LauncherClient(
mLauncher,
this,
@@ -28,7 +28,8 @@ import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import app.lawnchair.preferences2.IdpPreference
import app.lawnchair.preferences2.asState
import app.lawnchair.preferences2.firstBlocking
import app.lawnchair.preferences2.firstCached
import app.lawnchair.preferences2.preferenceManager2
import com.android.launcher3.InvariantDeviceProfile
import com.patrykmichalik.opto.domain.Preference
import kotlin.reflect.KProperty
@@ -127,7 +128,8 @@ fun IdpPreference.getAdapter(): PreferenceAdapter<Int> {
val context = LocalContext.current
val idp = remember { InvariantDeviceProfile.INSTANCE.get(context) }
val defaultGrid = idp.closestProfile
val state = get(defaultGrid).collectAsStateWithLifecycle(initialValue = firstBlocking(defaultGrid))
val prefs2 = preferenceManager2()
val state = get(defaultGrid).collectAsStateWithLifecycle(initialValue = firstCached(defaultGrid, prefs2))
return createStateAdapter(state = state, set = { set(it, defaultGrid) })
}
@@ -1,11 +1,14 @@
package app.lawnchair.preferences2
import androidx.annotation.Discouraged
import androidx.compose.runtime.Composable
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.edit
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import app.lawnchair.LawnchairApp
import com.android.launcher3.InvariantDeviceProfile
import kotlin.jvm.JvmOverloads
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.runBlocking
@@ -39,8 +42,23 @@ class IdpPreference(
}
}
@Discouraged("This is a blocking read, use firstCached() for non-blocking reads")
fun IdpPreference.firstBlocking(gridOption: InvariantDeviceProfile.GridOption) = runBlocking { get(gridOption = gridOption).first() }
@JvmOverloads
fun IdpPreference.firstCached(
gridOption: InvariantDeviceProfile.GridOption,
prefs2: PreferenceManager2 = PreferenceManager2.getInstance(LawnchairApp.instance),
): Int {
val cached = prefs2.getCachedPreferences()
val value = cached[key]
return if (value == null || value == -1) {
defaultSelector(gridOption)
} else {
value
}
}
@Composable
fun IdpPreference.state(
gridOption: InvariantDeviceProfile.GridOption,
@@ -0,0 +1,19 @@
package app.lawnchair.preferences2
import app.lawnchair.LawnchairApp
import com.patrykmichalik.opto.core.PreferenceImpl
import com.patrykmichalik.opto.core.getFromPreferences
import kotlin.jvm.JvmOverloads
/**
* Returns the current value of this preference from the in-memory cache.
*
* Warning: During initialisation of [PreferenceManager2], pass [this] of [PreferenceManager2] instead
* of leaving it blank or else we would be initialising it too early and cause a [StackOverflowError]
*/
@JvmOverloads
fun <C, S> PreferenceImpl<C, S>.firstCached(
prefs2: PreferenceManager2 = PreferenceManager2.getInstance(LawnchairApp.instance),
): C {
return getFromPreferences(prefs2.getCachedPreferences())
}
@@ -73,13 +73,18 @@ import com.patrykmichalik.opto.core.PreferenceManager
import com.patrykmichalik.opto.core.firstBlocking
import com.patrykmichalik.opto.core.setBlocking
import javax.inject.Inject
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.runBlocking
@LauncherAppSingleton
class PreferenceManager2 @Inject constructor(
@@ -87,7 +92,7 @@ class PreferenceManager2 @Inject constructor(
) : PreferenceManager,
SafeCloseable {
private val scope = MainScope()
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main.immediate)
private val resourceProvider = DynamicResource.provider(context)
private var liveInformationManager: LiveInformationManager =
LiveInformationManager.getInstance(context)
@@ -104,6 +109,14 @@ class PreferenceManager2 @Inject constructor(
)
override val preferencesDataStore = context.preferencesDataStore
@Volatile
private var cachedPreferences: Preferences = runBlocking {
preferencesDataStore.data.first()
}
fun getCachedPreferences(): Preferences = cachedPreferences
private val reloadHelper = ReloadHelper(context)
val darkStatusBar = preference(
@@ -838,7 +851,11 @@ class PreferenceManager2 @Inject constructor(
)
init {
initializeIconShape(iconShape.firstBlocking())
preferencesDataStore.data
.onEach { cachedPreferences = it }
.launchIn(scope)
initializeIconShape(iconShape.firstCached(this))
iconShape.get()
.drop(1)
.distinctUntilChanged()
@@ -873,6 +890,16 @@ class PreferenceManager2 @Inject constructor(
}
}
fun getGestureForAppCached(key: ComponentKey, gestureType: GestureType): GestureHandlerConfig {
val cmp = Converters().fromComponentKey(key)
val key = stringPreferencesKey("$cmp:${gestureType.name}")
val prefs = getCachedPreferences()
return prefs[key]?.let {
runCatching { kotlinxJson.decodeFromString<GestureHandlerConfig>(it) }
.getOrDefault(GestureHandlerConfig.NoOp)
} ?: GestureHandlerConfig.NoOp
}
private fun initializeIconShape(shape: IconShape) {
CustomAdaptiveIconDrawable.sInitialized = true
CustomAdaptiveIconDrawable.sMaskId = shape.getHashString()
@@ -880,6 +907,7 @@ class PreferenceManager2 @Inject constructor(
}
override fun close() {
scope.cancel()
}
private fun getRemoteDefault(key: String): String? = liveInformationManager.liveInformation
@@ -3,13 +3,35 @@ package app.lawnchair.preferences2
import androidx.compose.runtime.Composable
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import app.lawnchair.util.subscribeBlocking
import com.patrykmichalik.opto.core.PreferenceImpl
import com.patrykmichalik.opto.core.firstBlocking
import com.patrykmichalik.opto.domain.Preference
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.dropWhile
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
@Composable
fun <C, S> Preference<C, S, *>.asState() = get().collectAsStateWithLifecycle(initialValue = firstBlocking())
@Composable
fun <C, S> PreferenceImpl<C, S>.asState() = get().collectAsStateWithLifecycle(initialValue = firstCached(preferenceManager2()))
fun <C, S> PreferenceImpl<C, S>.subscribeBlocking(
prefs2: PreferenceManager2,
scope: CoroutineScope,
block: (C) -> Unit,
) {
val initial = firstCached(prefs2)
block(initial)
get()
.distinctUntilChanged()
.dropWhile { it == initial }
.onEach { block(it) }
.launchIn(scope = scope)
}
fun <C, S> Preference<C, S, *>.subscribeBlocking(
scope: CoroutineScope,
block: (C) -> Unit,
@@ -23,6 +23,7 @@ import app.lawnchair.launcher
import app.lawnchair.launcherNullable
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.preferences2.subscribeBlocking
import app.lawnchair.qsb.providers.AppSearch
import app.lawnchair.qsb.providers.Google
@@ -39,7 +40,6 @@ import com.android.launcher3.R
import com.android.launcher3.qsb.QsbContainerView
import com.android.launcher3.util.Themes
import com.android.launcher3.views.ActivityContext
import com.patrykmichalik.opto.core.firstBlocking
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flatMapLatest
@@ -71,7 +71,7 @@ class LawnQsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(contex
preferenceManager2 = PreferenceManager2.getInstance(context)
val attachedScope = viewAttachedScope
preferenceManager2.strokeColorStyle.subscribeBlocking(scope = attachedScope) {
preferenceManager2.strokeColorStyle.subscribeBlocking(prefs2 = preferenceManager2, scope = attachedScope) {
strokeColor = it
setUpBackground()
}
@@ -82,7 +82,7 @@ class LawnQsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(contex
val isGoogle = searchProvider == Google || searchProvider == GoogleGo || searchProvider == PixelSearch
val supportsLens = searchProvider == Google || searchProvider == PixelSearch
preferenceManager2.themedHotseatQsb.subscribeBlocking(scope = attachedScope) { themed ->
preferenceManager2.themedHotseatQsb.subscribeBlocking(prefs2 = preferenceManager2, scope = attachedScope) { themed ->
setUpBackground(themed)
val iconRes = if (themed) searchProvider.themedIcon else searchProvider.icon
@@ -105,7 +105,7 @@ class LawnQsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(contex
setOnClickListener {
val launcher = context.launcher
launcher.lifecycleScope.launch {
if (preferenceManager2.matchHotseatQsbStyle.firstBlocking()) {
if (preferenceManager2.matchHotseatQsbStyle.firstCached()) {
launcher.appsView.searchUiManager.editText?.showKeyboard()
launcher.animateToAllApps()
} else {
@@ -237,7 +237,7 @@ class LawnQsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(contex
context: Context,
preferenceManager: PreferenceManager2,
): QsbSearchProvider {
val provider = preferenceManager.hotseatQsbProvider.firstBlocking()
val provider = preferenceManager.hotseatQsbProvider.firstCached()
return if (provider == AppSearch ||
resolveIntent(context, provider.createSearchIntent()) ||
@@ -3,6 +3,7 @@ package app.lawnchair.search.algorithms
import android.content.Context
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.search.adapter.SearchLinksTarget
import app.lawnchair.search.adapter.SearchTargetCompat
import app.lawnchair.search.adapter.SearchTargetFactory
@@ -32,7 +33,6 @@ import com.android.launcher3.LauncherAppState
import com.android.launcher3.R
import com.android.launcher3.allapps.BaseAllAppsAdapter
import com.android.launcher3.search.SearchCallback
import com.patrykmichalik.opto.core.firstBlocking
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@@ -101,7 +101,7 @@ class LawnchairLocalSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm
} else {
currentJob = coroutineScope.launch {
val prefs2 = PreferenceManager2.getInstance(context)
val maxHistory = prefs2.maxRecentResultCount.firstBlocking()
val maxHistory = prefs2.maxRecentResultCount.firstCached()
val historyResults = historySearchProvider.getRecentKeywords(context, maxHistory)
@@ -136,7 +136,7 @@ class LawnchairLocalSearchAlgorithm(context: Context) : LawnchairSearchAlgorithm
val prefs2 = PreferenceManager2.getInstance(context)
if (prefs.searchResultStartPageSuggestion.get()) {
val provider = prefs2.webSuggestionProvider.firstBlocking()
val provider = prefs2.webSuggestionProvider.firstCached()
val webProvider = provider.configure(context)
val providerName = if (webProvider is CustomWebSearchProvider) {
@@ -5,6 +5,7 @@ import app.lawnchair.LawnchairApp
import app.lawnchair.allapps.views.SearchItemBackground
import app.lawnchair.allapps.views.SearchResultView.Companion.EXTRA_QUICK_LAUNCH
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.search.LawnchairSearchAdapterProvider
import app.lawnchair.search.adapter.START_PAGE
import app.lawnchair.search.adapter.SearchAdapterItem
@@ -31,7 +32,6 @@ import com.android.launcher3.Utilities
import com.android.launcher3.allapps.BaseAllAppsAdapter
import com.android.launcher3.search.SearchAlgorithm
import com.android.launcher3.search.SearchCallback
import com.patrykmichalik.opto.core.firstBlocking
sealed class LawnchairSearchAlgorithm(
protected val context: Context,
@@ -237,7 +237,7 @@ sealed class LawnchairSearchAlgorithm(
fun create(context: Context): LawnchairSearchAlgorithm {
val prefs = PreferenceManager2.getInstance(context)
val searchAlgorithm = prefs.searchAlgorithm.firstBlocking()
val searchAlgorithm = prefs.searchAlgorithm.firstCached()
return when {
searchAlgorithm == ASI_SEARCH && isASISearchEnabled(context) -> LawnchairASISearchAlgorithm(
@@ -2,11 +2,11 @@ package app.lawnchair.search.algorithms.engine
import android.content.Context
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.search.adapter.SPACE
import app.lawnchair.search.adapter.SearchTargetCompat
import app.lawnchair.search.adapter.SearchTargetFactory
import com.android.launcher3.R
import com.patrykmichalik.opto.core.firstBlocking
sealed interface SectionBuilder {
/**
@@ -131,7 +131,8 @@ data object HistorySectionBuilder : SectionBuilder {
factory: SearchTargetFactory,
results: List<SearchResult>,
): List<SearchTargetCompat> {
val webSuggestion = PreferenceManager2.getInstance(context).webSuggestionProvider.firstBlocking()
val prefs = PreferenceManager2.getInstance(context)
val webSuggestion = prefs.webSuggestionProvider.firstCached()
val history = results.filterIsInstance<SearchResult.History>()
if (history.isEmpty()) {
@@ -7,11 +7,11 @@ import android.provider.ContactsContract
import android.util.Log
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.search.algorithms.data.ContactInfo
import app.lawnchair.search.algorithms.engine.SearchPermission
import app.lawnchair.search.algorithms.engine.SearchProvider
import app.lawnchair.search.algorithms.engine.SearchResult
import com.patrykmichalik.opto.core.firstBlocking
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
@@ -37,7 +37,7 @@ object ContactsSearchProvider : SearchProvider, SearchPermission {
return@flow
}
val maxResults = prefs2.maxPeopleResultCount.firstBlocking()
val maxResults = prefs2.maxPeopleResultCount.firstCached()
// Call the newly encapsulated, private function.
val contactInfoList = findContactsByName(context, query, maxResults)
@@ -7,6 +7,7 @@ import android.provider.MediaStore
import android.util.Log
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.search.algorithms.data.FileInfo
import app.lawnchair.search.algorithms.data.FolderInfo
import app.lawnchair.search.algorithms.data.IFileInfo
@@ -22,7 +23,6 @@ import app.lawnchair.util.isHidden
import app.lawnchair.util.isRegularFile
import app.lawnchair.util.mimeType2Extension
import app.lawnchair.util.videoFileTypes
import com.patrykmichalik.opto.core.firstBlocking
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
@@ -54,7 +54,7 @@ object FileSearchProvider : SearchProvider {
}
val prefs2 = PreferenceManager2.getInstance(context)
val maxResults = prefs2.maxFileResultCount.firstBlocking()
val maxResults = prefs2.maxFileResultCount.firstCached()
// check for permissions:
val fileAccessManager = FileAccessManager.getInstance(context)
@@ -5,10 +5,10 @@ import android.provider.Settings
import android.util.Log
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.search.algorithms.data.SettingInfo
import app.lawnchair.search.algorithms.engine.SearchProvider
import app.lawnchair.search.algorithms.engine.SearchResult
import com.patrykmichalik.opto.core.firstBlocking
import java.lang.reflect.Modifier
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.Dispatchers
@@ -33,7 +33,7 @@ object SettingsSearchProvider : SearchProvider {
return@flow
}
val maxResults = prefs2.maxSettingsEntryResultCount.firstBlocking()
val maxResults = prefs2.maxSettingsEntryResultCount.firstCached()
val settingsInfoList = findSettingsByNameAndAction(query, maxResults)
val searchResults = settingsInfoList.map { settingInfo ->
@@ -2,22 +2,22 @@ package app.lawnchair.search.algorithms.engine.provider.apps
import android.content.Context
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.search.algorithms.engine.SearchResult
import app.lawnchair.search.algorithms.filterHiddenApps
import com.android.launcher3.model.AllAppsList
import com.android.launcher3.model.data.AppInfo
import com.android.launcher3.search.StringMatcherUtility
import com.patrykmichalik.opto.core.firstBlocking
import java.util.Locale
object AppSearchProvider {
fun search(context: Context, query: String, allApps: AllAppsList): List<SearchResult.App> {
val prefs = PreferenceManager2.getInstance(context)
val hiddenApps = prefs.hiddenApps.firstBlocking()
val hiddenAppsInSearch = prefs.hiddenAppsInSearch.firstBlocking()
val maxAppResults = prefs.maxAppSearchResultCount.firstBlocking()
val enableFuzzySearch = prefs.enableFuzzySearch.firstBlocking()
val hiddenApps = prefs.hiddenApps.firstCached()
val hiddenAppsInSearch = prefs.hiddenAppsInSearch.firstCached()
val maxAppResults = prefs.maxAppSearchResultCount.firstCached()
val enableFuzzySearch = prefs.enableFuzzySearch.firstCached()
val appResults = if (enableFuzzySearch) {
fuzzySearch(allApps.data, query, maxAppResults, hiddenApps, hiddenAppsInSearch)
@@ -4,8 +4,8 @@ import android.content.Context
import android.net.Uri
import android.util.Log
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import com.android.launcher3.R
import com.patrykmichalik.opto.core.firstBlocking
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
@@ -48,9 +48,9 @@ object CustomWebSearchProvider : WebSearchProvider {
override fun configure(context: Context): WebSearchProvider {
val prefs = PreferenceManager2.getInstance(context)
searchUrlTemplate = prefs.webSuggestionProviderUrl.firstBlocking()
suggestionsUrlTemplate = prefs.webSuggestionProviderSuggestionsUrl.firstBlocking()
displayName = prefs.webSuggestionProviderName.firstBlocking()
searchUrlTemplate = prefs.webSuggestionProviderUrl.firstCached()
suggestionsUrlTemplate = prefs.webSuggestionProviderSuggestionsUrl.firstCached()
displayName = prefs.webSuggestionProviderName.firstCached()
return this
}
@@ -4,9 +4,9 @@ import android.content.Context
import android.util.Log
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.search.algorithms.engine.SearchProvider
import app.lawnchair.search.algorithms.engine.SearchResult
import com.patrykmichalik.opto.core.firstBlocking
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.flow.Flow
@@ -29,9 +29,9 @@ object WebSuggestionProvider : SearchProvider {
return flow { emit(emptyList()) }
}
val provider = prefs2.webSuggestionProvider.firstBlocking()
val timeout = prefs2.maxWebSuggestionDelay.firstBlocking()
val maxResults = prefs2.maxWebSuggestionResultCount.firstBlocking()
val provider = prefs2.webSuggestionProvider.firstCached()
val timeout = prefs2.maxWebSuggestionDelay.firstCached()
val maxResults = prefs2.maxWebSuggestionResultCount.firstCached()
val webProvider = provider
.configure(context)
@@ -33,7 +33,7 @@ class SmartspacerView(context: Context, attrs: AttributeSet?) : BcSmartspaceView
private var targetCount = 5
init {
prefs2.smartspacerMaxCount.subscribeBlocking(coroutineScope) {
prefs2.smartspacerMaxCount.subscribeBlocking(prefs2 = prefs2, scope = coroutineScope) {
targetCount = it
}
@@ -9,6 +9,7 @@ import android.os.Looper
import android.os.PatternMatcher
import androidx.core.graphics.ColorUtils
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.theme.color.AndroidColor
import app.lawnchair.theme.color.ColorOption
import app.lawnchair.theme.color.ColorStyle
@@ -23,7 +24,6 @@ import com.android.launcher3.dagger.LauncherAppSingleton
import com.android.launcher3.util.DaggerSingletonObject
import com.android.launcher3.util.SafeCloseable
import com.android.systemui.monet.Style
import com.patrykmichalik.opto.core.firstBlocking
import com.patrykmichalik.opto.core.onEach
import dev.kdrag0n.colorkt.Color
import dev.kdrag0n.colorkt.conversion.ConversionGraph.convert
@@ -41,8 +41,8 @@ class ThemeProvider @Inject constructor(
private val wallpaperManager = WallpaperManagerCompat.INSTANCE.get(context)
private val coroutineScope = CoroutineScope(Dispatchers.Default)
private var accentColor: ColorOption = preferenceManager2.accentColor.firstBlocking()
private var colorStyle: ColorStyle = preferenceManager2.colorStyle.firstBlocking()
private var accentColor: ColorOption = preferenceManager2.accentColor.firstCached()
private var colorStyle: ColorStyle = preferenceManager2.colorStyle.firstCached()
private val colorSchemeMap = HashMap<Pair<Int, Style>, ColorScheme>()
private val listeners = mutableListOf<ColorSchemeChangeListener>()
@@ -10,9 +10,9 @@ import android.graphics.drawable.RippleDrawable
import android.graphics.drawable.StateListDrawable
import androidx.appcompat.content.res.AppCompatResources
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.theme.color.tokens.ColorTokens
import com.android.launcher3.R
import com.patrykmichalik.opto.core.firstBlocking
object DrawableTokens {
@@ -159,7 +159,7 @@ object DrawableTokens {
// Get custom color from preferences
val prefs2 = PreferenceManager2.getInstance(context)
val colorOption = prefs2.workProfileTabBackgroundColor.firstBlocking()
val colorOption = prefs2.workProfileTabBackgroundColor.firstCached()
val customColor = colorOption.colorPreferenceEntry.lightColor.invoke(context)
val selectedColor = if (customColor != 0) {
@@ -5,13 +5,13 @@ import android.widget.Toast
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import app.lawnchair.preferences2.PreferenceManager2.Companion.getInstance
import app.lawnchair.preferences2.firstCached
import com.android.launcher3.Launcher
import com.android.launcher3.R
import com.android.launcher3.Utilities
import com.android.launcher3.logging.StatsLogManager.LauncherEvent
import com.android.launcher3.popup.SystemShortcut
import com.android.launcher3.views.OptionsPopupView.OptionItem
import com.patrykmichalik.opto.core.firstBlocking
import com.patrykmichalik.opto.core.setBlocking
object LauncherOptionsPopup {
@@ -32,7 +32,7 @@ object LauncherOptionsPopup {
) {
val prefs2 = getInstance(launcher)
val currentOrder = prefs2.launcherPopupOrder.firstBlocking()
val currentOrder = prefs2.launcherPopupOrder.firstCached()
val currentOptions = currentOrder.toLauncherOptions()
// check for missing items in current options; if so, add them
@@ -61,9 +61,9 @@ object LauncherOptionsPopup {
onStartHomeSettings: (View) -> Boolean,
): ArrayList<OptionItem> {
val prefs2 = getInstance(launcher!!)
val lockHomeScreen = prefs2.lockHomeScreen.firstBlocking()
val lockHomeScreen = prefs2.lockHomeScreen.firstCached()
val optionOrder = prefs2
.launcherPopupOrder.firstBlocking().toLauncherOptions()
.launcherPopupOrder.firstCached().toLauncherOptions()
val wallpaperResString =
if (Utilities.existsStyleWallpapers(launcher)) R.string.styles_wallpaper_button_text else R.string.wallpapers
@@ -220,17 +220,17 @@ object LauncherOptionsPopup {
) {
val prefs2 = getInstance(launcher)
val lockHomeScreenButtonOnPopUp = prefs2.lockHomeScreenButtonOnPopUp.firstBlocking()
val editHomeScreenButtonOnPopUp = prefs2.editHomeScreenButtonOnPopUp.firstBlocking()
val showSystemSettingsEntryOnPopUp = prefs2.showSystemSettingsEntryOnPopUp.firstBlocking()
val lockHomeScreenButtonOnPopUp = prefs2.lockHomeScreenButtonOnPopUp.firstCached()
val editHomeScreenButtonOnPopUp = prefs2.editHomeScreenButtonOnPopUp.firstCached()
val showSystemSettingsEntryOnPopUp = prefs2.showSystemSettingsEntryOnPopUp.firstCached()
val optionOrder = prefs2.launcherPopupOrder
val legacyPopupOptionsMigrated = prefs2.legacyPopupOptionsMigrated.firstBlocking()
val legacyPopupOptionsMigrated = prefs2.legacyPopupOptionsMigrated.firstCached()
if (!legacyPopupOptionsMigrated) {
prefs2.legacyPopupOptionsMigrated.setBlocking(true)
val options = optionOrder.firstBlocking().toLauncherOptions()
val options = optionOrder.firstCached().toLauncherOptions()
options.forEachIndexed { index, item ->
if (item.identifier == "lock") {
@@ -20,6 +20,7 @@ import androidx.compose.ui.unit.dp
import app.lawnchair.LawnchairLauncher
import app.lawnchair.override.CustomizeAppDialog
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.views.ComposeBottomSheet
import com.android.launcher3.AbstractFloatingView
import com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPLICATION
@@ -34,7 +35,6 @@ import com.android.launcher3.util.ApplicationInfoWrapper
import com.android.launcher3.util.ComponentKey
import com.android.launcher3.util.PackageManagerHelper
import com.android.launcher3.views.ActivityContext
import com.patrykmichalik.opto.core.firstBlocking
import java.net.URISyntaxException
class LawnchairShortcut {
@@ -43,7 +43,8 @@ class LawnchairShortcut {
val CUSTOMIZE =
SystemShortcut.Factory { activity: LawnchairLauncher, itemInfo, originalView ->
if (PreferenceManager2.getInstance(activity).lockHomeScreen.firstBlocking()) {
val prefs2 = PreferenceManager2.getInstance(activity)
if (prefs2.lockHomeScreen.firstCached()) {
null
} else {
getAppInfo(activity, itemInfo)?.let { Customize(activity, it, itemInfo, originalView) }
@@ -59,7 +60,8 @@ class LawnchairShortcut {
val UNINSTALL =
SystemShortcut.Factory { activity: ActivityContext, itemInfo: ItemInfo, view: View ->
if (PreferenceManager2.INSTANCE.get(activity.asContext()).lockHomeScreen.firstBlocking()) {
val prefs2 = PreferenceManager2.INSTANCE.get(activity.asContext())
if (prefs2.lockHomeScreen.firstCached()) {
return@Factory null
}
if (itemInfo.targetComponent == null) {
@@ -5,9 +5,9 @@ import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import com.android.launcher3.BuildConfig
import com.android.launcher3.R
import com.patrykmichalik.opto.core.firstBlocking
import java.io.File
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
@@ -62,7 +62,7 @@ class AboutViewModel(
// Check if the build variant is Nightly
// AND check if user has enabled auto updater (available to Nightly variant)
// OR check if user has overridden it in debug flags (available to All variant)
if (BuildConfig.APPLICATION_ID.contains("nightly") && prefs2.autoUpdaterNightly.firstBlocking()) {
if (BuildConfig.APPLICATION_ID.contains("nightly") && prefs2.autoUpdaterNightly.firstCached()) {
nightlyBuildsRepository.checkForUpdate()
viewModelScope.launch {
nightlyBuildsRepository.updateState.collect { state ->
@@ -39,7 +39,6 @@ import app.lawnchair.ui.preferences.components.layout.PreferenceDivider
import app.lawnchair.ui.preferences.components.layout.PreferenceTemplate
import app.lawnchair.ui.util.LocalBottomSheetHandler
import com.android.launcher3.util.ComponentKey
import com.patrykmichalik.opto.core.firstBlocking
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@@ -53,7 +53,6 @@ import app.lawnchair.ui.preferences.navigation.GeneralIconShape
import com.android.launcher3.BuildConfig
import com.android.launcher3.R
import com.android.launcher3.Utilities
import com.patrykmichalik.opto.core.firstBlocking
@Composable
fun GeneralPreferences() {
@@ -45,6 +45,7 @@ import app.lawnchair.backup.ui.restoreBackupOpener
import app.lawnchair.preferences.getAdapter
import app.lawnchair.preferences.observeAsState
import app.lawnchair.preferences.preferenceManager
import app.lawnchair.preferences2.firstCached
import app.lawnchair.preferences2.preferenceManager2
import app.lawnchair.ui.OverflowMenuGrouped
import app.lawnchair.ui.preferences.LocalNavController
@@ -76,7 +77,6 @@ import app.lawnchair.util.isDefaultLauncher
import app.lawnchair.util.restartLauncher
import com.android.launcher3.BuildConfig
import com.android.launcher3.R
import com.patrykmichalik.opto.core.firstBlocking
@Composable
fun PreferencesDashboard(
@@ -140,7 +140,7 @@ fun PreferencesDashboard(
)
}
val isSmartspaceEnabled = prefs2.enableSmartspace.firstBlocking()
val isSmartspaceEnabled = prefs2.enableSmartspace.firstCached()
Item {
PreferenceCategory(
label = stringResource(id = R.string.smartspace_widget),
@@ -4,6 +4,7 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import androidx.annotation.Discouraged
import androidx.compose.runtime.Composable
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -22,6 +23,7 @@ import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
@Discouraged("This is a blocking read, use firstCached() for non-blocking reads")
fun <T> Flow<T>.firstBlocking() = runBlocking { first() }
@Composable
@@ -50,6 +50,7 @@ import androidx.core.graphics.luminance
import androidx.core.os.UserManagerCompat
import app.lawnchair.preferences.PreferenceManager
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.theme.color.ColorOption
import app.lawnchair.theme.color.tokens.ColorTokens
import com.android.launcher3.BaseActivity
@@ -60,7 +61,6 @@ import com.android.launcher3.util.Executors.MAIN_EXECUTOR
import com.android.launcher3.util.Themes
import com.android.launcher3.views.ActivityContext
import com.android.systemui.shared.system.QuickStepContract
import com.patrykmichalik.opto.core.firstBlocking
import java.io.ByteArrayOutputStream
import java.io.File
import java.util.Locale
@@ -178,18 +178,18 @@ val View?.pendingIntent get() = this?.getTag(pendingIntentTagId) as? PendingInte
fun getFolderPreviewAlpha(context: Context): Int {
val prefs2 = PreferenceManager2.getInstance(context)
return (prefs2.folderPreviewBackgroundOpacity.firstBlocking() * 255).toInt()
return (prefs2.folderPreviewBackgroundOpacity.firstCached() * 255).toInt()
}
fun getFolderBackgroundAlpha(context: Context): Int {
val prefs2 = PreferenceManager2.getInstance(context)
return (prefs2.folderBackgroundOpacity.firstBlocking() * 255).toInt()
return (prefs2.folderBackgroundOpacity.firstCached() * 255).toInt()
}
/** Apply Lawnchair custom allapps colour to the provided colour */
private fun getAllAppsBaseColor(context: Context, defaultColor: Int): Int {
val prefs2 = PreferenceManager2.getInstance(context)
val colorOptions: ColorOption = prefs2.appDrawerBackgroundColor.firstBlocking()
val colorOptions: ColorOption = prefs2.appDrawerBackgroundColor.firstCached()
val color = colorOptions.colorPreferenceEntry.lightColor.invoke(context)
val baseColor = if (color != 0) color else defaultColor
return ColorUtils.setAlphaComponent(baseColor, 255)
@@ -19,9 +19,9 @@ import android.view.animation.DecelerateInterpolator
import android.view.animation.PathInterpolator
import android.widget.FrameLayout
import app.lawnchair.preferences2.PreferenceManager2
import app.lawnchair.preferences2.firstCached
import app.lawnchair.theme.color.tokens.ColorTokens
import app.lawnchair.views.overlay.FullScreenOverlayMode
import com.patrykmichalik.opto.core.firstBlocking
class FullScreenOverlayView @JvmOverloads constructor(
context: Context,
@@ -196,7 +196,7 @@ fun Activity.showFullScreenOverlay(
onOverlayReady: () -> Unit,
) {
val pref2 = PreferenceManager2.getInstance(this)
val animationMode = pref2.closingAppOverlay.firstBlocking()
val animationMode = pref2.closingAppOverlay.firstCached()
val overlayView = FullScreenOverlayView(this)
val targetRootView = rootView ?: window.decorView.findViewById<ViewGroup>(android.R.id.content)
@@ -48,7 +48,7 @@ import com.android.launcher3.model.data.ItemInfoWithIcon;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.views.ActivityContext;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@@ -122,7 +122,7 @@ public class PredictionRowView<T extends Context & ActivityContext>
}
private void updateVisibility() {
boolean enabled = mPredictionsEnabled && PreferenceExtensionsKt.firstBlocking(prefs2.getShowSuggestedAppsInDrawer());
boolean enabled = mPredictionsEnabled && PreferenceCacheExtensionsKt.firstCached(prefs2.getShowSuggestedAppsInDrawer());
setVisibility(enabled ? VISIBLE : GONE);
if (mActivityContext.getAppsView() != null) {
if (enabled) {
@@ -66,7 +66,7 @@ import com.android.launcher3.uioverrides.PredictedAppIcon;
import com.android.launcher3.uioverrides.QuickstepLauncher;
import com.android.launcher3.views.Snackbar;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
@@ -394,7 +394,7 @@ public class HotseatPredictionController implements DragController.DragListener,
public SystemShortcut<QuickstepLauncher> getShortcut(QuickstepLauncher activity,
ItemInfo itemInfo, View originalView) {
PreferenceManager2 prefs = PreferenceManager2.getInstance(activity);
if (PreferenceExtensionsKt.firstBlocking(prefs.getLockHomeScreen())) {
if (PreferenceCacheExtensionsKt.firstCached(prefs.getLockHomeScreen())) {
return null;
}
if (itemInfo.container != LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION) {
@@ -44,7 +44,7 @@ import com.android.quickstep.util.BaseDepthController;
import java.io.PrintWriter;
import java.util.function.Consumer;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.compat.LawnchairQuickstepCompat;
import app.lawnchair.preferences2.PreferenceManager2;
@@ -74,8 +74,9 @@ public class DepthController extends BaseDepthController implements StateHandler
public DepthController(QuickstepLauncher launcher) {
super(launcher);
var pref = PreferenceManager2.getInstance(launcher).getWallpaperDepthEffect();
mEnableDepth = PreferenceExtensionsKt.firstBlocking(pref);
var prefs = PreferenceManager2.getInstance(launcher);
var pref = prefs.getWallpaperDepthEffect();
mEnableDepth = PreferenceCacheExtensionsKt.firstCached(pref);
}
private void onLauncherDraw() {
@@ -78,7 +78,7 @@ import java.util.List;
import java.util.Objects;
import java.util.Set;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.hotseat.HotseatMode;
import app.lawnchair.preferences2.PreferenceManager2;
import app.lawnchair.theme.color.tokens.ColorTokens;
@@ -167,7 +167,7 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
PreferenceManager2 preferenceManager2 = PreferenceManager2.getInstance(context);
HotseatMode hotseatMode = PreferenceExtensionsKt.firstBlocking(preferenceManager2.getHotseatMode());
HotseatMode hotseatMode = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getHotseatMode());
mActivityContext = ActivityContext.lookupContext(context);
mIconLayoutBounds = mActivityContext.getTransientTaskbarBounds();
Resources resources = getResources();
@@ -40,7 +40,7 @@ import com.android.wm.shell.shared.animation.Interpolators;
import com.android.wm.shell.shared.bubbles.BubbleBarLocation;
import com.android.wm.shell.shared.bubbles.BubbleInfo;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences2.PreferenceManager2;
import app.lawnchair.theme.color.ColorOption;
@@ -262,10 +262,10 @@ public class BubbleView extends ConstraintLayout {
mAppIcon.setVisibility(GONE);
}
mDotColor = bubble.getDotColor();
ColorOption dotColorOption = PreferenceExtensionsKt.firstBlocking(preferenceManager2.getNotificationDotColor());
ColorOption dotColorOption = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getNotificationDotColor());
int dotColor = dotColorOption.getColorPreferenceEntry().getLightColor().invoke(getContext());
ColorOption counterColorOption = PreferenceExtensionsKt
.firstBlocking(preferenceManager2.getNotificationDotTextColor());
ColorOption counterColorOption = PreferenceCacheExtensionsKt
.firstCached(preferenceManager2.getNotificationDotTextColor(), preferenceManager2);
int countColor = counterColorOption.getColorPreferenceEntry().getLightColor().invoke(getContext());
mDotRenderer = new DotRenderer(mBubbleSize, bubble.getDotPath(), DEFAULT_PATH_SIZE, false, null, dotColor,
countColor);
@@ -54,7 +54,7 @@ import com.android.launcher3.widget.util.WidgetSizes;
import java.util.ArrayList;
import java.util.List;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences2.PreferenceManager2;
import app.lawnchair.theme.color.tokens.ColorTokens;
import app.lawnchair.theme.drawable.DrawableTokens;
@@ -220,8 +220,8 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O
public static void showForWidget(LauncherAppWidgetHostView widget, CellLayout cellLayout) {
PreferenceManager2 pref2 = PreferenceManager2.getInstance(widget.getContext());
boolean force = PreferenceExtensionsKt.firstBlocking(pref2.getForceWidgetResize());
boolean unlimited = PreferenceExtensionsKt.firstBlocking(pref2.getWidgetUnlimitedSize());
boolean force = PreferenceCacheExtensionsKt.firstCached(pref2.getForceWidgetResize());
boolean unlimited = PreferenceCacheExtensionsKt.firstCached(pref2.getWidgetUnlimitedSize());
// If widget is not added to view hierarchy, we cannot show resize frame at correct location
if (widget.getParent() == null) {
@@ -110,7 +110,7 @@ import java.util.HashMap;
import java.util.Locale;
import java.util.Objects;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.LawnchairApp;
import app.lawnchair.font.FontManager;
import app.lawnchair.gestures.IconGestureListener;
@@ -1186,7 +1186,7 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver,
ItemInfo info = tag instanceof ItemInfo ? (ItemInfo) tag : null;
return info == null || info.container != LauncherSettings.Favorites.CONTAINER_HOTSEAT
&& info.container != LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION
|| PreferenceExtensionsKt.firstBlocking(pref2.getEnableLabelInDock());
|| PreferenceCacheExtensionsKt.firstCached(pref2.getEnableLabelInDock());
}
/**
+4 -4
View File
@@ -79,7 +79,7 @@ import com.android.launcher3.util.Themes;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.widget.LauncherAppWidgetHostView;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import com.google.android.msdl.data.model.MSDLToken;
@@ -774,7 +774,7 @@ public class CellLayout extends ViewGroup {
// Hotseat icons - modified by lawnchair
if (child instanceof BubbleTextView bubbleChild) {
boolean enableLabel = mContainerType == HOTSEAT
? PreferenceExtensionsKt.firstBlocking(pref.getEnableLabelInDock())
? PreferenceCacheExtensionsKt.firstCached(pref.getEnableLabelInDock())
: true;
bubbleChild.setTextVisibility(enableLabel);
}
@@ -1926,7 +1926,7 @@ public class CellLayout extends ViewGroup {
public boolean isOccupied(int x, int y) {
if (x >= 0 && x < mCountX && y >= 0 && y < mCountY) {
return mOccupied.cells[x][y] && !PreferenceExtensionsKt.firstBlocking(pref.getAllowWidgetOverlap());
return mOccupied.cells[x][y] && !PreferenceCacheExtensionsKt.firstCached(pref.getAllowWidgetOverlap());
}
if (BuildConfigs.IS_STUDIO_BUILD) {
throw new RuntimeException("Position exceeds the bound of this CellLayout");
@@ -2009,7 +2009,7 @@ public class CellLayout extends ViewGroup {
}
public boolean isRegionVacant(int x, int y, int spanX, int spanY) {
return mOccupied.isRegionVacant(x, y, spanX, spanY) || PreferenceExtensionsKt.firstBlocking(pref.getAllowWidgetOverlap());
return mOccupied.isRegionVacant(x, y, spanX, spanY) || PreferenceCacheExtensionsKt.firstCached(pref.getAllowWidgetOverlap());
}
public void setSpaceBetweenCellLayoutsPx(@Px int spaceBetweenCellLayoutsPx) {
@@ -33,7 +33,7 @@ import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.util.Preconditions;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences2.PreferenceManager2;
@@ -125,7 +125,7 @@ public class DeleteDropTarget extends ButtonDropTarget {
}
private boolean canRemove(ItemInfo item) {
boolean isDeckLayoutFirst = PreferenceExtensionsKt.firstBlocking(pref2.getDeckLayout());
boolean isDeckLayoutFirst = PreferenceCacheExtensionsKt.firstCached(pref2.getDeckLayout());
return isDeckLayoutFirst ? isCanDrop(item) : item.id != ItemInfo.NO_ID;
}
@@ -169,7 +169,7 @@ public class DeleteDropTarget extends ButtonDropTarget {
// because we already remove the drag view from the folder (if the drag originated from
// a folder) in Folder.beginDrag()
CharSequence announcement = getContext().getString(R.string.item_removed);
if (!PreferenceExtensionsKt.firstBlocking(pref2.getDeckLayout())) {
if (!PreferenceCacheExtensionsKt.firstCached(pref2.getDeckLayout())) {
mDropTargetHandler.onAccessibilityDelete(view, item, announcement);
}
}
+26 -26
View File
@@ -88,7 +88,7 @@ import java.io.PrintWriter;
import java.util.Locale;
import java.util.function.Consumer;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.DeviceProfileOverrides;
import app.lawnchair.LawnchairApp;
import app.lawnchair.LawnchairAppKt;
@@ -355,18 +355,18 @@ public class DeviceProfile {
mTextFactors = DeviceProfileOverrides.INSTANCE.get(context).getTextFactors();
preferenceManager2 = PreferenceManager2.INSTANCE.get(context);
allAppsCellHeightMultiplier = PreferenceExtensionsKt
.firstBlocking(preferenceManager2.getDrawerCellHeightFactor());
allAppsCellHeightMultiplier = PreferenceCacheExtensionsKt
.firstCached(preferenceManager2.getDrawerCellHeightFactor());
// Lawnchair: clamp the user padding factors to their slider ranges so a restored or
// manually edited preference can't feed out-of-range values into the layout math.
workspacePaddingHorizontalFactor = Utilities.boundToRange(PreferenceExtensionsKt
.firstBlocking(preferenceManager2.getWorkspacePaddingHorizontalFactor()), 0f, 2f);
workspacePaddingVerticalFactor = Utilities.boundToRange(PreferenceExtensionsKt
.firstBlocking(preferenceManager2.getWorkspacePaddingVerticalFactor()), 0f, 2f);
widgetPaddingFactor = Utilities.boundToRange(PreferenceExtensionsKt
.firstBlocking(preferenceManager2.getWidgetPaddingFactor()), 0f, 2f);
drawerPaddingTopFactor = Utilities.boundToRange(PreferenceExtensionsKt
.firstBlocking(preferenceManager2.getDrawerPaddingTopFactor()), 1f, 2f);
workspacePaddingHorizontalFactor = Utilities.boundToRange(PreferenceCacheExtensionsKt
.firstCached(preferenceManager2.getWorkspacePaddingHorizontalFactor()), 0f, 2f);
workspacePaddingVerticalFactor = Utilities.boundToRange(PreferenceCacheExtensionsKt
.firstCached(preferenceManager2.getWorkspacePaddingVerticalFactor()), 0f, 2f);
widgetPaddingFactor = Utilities.boundToRange(PreferenceCacheExtensionsKt
.firstCached(preferenceManager2.getWidgetPaddingFactor()), 0f, 2f);
drawerPaddingTopFactor = Utilities.boundToRange(PreferenceCacheExtensionsKt
.firstCached(preferenceManager2.getDrawerPaddingTopFactor()), 1f, 2f);
this.inv = inv;
mDeviceProperties = DeviceProperties.Factory.createDeviceProperties(
@@ -392,7 +392,7 @@ public class DeviceProfile {
mIsScalableGrid = inv.isScalable && !isVerticalBarLayout() && !isMultiWindowMode;
// Determine device posture.
mInfo = info;
boolean isTaskBarEnabled = PreferenceExtensionsKt.firstBlocking(preferenceManager2.getEnableTaskbarOnPhone());
boolean isTaskBarEnabled = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getEnableTaskbarOnPhone());
boolean taskbarOrBubbleBarOnPhones = enableTinyTaskbar()
|| (enableBubbleBar() && enableBubbleBarOnPhones());
isTaskbarPresent = isTaskBarEnabled && (mDeviceProperties.isTablet() || (taskbarOrBubbleBarOnPhones && isGestureMode))
@@ -409,8 +409,8 @@ public class DeviceProfile {
workspacePageIndicatorHeight = res.getDimensionPixelSize(
R.dimen.workspace_page_indicator_height);
workspacePageIndicatorHeight *= PreferenceExtensionsKt
.firstBlocking(preferenceManager2.getPageIndicatorHeightFactor());
workspacePageIndicatorHeight *= PreferenceCacheExtensionsKt
.firstCached(preferenceManager2.getPageIndicatorHeightFactor());
mWorkspacePageIndicatorOverlapWorkspace =
res.getDimensionPixelSize(R.dimen.workspace_page_indicator_overlap_workspace);
@@ -507,7 +507,7 @@ public class DeviceProfile {
workspaceCellPaddingXPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_cell_padding_x);
HotseatMode hotseatMode = PreferenceExtensionsKt.firstBlocking(preferenceManager2.getHotseatMode());
HotseatMode hotseatMode = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getHotseatMode());
boolean isQsbEnable = hotseatMode.getLayoutResourceId() != R.layout.empty_view;
numShownHotseatIcons = displayOptionSpec.numShownHotseatIcons;
@@ -717,8 +717,8 @@ public class DeviceProfile {
dimensionOverrideProvider.accept(this);
// Check if notification dots should show the notification count
boolean showNotificationCount = PreferenceExtensionsKt
.firstBlocking(preferenceManager2.getShowNotificationCount());
boolean showNotificationCount = PreferenceCacheExtensionsKt
.firstCached(preferenceManager2.getShowNotificationCount());
// Load the default font to use on notification dots
Typeface typeface = null;
@@ -727,12 +727,12 @@ public class DeviceProfile {
}
// Load dot color
ColorOption dotColorOption = PreferenceExtensionsKt.firstBlocking(preferenceManager2.getNotificationDotColor());
ColorOption dotColorOption = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getNotificationDotColor());
int dotColor = dotColorOption.getColorPreferenceEntry().getLightColor().invoke(context);
// Load counter color
ColorOption counterColorOption = PreferenceExtensionsKt
.firstBlocking(preferenceManager2.getNotificationDotTextColor());
ColorOption counterColorOption = PreferenceCacheExtensionsKt
.firstCached(preferenceManager2.getNotificationDotTextColor());
int countColor = counterColorOption.getColorPreferenceEntry().getLightColor().invoke(context);
// This is done last, after iconSizePx is calculated above.
@@ -880,7 +880,7 @@ public class DeviceProfile {
/** Updates hotseatCellHeightPx and hotseatBarSizePx */
private void updateHotseatSizes(int hotseatIconSizePx) {
int iconTextHeight = Utilities.calculateTextHeight(iconTextSizePx);
boolean isLabelInDock = PreferenceExtensionsKt.firstBlocking(preferenceManager2.getEnableLabelInDock());
boolean isLabelInDock = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getEnableLabelInDock());
// Ensure there is enough space for folder icons, which have a slightly larger radius.
hotseatCellHeightPx = getIconSizeWithOverlap(hotseatIconSizePx * 2) - hotseatIconSizePx / 2;
hotseatCellHeightPx += isLabelInDock ? iconTextHeight : 0;
@@ -888,8 +888,8 @@ public class DeviceProfile {
int space = Math.abs(hotseatCellHeightPx / 2) - 16;
hotseatBarBottomSpacePx *= PreferenceExtensionsKt
.firstBlocking(preferenceManager2.getHotseatBottomFactor());
hotseatBarBottomSpacePx *= PreferenceCacheExtensionsKt
.firstCached(preferenceManager2.getHotseatBottomFactor());
if (isVerticalBarLayout()) {
hotseatBarSizePx = hotseatIconSizePx + getHotseatProfile().getBarEdgePaddingPx()
@@ -906,7 +906,7 @@ public class DeviceProfile {
+ hotseatBarBottomSpacePx
+ space;
}
var isHotseatEnabled = PreferenceExtensionsKt.firstBlocking(preferenceManager2.isHotseatEnabled());
var isHotseatEnabled = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.isHotseatEnabled());
if (!isHotseatEnabled) {
hotseatBarSizePx = 0;
}
@@ -1413,8 +1413,8 @@ public class DeviceProfile {
Math.max(0, desiredWorkspaceHorizontalMarginPx + cellLayoutHorizontalPadding
- (getAllAppsProfile().getBorderSpacePx().x / 2));
}
var allAppLeftRightMarginMultiplier = PreferenceExtensionsKt
.firstBlocking(preferenceManager2.getDrawerLeftRightMarginFactor());
var allAppLeftRightMarginMultiplier = PreferenceCacheExtensionsKt
.firstCached(preferenceManager2.getDrawerLeftRightMarginFactor());
var marginMultiplier = allAppLeftRightMarginMultiplier * (!getDeviceProperties().isTablet() ? 100 : 2);
allAppsLeftRightMargin = (int) (allAppsLeftRightMargin * marginMultiplier);
@@ -31,7 +31,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.android.launcher3.compat.AccessibilityManagerCompat;
import com.android.launcher3.views.RecyclerViewFastScroller;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences2.PreferenceManager2;
/**
@@ -99,7 +99,7 @@ public abstract class FastScrollRecyclerView extends RecyclerView {
* Saved the scroll position
*/
public void saveScrollPosition() {
savedScrollPosition = PreferenceExtensionsKt.firstBlocking(pref2.getRememberPosition())
savedScrollPosition = PreferenceCacheExtensionsKt.firstCached(pref2.getRememberPosition())
? computeVerticalScrollOffset()
: 0;
}
+5 -5
View File
@@ -62,7 +62,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import com.hoko.blur.HokoBlur;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.hotseat.DisabledHotseat;
import app.lawnchair.hotseat.HotseatMode;
import app.lawnchair.hotseat.LawnchairHotseat;
@@ -128,8 +128,8 @@ public class Hotseat extends CellLayout implements Insettable {
preferenceManager2 = PreferenceManager2.getInstance(context);
preferenceManager = PreferenceManager.getInstance(context);
HotseatMode hotseatMode = PreferenceExtensionsKt.firstBlocking(preferenceManager2.getHotseatMode());
var hotseatEnabled = PreferenceExtensionsKt.firstBlocking(preferenceManager2.isHotseatEnabled());
HotseatMode hotseatMode = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getHotseatMode());
var hotseatEnabled = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.isHotseatEnabled());
if (!hotseatEnabled) {
hotseatMode = DisabledHotseat.INSTANCE;
@@ -139,7 +139,7 @@ public class Hotseat extends CellLayout implements Insettable {
// The current hotseat mode is not available,
// setting the hotseat mode to one that is always available
hotseatMode = LawnchairHotseat.INSTANCE;
PreferenceExtensionsKt.setBlocking(preferenceManager2.getHotseatMode(), hotseatMode);
com.patrykmichalik.opto.core.PreferenceExtensionsKt.setBlocking(preferenceManager2.getHotseatMode(), hotseatMode);
}
int layoutId = hotseatMode.getLayoutResourceId();
@@ -170,7 +170,7 @@ public class Hotseat extends CellLayout implements Insettable {
private void setUpBackground() {
if(!preferenceManager.getHotseatBG().get()) return;
var bgColor = PreferenceExtensionsKt.firstBlocking(preferenceManager2.getHotseatBackgroundColor());
var bgColor = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getHotseatBackgroundColor());
var transparency = preferenceManager.getHotseatBGAlpha().get();
var alphaValue = (transparency * 255) / 100;
var baseColor = bgColor.getColorPreferenceEntry().getLightColor().invoke(getContext());
@@ -26,7 +26,7 @@ import java.util.Collections;
import java.util.List;
import com.hoko.blur.HokoBlur;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences.PreferenceManager;
import app.lawnchair.preferences2.PreferenceManager2;
import app.lawnchair.util.FileAccessManager;
@@ -61,7 +61,7 @@ public class LauncherRootView extends InsettableFrameLayout {
pref = PreferenceManager.getInstance(context);
PreferenceManager2 prefs2 = PreferenceManager2.getInstance(context);
mEnableTaskbarOnPhone = PreferenceExtensionsKt.firstBlocking(prefs2.getEnableTaskbarOnPhone());
mEnableTaskbarOnPhone = PreferenceCacheExtensionsKt.firstCached(prefs2.getEnableTaskbarOnPhone());
FileAccessManager fileAccessManager = FileAccessManager.getInstance(context);
FileAccessState wallpaperAccessState = fileAccessManager.getWallpaperAccessState().getValue();
+2 -2
View File
@@ -63,7 +63,7 @@ import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.views.ActivityContext;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import java.util.ArrayList;
import java.util.function.Consumer;
@@ -1423,7 +1423,7 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
// move to the left and fling to the right will register as a fling to the right.
boolean infiniteScroll = prefs.getInfiniteScrolling().get();
boolean enableFeed = PreferenceExtensionsKt.firstBlocking(prefs2.getEnableFeed());
boolean enableFeed = PreferenceCacheExtensionsKt.firstCached(prefs2.getEnableFeed());
if (((isSignificantMove && !isDeltaLeft && !isFling) ||
(isFling && !isVelocityLeft)) && mCurrentPage > 0) {
@@ -32,8 +32,7 @@ import com.android.launcher3.model.ItemInstallQueue;
import com.android.launcher3.pm.InstallSessionHelper;
import com.android.launcher3.pm.UserCache;
import com.android.launcher3.util.Executors;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences2.PreferenceManager2;
import java.util.Locale;
@@ -112,10 +111,12 @@ public class SessionCommitReceiver extends BroadcastReceiver {
*/
public static boolean isEnabled(Context context, UserHandle user) {
if (Flags.privateSpaceRestrictItemDrag()
&& PreferenceExtensionsKt.firstBlocking(PreferenceManager2.getInstance(context).getLockHomeScreen())
&& user != null
&& UserCache.getInstance(context).getUserInfo(user).isPrivate()) {
return false;
&& user != null) {
PreferenceManager2 prefs2 = PreferenceManager2.getInstance(context);
if (PreferenceCacheExtensionsKt.firstCached(prefs2.getLockHomeScreen())
&& UserCache.getInstance(context).getUserInfo(user).isPrivate()) {
return false;
}
}
return LauncherPrefs.getPrefs(context).getBoolean(ADD_ICON_PREFERENCE_KEY, true);
}
@@ -43,7 +43,7 @@ import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.widget.LauncherAppWidgetHostView;
import com.android.launcher3.widget.NavigableAppWidgetHostView;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences2.PreferenceManager2;
@@ -87,7 +87,7 @@ public class ShortcutAndWidgetContainer extends ViewGroup implements FolderIcon.
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
boolean mAllowWidgetOverlap = PreferenceExtensionsKt.firstBlocking(mPreferenceManager2.getAllowWidgetOverlap());
boolean mAllowWidgetOverlap = PreferenceCacheExtensionsKt.firstCached(mPreferenceManager2.getAllowWidgetOverlap());
setClipChildren(!mAllowWidgetOverlap);
setClipToPadding(!mAllowWidgetOverlap);
setClipToOutline(!mAllowWidgetOverlap);
+13 -13
View File
@@ -145,7 +145,7 @@ import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import static app.lawnchair.util.LawnchairUtilsKt.toBitmap;
import app.lawnchair.LawnchairApp;
import app.lawnchair.LawnchairAppKt;
@@ -612,7 +612,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
}
public void updateStatusbarClock() {
if (mCurrentPage == 0 && PreferenceExtensionsKt.firstBlocking(mPreferenceManager2.getStatusBarClock())) {
if (mCurrentPage == 0 && PreferenceCacheExtensionsKt.firstCached(mPreferenceManager2.getStatusBarClock())) {
LawnchairAppKt.getLawnchairApp(mLauncher).hideClockInStatusBar();
} else {
LawnchairAppKt.getLawnchairApp(mLauncher).restoreClockInStatusBar();
@@ -662,18 +662,18 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
public void bindAndInitFirstWorkspaceScreen() {
// Add the first page
CellLayout firstPage = insertNewWorkspaceScreen(Workspace.FIRST_SCREEN_ID, getChildCount());
if (!PreferenceExtensionsKt.firstBlocking(mPreferenceManager2.getEnableSmartspace())) {
if (!PreferenceCacheExtensionsKt.firstCached(mPreferenceManager2.getEnableSmartspace())) {
mFirstPagePinnedItem = null;
return;
}
if (mFirstPagePinnedItem == null) {
SmartspaceMode smartspaceMode = PreferenceExtensionsKt
.firstBlocking(mPreferenceManager2.getSmartspaceMode());
SmartspaceMode smartspaceMode = PreferenceCacheExtensionsKt
.firstCached(mPreferenceManager2.getSmartspaceMode());
if (!smartspaceMode.isAvailable(this.mLauncher)) {
// The current smartspace mode is not available,
// setting the smartspace mode to one that is always available
smartspaceMode = LawnchairSmartspace.INSTANCE;
PreferenceExtensionsKt.setBlocking(mPreferenceManager2.getSmartspaceMode(), smartspaceMode);
com.patrykmichalik.opto.core.PreferenceExtensionsKt.setBlocking(mPreferenceManager2.getSmartspaceMode(), smartspaceMode);
}
// In transposed layout, we add the first page pinned widget in the Grid.
// As workspace does not touch the edges, we do not need a full
@@ -1113,7 +1113,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
id, persistedScreenIds, isExtraEmptyScreen(id))) {
continue;
}
if ((!PreferenceExtensionsKt.firstBlocking(PreferenceManager2.INSTANCE.get(getContext()).getEnableSmartspace()) || id > FIRST_SCREEN_ID)
if ((!PreferenceCacheExtensionsKt.firstCached(PreferenceManager2.INSTANCE.get(getContext()).getEnableSmartspace(), PreferenceManager2.INSTANCE.get(getContext())) || id > FIRST_SCREEN_ID)
&& cl.getShortcutsAndWidgets().getChildCount() == 0) {
removeScreens.add(id);
}
@@ -1174,7 +1174,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
updateAccessibilityViewPageDescription();
// Reset default home page if it's now out of range after page removal
int storedDefault = PreferenceExtensionsKt.firstBlocking(mPreferenceManager2.getDefaultHomePage());
int storedDefault = PreferenceCacheExtensionsKt.firstCached(mPreferenceManager2.getDefaultHomePage());
if (storedDefault >= getChildCount()) {
setDefaultPage(DEFAULT_PAGE);
}
@@ -1494,7 +1494,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
public void showPageIndicatorAtCurrentScroll() {
if (mPageIndicator != null) {
mPageIndicator.setScroll(getScrollX(), computeMaxScroll());
var isHotseatEnabled = PreferenceExtensionsKt.firstBlocking(mPreferenceManager2.isHotseatEnabled());
var isHotseatEnabled = PreferenceCacheExtensionsKt.firstCached(mPreferenceManager2.isHotseatEnabled());
mPageIndicator.setVisibility(isHotseatEnabled ? VISIBLE : INVISIBLE);
}
}
@@ -1940,7 +1940,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
}
}
boolean lockHomeScreen = PreferenceExtensionsKt.firstBlocking(mPreferenceManager2.getLockHomeScreen());
boolean lockHomeScreen = PreferenceCacheExtensionsKt.firstCached(mPreferenceManager2.getLockHomeScreen());
if (lockHomeScreen) {
child.setVisibility(View.VISIBLE);
@@ -2226,7 +2226,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
boolean snappedToNewPage = false;
boolean resizeOnDrop = false;
Runnable onCompleteRunnable = null;
boolean forceWidgetResize = PreferenceExtensionsKt.firstBlocking(mPreferenceManager2.getForceWidgetResize());
boolean forceWidgetResize = PreferenceCacheExtensionsKt.firstCached(mPreferenceManager2.getForceWidgetResize());
if (d.dragSource != this || mDragInfo == null) {
final int[] touchXY = new int[]{(int) mDragViewVisualCenter[0],
(int) mDragViewVisualCenter[1]};
@@ -3862,7 +3862,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
* Falls back to {@link #DEFAULT_PAGE} if the stored page is out of range.
*/
public int getDefaultPage() {
int storedPage = PreferenceExtensionsKt.firstBlocking(mPreferenceManager2.getDefaultHomePage());
int storedPage = PreferenceCacheExtensionsKt.firstCached(mPreferenceManager2.getDefaultHomePage());
int pageCount = getChildCount();
if (storedPage >= 0 && storedPage < pageCount) {
return storedPage;
@@ -3874,7 +3874,7 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>
* Sets the given page index as the default home page.
*/
public void setDefaultPage(int pageIndex) {
PreferenceExtensionsKt.setBlocking(mPreferenceManager2.getDefaultHomePage(), pageIndex);
com.patrykmichalik.opto.core.PreferenceExtensionsKt.setBlocking(mPreferenceManager2.getDefaultHomePage(), pageIndex);
}
/**
@@ -28,7 +28,7 @@ import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.touch.ItemLongClickListener;
import app.lawnchair.preferences2.PreferenceManager2;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import com.android.launcher3.util.IntSet;
public interface WorkspaceLayoutManager {
@@ -110,10 +110,10 @@ public interface WorkspaceLayoutManager {
// Hide folder title in the hotseat
if (child instanceof FolderIcon) {
PreferenceManager2 prefs = PreferenceManager2.getInstance(child.getContext());
((FolderIcon) child).setTextVisible(
PreferenceExtensionsKt.firstBlocking(
PreferenceManager2.getInstance(child.getContext())
.getEnableLabelInDock())); // LC-Note: Show/hide folder title based on dock label preference
PreferenceCacheExtensionsKt.firstCached(
prefs.getEnableLabelInDock()));
}
} else {
// Show folder title if not in the hotseat
@@ -111,7 +111,7 @@ import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Stream;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import static com.topjohnwu.superuser.internal.Utils.context;
import app.lawnchair.allapps.LawnchairAlphabeticalAppsList;
import app.lawnchair.font.FontManager;
@@ -283,7 +283,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
* onFinishInflate -> onPostCreate
*/
protected void initContent() {
showFastScroller = PreferenceExtensionsKt.firstBlocking(pref2.getShowScrollbar());
showFastScroller = PreferenceCacheExtensionsKt.firstCached(pref2.getShowScrollbar());
mMainAdapterProvider = mSearchUiDelegate.createMainAdapterProvider();
@@ -543,7 +543,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
*/
public void reset(boolean animate, boolean exitSearch) {
// Scroll Main and Work RV to top. Search RV is done in `resetSearch`.
if (!PreferenceExtensionsKt.firstBlocking(pref2.getRememberPosition())) {
if (!PreferenceCacheExtensionsKt.firstCached(pref2.getRememberPosition())) {
for (int i = 0; i < mAH.size(); i++) {
if (i != SEARCH && mAH.get(i).mRecyclerView != null) {
mAH.get(i).mRecyclerView.scrollToTop();
@@ -817,7 +817,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
void setupHeader() {
mAdditionalHeaderRows.forEach(row -> mHeader.onPluginDisconnected(row));
var hideHeader = PreferenceExtensionsKt.firstBlocking(pref2.getHideAppDrawerSearchBar());
var hideHeader = PreferenceCacheExtensionsKt.firstCached(pref2.getHideAppDrawerSearchBar());
mHeader.setVisibility(hideHeader ? View.GONE : View.VISIBLE);
boolean tabsHidden = !mUsingTabs;
mHeader.setup(
@@ -870,12 +870,12 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
}
protected void updateHeaderScroll(int scrolledOffset) {
if (PreferenceExtensionsKt.firstBlocking(pref2.getHideAppDrawerSearchBar()))
if (PreferenceCacheExtensionsKt.firstCached(pref2.getHideAppDrawerSearchBar()))
return;
// Check if tab container background should be shown
boolean showTabContainerBackground = PreferenceExtensionsKt.firstBlocking(
pref2.getWorkProfileTabContainerBackground());
boolean showTabContainerBackground = PreferenceCacheExtensionsKt.firstCached(
pref2.getWorkProfileTabContainerBackground(), pref2);
float prog = Utilities.boundToRange((float) scrolledOffset / mHeaderThreshold, 0f, 1f);
int headerColor = getHeaderColor(prog);
@@ -904,8 +904,8 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
protected int getHeaderColor(float blendRatio) {
if (!mActivityContext.getDeviceProfile().shouldShowAllAppsOnSheet()) {
float opacity = mSearchContainer.getAlpha();
var showHeaderBackground = PreferenceExtensionsKt.firstBlocking(
pref2.getAppDrawerSearchBarBackground());
var showHeaderBackground = PreferenceCacheExtensionsKt.firstCached(
pref2.getAppDrawerSearchBarBackground(), pref2);
if (showHeaderBackground) {
opacity = pref.getDrawerOpacity().get();
}
@@ -1034,7 +1034,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
private void alignParentTop(View v, boolean includeTabsMargin) {
if (!(v.getLayoutParams() instanceof RelativeLayout.LayoutParams)
|| PreferenceExtensionsKt.firstBlocking(pref2.getHideAppDrawerSearchBar())) {
|| PreferenceCacheExtensionsKt.firstCached(pref2.getHideAppDrawerSearchBar())) {
return;
}
@@ -1049,7 +1049,7 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
private void removeCustomRules(View v) {
if (!(v.getLayoutParams() instanceof RelativeLayout.LayoutParams)
|| PreferenceExtensionsKt.firstBlocking(pref2.getHideAppDrawerSearchBar())) {
|| PreferenceCacheExtensionsKt.firstCached(pref2.getHideAppDrawerSearchBar())) {
return;
}
@@ -67,7 +67,7 @@ import com.android.launcher3.views.ScrimView;
import com.google.android.msdl.data.model.MSDLToken;
import app.lawnchair.preferences2.PreferenceManager2;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
/**
* Handles AllApps view transition.
@@ -404,8 +404,9 @@ public class AllAppsTransitionController
setAlphas(toState, config, builder);
// This controls both haptics for tapping on QSB and going to all apps.
if (ALL_APPS.equals(toState) && mLauncher.isInState(NORMAL)) {
boolean hapticEnabled = PreferenceExtensionsKt.firstBlocking(
PreferenceManager2.getInstance(mLauncher).getAppDrawerHapticFeedback());
PreferenceManager2 prefs = PreferenceManager2.getInstance(mLauncher);
boolean hapticEnabled = PreferenceCacheExtensionsKt.firstCached(
prefs.getAppDrawerHapticFeedback(), prefs);
if (hapticEnabled) {
if (Flags.msdlFeedback()) {
@@ -42,7 +42,7 @@ import com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip;
import com.android.systemui.plugins.AllAppsRow;
import com.android.systemui.plugins.AllAppsRow.OnHeightUpdatedListener;
import com.android.systemui.plugins.PluginListener;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import java.util.ArrayList;
import java.util.Arrays;
@@ -405,7 +405,7 @@ public class FloatingHeaderView extends LinearLayout implements
}
mHeaderCollapsed = false;
mSnappedScrolledY = -mMaxTranslation;
if (!PreferenceExtensionsKt.firstBlocking (pref2.getRememberPosition ())) {
if (!PreferenceCacheExtensionsKt.firstCached(pref2.getRememberPosition())) {
mCurrentRV.scrollToTop();
}
}
@@ -29,7 +29,7 @@ import java.util.List;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
/**
* Contains the logic of a reorder.
@@ -134,7 +134,7 @@ public class ReorderAlgorithm {
Rect occupiedRect = new Rect(cellX, cellY, cellX + spanX, cellY + spanY);
// Lawnchair: Widget overlap
if (PreferenceExtensionsKt.firstBlocking(mCellLayout.pref.getAllowWidgetOverlap())) {
if (PreferenceCacheExtensionsKt.firstCached(mCellLayout.pref.getAllowWidgetOverlap(), mCellLayout.pref)) {
solution.intersectingViews = new ArrayList<>(intersectingViews);
return true;
}
@@ -44,7 +44,7 @@ import com.android.launcher3.model.data.ItemInfoWithIcon;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.util.TouchController;
import com.android.launcher3.views.ActivityContext;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import java.util.ArrayList;
import java.util.Optional;
@@ -558,7 +558,7 @@ public abstract class DragController<T extends ActivityContext>
dropTarget.onDrop(mDragObject, mOptions);
}
accepted = true;
if (PreferenceExtensionsKt.firstBlocking(pref2.getDeckLayout()) && dropTarget instanceof DeleteDropTarget &&
if (PreferenceCacheExtensionsKt.firstCached(pref2.getDeckLayout()) && dropTarget instanceof DeleteDropTarget &&
isNeedCancelDrag(mDragObject.dragInfo)) {
cancelDrag();
}
@@ -53,7 +53,7 @@ import com.android.launcher3.graphics.ThemeManager;
import com.android.launcher3.util.Themes;
import com.android.launcher3.views.BaseDragLayer;
import com.androidinternal.graphics.ColorUtils;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import java.util.List;
@@ -197,7 +197,7 @@ public class FolderAnimationManager implements FolderAnimationCreator {
int initialColor = ColorUtils.setAlphaComponent(previewColor, LawnchairUtilsKt.getFolderPreviewAlpha(mContext));
int finalColor = ColorTokens.FolderBackgroundColor.resolveColor(mContext);
ColorOption colorOption = PreferenceExtensionsKt.firstBlocking(mFolder.preferenceManager2.getFolderColor());
ColorOption colorOption = PreferenceCacheExtensionsKt.firstCached(mFolder.preferenceManager2.getFolderColor(), mFolder.preferenceManager2);
int folderColor = colorOption.getColorPreferenceEntry().getLightColor().invoke(mContext);
if (folderColor != 0) {
@@ -530,4 +530,4 @@ public class FolderAnimationManager implements FolderAnimationCreator {
? ((AppPairIcon) v).getTitleTextView()
: (BubbleTextView) v;
}
}
}
@@ -27,7 +27,7 @@ import android.view.inputmethod.InputConnectionWrapper;
import android.view.inputmethod.InputMethodManager;
import com.android.launcher3.ExtendedEditText;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import java.util.List;
@@ -139,7 +139,7 @@ public class FolderNameEditText extends ExtendedEditText {
@Override
public boolean onTouchEvent(MotionEvent event) {
if (PreferenceExtensionsKt.firstBlocking(mPreferenceManager2.getLockHomeScreen())) return true;
if (PreferenceCacheExtensionsKt.firstCached(mPreferenceManager2.getLockHomeScreen())) return true;
return super.onTouchEvent(event);
}
}
@@ -56,7 +56,7 @@ import com.android.launcher3.graphics.ShapeDelegate;
import com.android.launcher3.graphics.ThemeManager;
import com.android.launcher3.util.Themes;
import com.android.launcher3.views.ActivityContext;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences2.PreferenceManager2;
import app.lawnchair.theme.color.ColorOption;
@@ -192,11 +192,11 @@ public class PreviewBackground extends DelegatedCellDrawing {
PreferenceManager2 preferenceManager2 = PreferenceManager2.INSTANCE.get(context);
// Load folder color
ColorOption colorOption = PreferenceExtensionsKt.firstBlocking(preferenceManager2.getFolderColor());
ColorOption colorOption = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getFolderColor());
int folderColor = colorOption.getColorPreferenceEntry().getLightColor().invoke(context);
TypedArray ta = context.getTheme().obtainStyledAttributes(R.styleable.FolderIconPreview);
ColorOption dotColorOption = PreferenceExtensionsKt.firstBlocking(preferenceManager2.getNotificationDotColor());
ColorOption dotColorOption = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getNotificationDotColor());
mDotColor = dotColorOption.getColorPreferenceEntry().getLightColor().invoke(context);
mStrokeColor = ColorTokens.FolderIconBorderColor.resolveColor(context);
if (folderColor != 0) {
@@ -53,7 +53,8 @@ import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.widget.LauncherWidgetHolder;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences2.PreferenceManager2;
import java.io.File;
import java.net.URISyntaxException;
import java.util.Arrays;
@@ -259,7 +260,8 @@ public class DatabaseHelper extends NoLocaleSQLiteHelper implements
Favorites.SCREEN, IntArray.wrap(-777, -778)), null);
}
case 30: {
if (PreferenceExtensionsKt.firstBlocking(PreferenceManager2.INSTANCE.get(mContext).getEnableSmartspace())) {
PreferenceManager2 prefs = PreferenceManager2.INSTANCE.get(mContext);
if (PreferenceCacheExtensionsKt.firstCached(prefs.getEnableSmartspace())) {
// Clean up first row in screen 0 as it might contain junk data.
Log.d(TAG, "Cleaning up first row");
db.delete(Favorites.TABLE_NAME,
@@ -55,7 +55,7 @@ import com.android.launcher3.util.IntArray;
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
import com.android.launcher3.widget.WidgetManagerHelper;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -400,7 +400,7 @@ public class GridSizeMigrationDBController {
@NonNull final List<DbEntry> sortedItemsToPlace, List<Integer> idsInUse, Context context) {
PreferenceManager2 prefs2 = PreferenceManager2.INSTANCE.get(context);
boolean smartspaceEnabled = PreferenceExtensionsKt.firstBlocking(prefs2.getEnableSmartspace());
boolean smartspaceEnabled = PreferenceCacheExtensionsKt.firstCached(prefs2.getEnableSmartspace());
final GridOccupancy occupied = new GridOccupancy(trgX, trgY);
final Point trg = new Point(trgX, trgY);
@@ -44,7 +44,7 @@ import com.android.launcher3.provider.LauncherDbUtils.shiftWorkspaceByXCells
import com.android.launcher3.util.CellAndSpan
import com.android.launcher3.util.GridOccupancy
import com.android.launcher3.util.IntArray
import com.patrykmichalik.opto.core.firstBlocking
import app.lawnchair.preferences2.firstCached
class GridSizeMigrationLogic {
/**
@@ -507,7 +507,7 @@ class GridSizeMigrationLogic {
val prefs2 = PreferenceManager2.INSTANCE.get(context)
val next: Point =
if (screenId == 0 && prefs2.enableSmartspace.firstBlocking()) {
if (screenId == 0 && prefs2.enableSmartspace.firstCached()) {
Point(0, 1 /* smartspace */)
} else {
Point(0, 0)
@@ -80,7 +80,7 @@ import dagger.assisted.AssistedInject;
import java.net.URISyntaxException;
import java.security.InvalidParameterException;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.LawnchairApp;
import app.lawnchair.preferences2.PreferenceManager2;
@@ -646,7 +646,7 @@ public class LoaderCursor extends CursorWrapper {
if (!mOccupied.containsKey(item.screenId)) {
GridOccupancy screen = new GridOccupancy(countX + 1, countY + 1);
if (item.screenId == Workspace.FIRST_SCREEN_ID && PreferenceExtensionsKt.firstBlocking(preferenceManager2.getEnableSmartspace())) {
if (item.screenId == Workspace.FIRST_SCREEN_ID && PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getEnableSmartspace())) {
// Mark the first X columns (X is width of the search container) in the first row as
// occupied (if the feature is enabled) in order to account for the search
// container.
@@ -667,7 +667,7 @@ public class LoaderCursor extends CursorWrapper {
+ " into cell (" + containerIndex + "-" + item.screenId + ":"
+ item.cellX + "," + item.cellX + "," + item.spanX + "," + item.spanY
+ ") already occupied");
return PreferenceExtensionsKt.firstBlocking(preferenceManager2.getAllowWidgetOverlap());
return PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getAllowWidgetOverlap());
}
}
@@ -72,7 +72,7 @@ import java.util.stream.Collectors;
import app.lawnchair.deck.LawndeckManager;
import app.lawnchair.preferences.PreferenceManager;
import app.lawnchair.preferences2.PreferenceManager2;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
/**
* Handles updates due to changes in package manager (app installed/updated/removed)
@@ -465,7 +465,7 @@ public class PackageUpdatedTask implements ModelUpdateTask {
// If deck layout is enabled, add newly installed apps to workspace with categorization
PreferenceManager2 pref2 = PreferenceManager2.INSTANCE.get(context);
if (PreferenceExtensionsKt.firstBlocking(pref2.getDeckLayout())) {
if (PreferenceCacheExtensionsKt.firstCached(pref2.getDeckLayout())) {
LawndeckManager deckManager = new LawndeckManager(context);
ModelWriter modelWriter = taskController.getModelWriter();
for (int i = 0; i < packageCount; i++) {
@@ -31,7 +31,8 @@ import com.android.launcher3.util.GridOccupancy;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.IntSet;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences2.PreferenceManager2;
import java.util.ArrayList;
import javax.inject.Inject;
@@ -97,7 +98,8 @@ public class WorkspaceItemSpaceFinder {
// First check the preferred screen.
IntSet screensToExclude = new IntSet();
boolean smartspaceEnabled = PreferenceExtensionsKt.firstBlocking(PreferenceManager2.INSTANCE.get(context).getEnableSmartspace());
PreferenceManager2 prefs = PreferenceManager2.INSTANCE.get(context);
boolean smartspaceEnabled = PreferenceCacheExtensionsKt.firstCached(prefs.getEnableSmartspace());
if (smartspaceEnabled) {
screensToExclude.add(FIRST_SCREEN_ID);
}
@@ -33,7 +33,7 @@ import com.android.launcher3.model.data.WorkspaceChangeEvent.UpdateEvent
import com.android.launcher3.util.IntArray
import com.android.launcher3.util.IntSet
import com.android.launcher3.util.ItemInfoMatcher
import com.patrykmichalik.opto.core.firstBlocking
import app.lawnchair.preferences2.firstCached
import java.util.concurrent.atomic.AtomicInteger
import java.util.stream.Stream
import java.util.stream.StreamSupport
@@ -48,7 +48,7 @@ sealed class WorkspaceData : Iterable<ItemInfo> {
// LC-Note: Add context to replace QSB_ON_FIRST_SCREEN config
fun collectWorkspaceScreens(context: Context): IntArray {
val prefs2 = PreferenceManager2.INSTANCE.get(context)
val smartspaceEnabled = prefs2.enableSmartspace.firstBlocking()
val smartspaceEnabled = prefs2.enableSmartspace.firstCached()
val screenSet = IntSet()
forEach { if (it.container == CONTAINER_DESKTOP) screenSet.add(it.screenId) }
@@ -52,7 +52,7 @@ import com.android.launcher3.widget.picker.model.data.WidgetPickerData;
import java.net.URISyntaxException;
import java.util.Arrays;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences2.PreferenceManager2;
/**
@@ -136,7 +136,7 @@ public abstract class SystemShortcut<T extends ActivityContext> extends ItemInfo
private static boolean isHomeLocked(ActivityContext context) {
PreferenceManager2 prefs = PreferenceManager2.getInstance(context.asContext());
return PreferenceExtensionsKt.firstBlocking(prefs.getLockHomeScreen());
return PreferenceCacheExtensionsKt.firstCached(prefs.getLockHomeScreen());
}
public static final Factory<ActivityContext> WIDGETS = (context, itemInfo, originalView) -> {
@@ -79,7 +79,7 @@ import com.android.launcher3.util.window.WindowManagerProxy;
import com.android.launcher3.views.BaseDragLayer;
import com.android.launcher3.widget.LauncherWidgetHolder;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -345,7 +345,7 @@ public class LauncherPreviewRenderer extends BaseContext
populateHotseatPredictions(itemIdMap);
// Add first page QSB
if (PreferenceExtensionsKt.firstBlocking(mPreferenceManager2.getEnableSmartspace())) {
if (PreferenceCacheExtensionsKt.firstCached(mPreferenceManager2.getEnableSmartspace())) {
CellLayout firstScreen = mWorkspaceScreens.get(FIRST_SCREEN_ID);
if (firstScreen != null) {
View qsb = mHomeElementInflater.inflate(mWorkspaceSearchContainer, firstScreen, false);
+2 -2
View File
@@ -36,7 +36,7 @@ import com.android.launcher3.Utilities;
import com.android.launcher3.icons.GraphicsUtils;
import com.android.launcher3.views.ActivityContext;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences.PreferenceManager;
import app.lawnchair.preferences2.PreferenceManager2;
import app.lawnchair.theme.color.ColorMode;
@@ -68,7 +68,7 @@ public class Themes {
public static int getActivityThemeRes(Context context, int wallpaperColorHints) {
PreferenceManager2 prefs2 = PreferenceManager2.getInstance(context);
ColorMode colorMode = PreferenceExtensionsKt.firstBlocking(prefs2.getWorkspaceTextColor());
ColorMode colorMode = PreferenceCacheExtensionsKt.firstCached(prefs2.getWorkspaceTextColor());
boolean supportsDarkText = (wallpaperColorHints & HINT_SUPPORTS_DARK_TEXT) != 0;
boolean isMainColorDark = (wallpaperColorHints & HINT_SUPPORTS_DARK_THEME) != 0;
@@ -57,7 +57,7 @@ import com.android.launcher3.testing.shared.TestProtocol;
import java.util.ArrayList;
import java.util.List;
import com.patrykmichalik.opto.core.PreferenceExtensionsKt;
import app.lawnchair.preferences2.PreferenceCacheExtensionsKt;
import app.lawnchair.preferences2.PreferenceManager2;
import app.lawnchair.ui.popup.LauncherOptionsPopup;
@@ -274,8 +274,8 @@ public class OptionsPopupView<T extends Context & ActivityContext> extends Arrow
private static boolean toggleHomeScreenLock(View v) {
Context context = v.getContext();
PreferenceManager2 preferenceManager2 = PreferenceManager2.getInstance(context);
boolean oldValue = PreferenceExtensionsKt.firstBlocking(preferenceManager2.getLockHomeScreen());
PreferenceExtensionsKt.setBlocking(preferenceManager2.getLockHomeScreen(), !oldValue);
boolean oldValue = PreferenceCacheExtensionsKt.firstCached(preferenceManager2.getLockHomeScreen());
com.patrykmichalik.opto.core.PreferenceExtensionsKt.setBlocking(preferenceManager2.getLockHomeScreen(), !oldValue);
return true;
}