Base: Allow default settings to be provided in meta-data 2c80de55d1
This commit is contained in:
parent
09a1bbc165
commit
caa7e931eb
2 changed files with 58 additions and 1 deletions
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
@ -24,6 +24,8 @@ import org.microg.mgms.settings.SettingsContract.Profile
|
|||
import org.microg.mgms.settings.SettingsContract.getAuthority
|
||||
import java.io.File
|
||||
|
||||
private const val SETTINGS_PREFIX = "org.microg.mgms.settings."
|
||||
|
||||
/**
|
||||
* All settings access should go through this [ContentProvider],
|
||||
* 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 {
|
||||
return true
|
||||
}
|
||||
|
|
@ -272,10 +278,16 @@ class SettingsProvider : ContentProvider() {
|
|||
* @return the current setting as [Int], because [ContentProvider] does not support [Boolean].
|
||||
*/
|
||||
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, 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?>.getBoolean(key: String, def: Boolean): Boolean = foldRight(def) { preferences, defValue -> preferences?.getBoolean(key, defValue) ?: defValue }
|
||||
|
|
|
|||
Loading…
Reference in a new issue