Base: Allow default settings to be provided in meta-data 2c80de55d1

This commit is contained in:
inotia00 2023-12-25 21:31:00 +09:00 • committed by Cuynu
commit caa7e931eb
2 changed files with 58 additions and 1 deletions

View file

@ -0,0 +1,45 @@
/*
* SPDX-FileCopyrightText: 2023 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
package org.microg.mgms.settings
import android.content.Context
import android.content.SharedPreferences
import android.content.pm.PackageManager.GET_META_DATA
import android.os.Bundle
class MetaDataPreferences(private val context: Context, private val prefix: String = "") : SharedPreferences {
private val metaData by lazy {
runCatching { context.packageManager.getApplicationInfo(context.packageName, GET_META_DATA) }.getOrNull()?.metaData ?: Bundle.EMPTY
}
override fun getAll(): Map<String, *> = metaData.keySet().filter { it.startsWith(prefix) }.associate { it.substring(prefix.length) to metaData.get(it) }
override fun getString(key: String, defValue: String?): String? = metaData.getString(prefix + key, defValue)
override fun getStringSet(key: String, defValues: Set<String>?): Set<String>? = metaData.getStringArray(prefix + key)?.toSet() ?: defValues
override fun getInt(key: String?, defValue: Int): Int = metaData.getInt(prefix + key, defValue)
override fun getLong(key: String?, defValue: Long): Long = metaData.getLong(prefix + key, defValue)
override fun getFloat(key: String?, defValue: Float): Float = metaData.getFloat(prefix + key, defValue)
override fun getBoolean(key: String?, defValue: Boolean): Boolean = metaData.getBoolean(prefix + key, defValue)
override fun contains(key: String?): Boolean = metaData.containsKey(prefix + key)
override fun edit(): SharedPreferences.Editor {
throw UnsupportedOperationException()
}
override fun registerOnSharedPreferenceChangeListener(listener: SharedPreferences.OnSharedPreferenceChangeListener?) {
throw UnsupportedOperationException()
}
override fun unregisterOnSharedPreferenceChangeListener(listener: SharedPreferences.OnSharedPreferenceChangeListener?) {
throw UnsupportedOperationException()
}
}

View file

@ -24,6 +24,8 @@ import org.microg.mgms.settings.SettingsContract.Profile
import org.microg.mgms.settings.SettingsContract.getAuthority import org.microg.mgms.settings.SettingsContract.getAuthority
import java.io.File import java.io.File
private const val SETTINGS_PREFIX = "org.microg.mgms.settings."
/** /**
* All settings access should go through this [ContentProvider], * All settings access should go through this [ContentProvider],
* because it provides safe access from different processes which normal [SharedPreferences] don't. * because it provides safe access from different processes which normal [SharedPreferences] don't.
@ -49,6 +51,10 @@ class SettingsProvider : ContentProvider() {
} }
} }
private val metaDataPreferences: SharedPreferences by lazy {
MetaDataPreferences(context!!, SETTINGS_PREFIX)
}
override fun onCreate(): Boolean { override fun onCreate(): Boolean {
return true return true
} }
@ -272,10 +278,16 @@ class SettingsProvider : ContentProvider() {
* @return the current setting as [Int], because [ContentProvider] does not support [Boolean]. * @return the current setting as [Int], because [ContentProvider] does not support [Boolean].
*/ */
private fun getSettingsBoolean(key: String, def: Boolean): Int { private fun getSettingsBoolean(key: String, def: Boolean): Int {
return listOf(preferences, systemDefaultPreferences).getBooleanAsInt(key, def) return listOf(preferences, systemDefaultPreferences, metaDataPreferences).getBooleanAsInt(key, def)
} }
<<<<<<< HEAD
private fun getSettingsString(key: String, def: String? = null): String? = listOf(preferences, systemDefaultPreferences).getString(key, def) private fun getSettingsString(key: String, def: String? = null): String? = listOf(preferences, systemDefaultPreferences).getString(key, def)
=======
private fun getSettingsString(key: String, def: String? = null): String? = listOf(preferences, systemDefaultPreferences, metaDataPreferences).getString(key, def)
private fun getSettingsInt(key: String, def: Int): Int = listOf(preferences, systemDefaultPreferences, metaDataPreferences).getInt(key, def)
private fun getSettingsLong(key: String, def: Long): Long = listOf(preferences, systemDefaultPreferences, metaDataPreferences).getLong(key, def)
>>>>>>> d2450feb (Base: Allow default settings to be provided in meta-data https://github.com/microg/GmsCore/commit/2c80de55d132a91c25036880517c5605c6753f71)
private fun List<SharedPreferences?>.getString(key: String, def: String?): String? = foldRight(def) { preferences, defValue -> preferences?.getString(key, defValue) ?: defValue } private fun List<SharedPreferences?>.getString(key: String, def: String?): String? = foldRight(def) { preferences, defValue -> preferences?.getString(key, defValue) ?: defValue }
private fun List<SharedPreferences?>.getBoolean(key: String, def: Boolean): Boolean = foldRight(def) { preferences, defValue -> preferences?.getBoolean(key, defValue) ?: defValue } private fun List<SharedPreferences?>.getBoolean(key: String, def: Boolean): Boolean = foldRight(def) { preferences, defValue -> preferences?.getBoolean(key, defValue) ?: defValue }