feat: Add option to clear home screen in settings (#6125)

Signed-off-by: abhixv <abhi.sharma1@hotmail.com>
This commit is contained in:
Abhishek Sharma
2025-12-20 03:26:30 +05:30
committed by Pun Butrach
parent 9898749619
commit 5f3a03f4fb
1577 changed files with 112563 additions and 80248 deletions
@@ -20,72 +20,61 @@ import android.app.ActivityThread
import android.content.Context
import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.provider.DeviceConfig
import android.provider.DeviceConfig.OnPropertiesChangedListener
import android.provider.DeviceConfig.Properties
import androidx.annotation.WorkerThread
import java.util.concurrent.CopyOnWriteArrayList
/** Utility class to manage a set of device configurations */
class DeviceConfigHelper<ConfigType>(private val factory: (PropReader) -> ConfigType) {
var config: ConfigType
private set
private val allKeys: Set<String>
private val propertiesListener = OnPropertiesChangedListener { onDevicePropsChanges(it) }
private val sharedPrefChangeListener = OnSharedPreferenceChangeListener { _, _ ->
recreateConfig()
}
private val changeListeners = CopyOnWriteArrayList<Runnable>()
private val changeListeners = mutableListOf<Runnable>()
init {
// Initialize the default config once.
allKeys = HashSet()
config =
factory(
PropReader(
object : PropProvider {
override fun <T : Any> get(key: String, fallback: T): T {
val prefs = prefs
if (fallback is Int) {
allKeys.add(key)
return prefs.getInt(key, fallback) as T
} else if (fallback is Boolean) {
allKeys.add(key)
return prefs.getBoolean(key, fallback) as T
} else return fallback
config = factory(
PropReader(
object : PropProvider {
override fun <T : Any> get(key: String, fallback: T): T {
val prefs = prefs
allKeys.add(key)
return when (fallback) {
is Int -> prefs.getInt(key, fallback) as T
is Boolean -> prefs.getBoolean(key, fallback) as T
else -> fallback
}
}
)
}
)
)
prefs.registerOnSharedPreferenceChangeListener(sharedPrefChangeListener)
}
@WorkerThread
private fun onDevicePropsChanges(properties: Properties) {
if (NAMESPACE_LAUNCHER != properties.namespace) return
if (!allKeys.any(properties.keyset::contains)) return
private fun onDevicePropsChanges() {
recreateConfig()
}
private fun recreateConfig() {
val myProps =
DeviceConfig.getProperties(NAMESPACE_LAUNCHER, *allKeys.toTypedArray<String>())
config =
factory(
PropReader(
object : PropProvider {
override fun <T : Any> get(key: String, fallback: T): T {
if (fallback is Int) return myProps.getInt(key, fallback) as T
else if (fallback is Boolean)
return myProps.getBoolean(key, fallback) as T
else return fallback
config = factory(
PropReader(
object : PropProvider {
override fun <T : Any> get(key: String, fallback: T): T {
return when (fallback) {
is Int -> prefs.getInt(key, fallback) as T
is Boolean -> prefs.getBoolean(key, fallback) as T
else -> fallback
}
}
)
}
)
)
}
/** Adds a listener for property changes */
@@ -95,7 +84,6 @@ class DeviceConfigHelper<ConfigType>(private val factory: (PropReader) -> Config
fun removeChangeListener(r: Runnable) = changeListeners.remove(r)
fun close() {
DeviceConfig.removeOnPropertiesChangedListener(propertiesListener)
prefs.unregisterOnSharedPreferenceChangeListener(sharedPrefChangeListener)
}