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 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 }
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue