mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 11:18:21 +00:00
Merge "Migrate IDP_GRID_NAME usage to LauncherPrefs" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
3788da6285
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.launcher3;
|
||||
|
||||
import static com.android.launcher3.LauncherPrefs.GRID_NAME;
|
||||
import static com.android.launcher3.Utilities.dpiFromPx;
|
||||
import static com.android.launcher3.config.FeatureFlags.ENABLE_DEVICE_PROFILE_LOGGING;
|
||||
import static com.android.launcher3.config.FeatureFlags.ENABLE_TWO_PANEL_HOME;
|
||||
@@ -93,8 +94,6 @@ public class InvariantDeviceProfile {
|
||||
public static final int TYPE_MULTI_DISPLAY = 1;
|
||||
public static final int TYPE_TABLET = 2;
|
||||
|
||||
private static final String KEY_IDP_GRID_NAME = "idp_grid_name";
|
||||
|
||||
private static final float ICON_SIZE_DEFINED_IN_APP_DP = 48;
|
||||
|
||||
// Constants that affects the interpolation curve between statically defined device profile
|
||||
@@ -207,8 +206,7 @@ public class InvariantDeviceProfile {
|
||||
String gridName = getCurrentGridName(context);
|
||||
String newGridName = initGrid(context, gridName);
|
||||
if (!newGridName.equals(gridName)) {
|
||||
LauncherPrefs.getPrefs(context).edit().putString(KEY_IDP_GRID_NAME, newGridName)
|
||||
.apply();
|
||||
LauncherPrefs.get(context).put(GRID_NAME, newGridName);
|
||||
}
|
||||
new DeviceGridState(this).writeToPrefs(context);
|
||||
|
||||
@@ -316,7 +314,7 @@ public class InvariantDeviceProfile {
|
||||
}
|
||||
|
||||
public static String getCurrentGridName(Context context) {
|
||||
return LauncherPrefs.getPrefs(context).getString(KEY_IDP_GRID_NAME, null);
|
||||
return LauncherPrefs.get(context).get(GRID_NAME);
|
||||
}
|
||||
|
||||
private String initGrid(Context context, String gridName) {
|
||||
@@ -458,9 +456,8 @@ public class InvariantDeviceProfile {
|
||||
|
||||
|
||||
public void setCurrentGrid(Context context, String gridName) {
|
||||
Context appContext = context.getApplicationContext();
|
||||
LauncherPrefs.getPrefs(appContext).edit().putString(KEY_IDP_GRID_NAME, gridName).apply();
|
||||
MAIN_EXECUTOR.execute(() -> onConfigChanged(appContext));
|
||||
LauncherPrefs.get(context).put(GRID_NAME, gridName);
|
||||
MAIN_EXECUTOR.execute(() -> onConfigChanged(context.getApplicationContext()));
|
||||
}
|
||||
|
||||
private Object[] toModelState() {
|
||||
|
||||
@@ -4,6 +4,8 @@ import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
|
||||
import androidx.annotation.VisibleForTesting
|
||||
import com.android.launcher3.LauncherFiles.DEVICE_PREFERENCES_KEY
|
||||
import com.android.launcher3.LauncherFiles.SHARED_PREFERENCES_KEY
|
||||
import com.android.launcher3.allapps.WorkProfileManager
|
||||
import com.android.launcher3.model.DeviceGridState
|
||||
import com.android.launcher3.pm.InstallSessionHelper
|
||||
@@ -20,11 +22,10 @@ import com.android.launcher3.util.Themes
|
||||
class LauncherPrefs(private val context: Context) {
|
||||
|
||||
/** Wrapper around `getInner` for a `ContextualItem` */
|
||||
fun <T : Any> get(item: ContextualItem<T>): T =
|
||||
getInner(item, item.defaultValueFromContext(context))
|
||||
fun <T> get(item: ContextualItem<T>): T = getInner(item, item.defaultValueFromContext(context))
|
||||
|
||||
/** Wrapper around `getInner` for an `Item` */
|
||||
fun <T : Any> get(item: ConstantItem<T>): T = getInner(item, item.defaultValue)
|
||||
fun <T> get(item: ConstantItem<T>): T = getInner(item, item.defaultValue)
|
||||
|
||||
/**
|
||||
* Retrieves the value for an [Item] from [SharedPreferences]. It handles method typing via the
|
||||
@@ -32,11 +33,11 @@ class LauncherPrefs(private val context: Context) {
|
||||
* `String`, `Boolean`, `Float`, `Int`, `Long`, or `Set<String>`.
|
||||
*/
|
||||
@Suppress("IMPLICIT_CAST_TO_ANY", "UNCHECKED_CAST")
|
||||
private fun <T : Any> getInner(item: Item, default: T): T {
|
||||
private fun <T> getInner(item: Item, default: T): T {
|
||||
val sp = context.getSharedPreferences(item.sharedPrefFile, Context.MODE_PRIVATE)
|
||||
|
||||
return when (default::class.java) {
|
||||
String::class.java -> sp.getString(item.sharedPrefKey, default as String)
|
||||
return when (item.type) {
|
||||
String::class.java -> sp.getString(item.sharedPrefKey, default as? String)
|
||||
Boolean::class.java,
|
||||
java.lang.Boolean::class.java -> sp.getBoolean(item.sharedPrefKey, default as Boolean)
|
||||
Int::class.java,
|
||||
@@ -45,11 +46,10 @@ class LauncherPrefs(private val context: Context) {
|
||||
java.lang.Float::class.java -> sp.getFloat(item.sharedPrefKey, default as Float)
|
||||
Long::class.java,
|
||||
java.lang.Long::class.java -> sp.getLong(item.sharedPrefKey, default as Long)
|
||||
Set::class.java -> sp.getStringSet(item.sharedPrefKey, default as Set<String>)
|
||||
Set::class.java -> sp.getStringSet(item.sharedPrefKey, default as? Set<String>)
|
||||
else ->
|
||||
throw IllegalArgumentException(
|
||||
"item type: ${default::class.java}" +
|
||||
" is not compatible with sharedPref methods"
|
||||
"item type: ${item.type}" + " is not compatible with sharedPref methods"
|
||||
)
|
||||
}
|
||||
as T
|
||||
@@ -224,39 +224,36 @@ class LauncherPrefs(private val context: Context) {
|
||||
backedUpItem(RestoreDbTask.RESTORED_DEVICE_TYPE, InvariantDeviceProfile.TYPE_PHONE)
|
||||
@JvmField val APP_WIDGET_IDS = backedUpItem(RestoreDbTask.APPWIDGET_IDS, "")
|
||||
@JvmField val OLD_APP_WIDGET_IDS = backedUpItem(RestoreDbTask.APPWIDGET_OLD_IDS, "")
|
||||
@JvmField val GRID_NAME = ConstantItem("idp_grid_name", true, null, String::class.java)
|
||||
@JvmField
|
||||
val ALLOW_ROTATION =
|
||||
backedUpItem(RotationHelper.ALLOW_ROTATION_PREFERENCE_KEY) {
|
||||
backedUpItem(RotationHelper.ALLOW_ROTATION_PREFERENCE_KEY, Boolean::class.java) {
|
||||
RotationHelper.getAllowRotationDefaultValue(DisplayController.INSTANCE.get(it).info)
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@JvmStatic
|
||||
fun <T> backedUpItem(sharedPrefKey: String, defaultValue: T): ConstantItem<T> =
|
||||
ConstantItem(sharedPrefKey, LauncherFiles.SHARED_PREFERENCES_KEY, defaultValue)
|
||||
ConstantItem(sharedPrefKey, true, defaultValue)
|
||||
|
||||
@JvmStatic
|
||||
fun <T> backedUpItem(
|
||||
sharedPrefKey: String,
|
||||
type: Class<out T>,
|
||||
defaultValueFromContext: (c: Context) -> T
|
||||
): ContextualItem<T> =
|
||||
ContextualItem(
|
||||
sharedPrefKey,
|
||||
LauncherFiles.SHARED_PREFERENCES_KEY,
|
||||
defaultValueFromContext
|
||||
)
|
||||
): ContextualItem<T> = ContextualItem(sharedPrefKey, true, defaultValueFromContext, type)
|
||||
|
||||
@VisibleForTesting
|
||||
@JvmStatic
|
||||
fun <T> nonRestorableItem(sharedPrefKey: String, defaultValue: T): ConstantItem<T> =
|
||||
ConstantItem(sharedPrefKey, LauncherFiles.DEVICE_PREFERENCES_KEY, defaultValue)
|
||||
ConstantItem(sharedPrefKey, false, defaultValue)
|
||||
|
||||
@Deprecated("Don't use shared preferences directly. Use other LauncherPref methods.")
|
||||
@JvmStatic
|
||||
fun getPrefs(context: Context): SharedPreferences {
|
||||
// Use application context for shared preferences, so we use single cached instance
|
||||
return context.applicationContext.getSharedPreferences(
|
||||
LauncherFiles.SHARED_PREFERENCES_KEY,
|
||||
SHARED_PREFERENCES_KEY,
|
||||
Context.MODE_PRIVATE
|
||||
)
|
||||
}
|
||||
@@ -266,7 +263,7 @@ class LauncherPrefs(private val context: Context) {
|
||||
fun getDevicePrefs(context: Context): SharedPreferences {
|
||||
// Use application context for shared preferences, so we use a single cached instance
|
||||
return context.applicationContext.getSharedPreferences(
|
||||
LauncherFiles.DEVICE_PREFERENCES_KEY,
|
||||
DEVICE_PREFERENCES_KEY,
|
||||
Context.MODE_PRIVATE
|
||||
)
|
||||
}
|
||||
@@ -275,21 +272,26 @@ class LauncherPrefs(private val context: Context) {
|
||||
|
||||
abstract class Item {
|
||||
abstract val sharedPrefKey: String
|
||||
abstract val sharedPrefFile: String
|
||||
abstract val isBackedUp: Boolean
|
||||
abstract val type: Class<*>
|
||||
val sharedPrefFile: String = if (isBackedUp) SHARED_PREFERENCES_KEY else DEVICE_PREFERENCES_KEY
|
||||
|
||||
fun <T> to(value: T): Pair<Item, T> = Pair(this, value)
|
||||
}
|
||||
|
||||
data class ConstantItem<T>(
|
||||
override val sharedPrefKey: String,
|
||||
override val sharedPrefFile: String,
|
||||
val defaultValue: T
|
||||
override val isBackedUp: Boolean,
|
||||
val defaultValue: T,
|
||||
// The default value can be null. If so, the type needs to be explicitly stated, or else NPE
|
||||
override val type: Class<out T> = defaultValue!!::class.java
|
||||
) : Item()
|
||||
|
||||
data class ContextualItem<T>(
|
||||
override val sharedPrefKey: String,
|
||||
override val sharedPrefFile: String,
|
||||
private val defaultSupplier: (c: Context) -> T
|
||||
override val isBackedUp: Boolean,
|
||||
private val defaultSupplier: (c: Context) -> T,
|
||||
override val type: Class<out T>
|
||||
) : Item() {
|
||||
private var default: T? = null
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import org.junit.runner.RunWith
|
||||
private val TEST_BOOLEAN_ITEM = LauncherPrefs.nonRestorableItem("1", false)
|
||||
private val TEST_STRING_ITEM = LauncherPrefs.nonRestorableItem("2", "( ͡❛ ͜ʖ ͡❛)")
|
||||
private val TEST_INT_ITEM = LauncherPrefs.nonRestorableItem("3", -1)
|
||||
private val TEST_CONTEXTUAL_ITEM = LauncherPrefs.backedUpItem("4") { true }
|
||||
private val TEST_CONTEXTUAL_ITEM = ContextualItem("4", true, { true }, Boolean::class.java)
|
||||
|
||||
@SmallTest
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
|
||||
Reference in New Issue
Block a user