This commit is contained in:
lunaticbum
2024-11-15 16:06:08 +09:00
parent 8ba7005c53
commit b81e12c61b
17 changed files with 448 additions and 428 deletions
@@ -1,9 +0,0 @@
package kr.lunaticbum.utils.preferences;
/**
* Pref is abbreviation class of {@link PreferencesUtil}.
*
* @author Robin Gustafsson
*/
public class Pref extends PreferencesUtil {
}
@@ -15,201 +15,126 @@ import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import java.io.Serializable
/**
* PreferencesUtil helps to manage application-wide [SharedPreferences] conveniently.
*
* @author Robin Gustafsson
*/
open class PreferencesUtil {
companion object {
private val LogHelper = LogHelper(PreferencesUtil::class.java)
var defaultName: String = PreferencesUtil::class.java.canonicalName
private fun getPreferences(name: String): SharedPreferences {
return getContext().getSharedPreferences(name, Context.MODE_PRIVATE)
}
fun get(key: String?, defValue: Boolean): Boolean {
return get(defaultName, key, defValue)
}
interface PrefKey<T> {
fun getKey() : String
fun set(value : T)
fun get(def : T? = null) : T
}
interface PrefJsonConvert {
fun initialize(context: Context)
fun inject(SharedPreferences : SharedPreferences)
fun getSettings() : Map<String,Any>
fun putSetting(json : Map<String,Any>)
}
abstract class PreferencesHelper : PrefJsonConvert {
fun get(key: String?, defValue: Int): Int {
return get(defaultName, key, defValue)
}
var sharedPreferences : SharedPreferences? = null
open fun allPrefKeys() : ArrayList<String> =arrayListOf()
open fun getBooleanPrefix() : String = getDefaultPrefix().plus(".BOOL.")
open fun getStringPrefix() : String = getDefaultPrefix().plus(".STRING.")
open fun getLongPrefix() : String = getDefaultPrefix().plus(".LONG.")
open fun getDefaultPrefix() : String = PreferencesHelper::class.java.canonicalName
abstract override fun getSettings() : Map<String,Any>
abstract override fun putSetting(json : Map<String,Any>)
fun get(key: String?, defValue: Float): Float {
return get(defaultName, key, defValue)
}
private val LogHelper = LogHelper(PreferencesHelper::class.java)
fun get(key: String?, defValue: Long): Long {
return get(defaultName, key, defValue)
}
override fun initialize(context: Context) {
inject(context.getSharedPreferences(getDefaultPrefix(), Context.MODE_PRIVATE))
}
fun get(key: String?, defValue: String?): String? {
return get(defaultName, key, defValue)
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
fun get(key: String?, defValue: Set<String?>?): Set<String>? {
return get(defaultName, key, defValue)
}
@TargetApi(Build.VERSION_CODES.FROYO)
fun <C : Serializable?> get(key: String?, defValue: C): C {
return get(defaultName, key, defValue)
}
fun get(name: String, key: String?, defValue: Boolean): Boolean {
return getPreferences(name).getBoolean(key, defValue)
}
fun get(name: String, key: String?, defValue: Int): Int {
return getPreferences(name).getInt(key, defValue)
}
fun get(name: String, key: String?, defValue: Float): Float {
return getPreferences(name).getFloat(key, defValue)
}
fun get(name: String, key: String?, defValue: Long): Long {
return getPreferences(name).getLong(key, defValue)
}
fun get(name: String, key: String?, defValue: String?): String? {
return getPreferences(name).getString(key, defValue)
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
fun get(name: String, key: String?, defValue: Set<String?>?): Set<String>? {
return getPreferences(name).getStringSet(key, defValue)
}
@TargetApi(Build.VERSION_CODES.FROYO)
fun <C : Serializable?> get(name: String, key: String?, defValue: C): C {
var bais: ByteArrayInputStream? = null
var ois: ObjectInputStream? = null
var result = defValue
val value = getPreferences(name).getString(key, null)
if (value != null) {
try {
val decoded = Base64.decode(value.toByteArray(), Base64.DEFAULT)
bais = ByteArrayInputStream(decoded)
ois = ObjectInputStream(bais)
result = ois.readObject() as C
} catch (e: Exception) {
LogHelper.e(e)
} finally {
if (ois != null) {
try {
ois.close()
} catch (e: IOException) {
LogHelper.e(e)
}
}
if (bais != null) {
try {
bais.close()
} catch (e: IOException) {
LogHelper.e(e)
}
}
}
}
return result
}
override fun inject(sharedPreferences : SharedPreferences) {
this.sharedPreferences = sharedPreferences
}
fun put(key: String?, value: Boolean) {
put(defaultName, key, value)
}
fun get(key: String?, defValue: Boolean): Boolean {
return get(getDefaultPrefix(), key, defValue)
}
fun put(key: String?, value: Int) {
put(defaultName, key, value)
}
fun get(key: String?, defValue: Int): Int {
return get(getDefaultPrefix(), key, defValue)
}
fun put(key: String?, value: Float) {
put(defaultName, key, value)
}
fun get(key: String?, defValue: Float): Float {
return get(getDefaultPrefix(), key, defValue)
}
fun put(key: String?, value: Long) {
put(defaultName, key, value)
}
fun get(key: String?, defValue: Long): Long {
return get(getDefaultPrefix(), key, defValue)
}
fun put(key: String?, value: String?) {
put(defaultName, key, value)
}
fun get(key: String?, defValue: String?): String? {
return get(getDefaultPrefix(), key, defValue)
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
fun put(key: String?, value: Set<String?>?) {
put(defaultName, key, value)
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
fun get(key: String?, defValue: Set<String?>?): Set<String>? {
return get(getDefaultPrefix(), key, defValue)
}
@TargetApi(Build.VERSION_CODES.FROYO)
fun <C : Serializable?> put(key: String?, value: C) {
put(defaultName, key, value)
}
@TargetApi(Build.VERSION_CODES.FROYO)
fun <C : Serializable?> get(key: String?, defValue: C): C {
return get(getDefaultPrefix(), key, defValue)
}
fun put(name: String, key: String?, value: Boolean) {
if (APILevel.require(9)) getPreferences(name).edit().putBoolean(key, value).apply()
else getPreferences(name).edit().putBoolean(key, value).commit()
}
fun get(name: String, key: String?, defValue: Boolean): Boolean {
return getPreferences()?.getBoolean(key, defValue) ?: false
}
fun put(name: String, key: String?, value: Int) {
if (APILevel.require(9)) getPreferences(name).edit().putInt(key, value).apply()
else getPreferences(name).edit().putInt(key, value).commit()
}
fun getPreferences(): SharedPreferences? {
return this.sharedPreferences
}
fun put(name: String, key: String?, value: Float) {
if (APILevel.require(9)) getPreferences(name).edit().putFloat(key, value).apply()
else getPreferences(name).edit().putFloat(key, value).commit()
}
fun get(name: String, key: String?, defValue: Int): Int {
return getPreferences()?.getInt(key, defValue) ?: 0
}
fun put(name: String, key: String?, value: Long) {
if (APILevel.require(9)) getPreferences(name).edit().putLong(key, value).apply()
else getPreferences(name).edit().putLong(key, value).commit()
}
fun get(name: String, key: String?, defValue: Float): Float {
return getPreferences()?.getFloat(key, defValue) ?: 0f
}
fun put(name: String, key: String?, value: String?) {
if (APILevel.require(9)) getPreferences(name).edit().putString(key, value).apply()
else getPreferences(name).edit().putString(key, value).commit()
}
fun get(name: String, key: String?, defValue: Long): Long {
return getPreferences()?.getLong(key, defValue) ?: 0L
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
fun put(name: String, key: String?, value: Set<String?>?) {
if (APILevel.require(9)) getPreferences(name).edit().putStringSet(key, value).apply()
else getPreferences(name).edit().putStringSet(key, value).commit()
}
fun get(name: String, key: String?, defValue: String?): String? {
return getPreferences()?.getString(key, defValue)
}
@TargetApi(Build.VERSION_CODES.FROYO)
fun <C : Serializable?> put(name: String, key: String?, value: C) {
var baos: ByteArrayOutputStream? = null
var oos: ObjectOutputStream? = null
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
fun get(name: String, key: String?, defValue: Set<String?>?): Set<String>? {
return getPreferences()?.getStringSet(key, defValue)
}
@TargetApi(Build.VERSION_CODES.FROYO)
fun <C : Serializable?> get(name: String, key: String?, defValue: C): C {
var bais: ByteArrayInputStream? = null
var ois: ObjectInputStream? = null
var result = defValue
val value = getPreferences()?.getString(key, null)
if (value != null) {
try {
baos = ByteArrayOutputStream()
oos = ObjectOutputStream(baos)
oos.writeObject(value)
val encoded = Base64.encode(baos.toByteArray(), Base64.DEFAULT)
if (APILevel.require(9)) getPreferences(name).edit().putString(key, String(encoded))
.apply()
else getPreferences(name).edit().putString(key, String(encoded)).commit()
} catch (e: IOException) {
val decoded = Base64.decode(value.toByteArray(), Base64.DEFAULT)
bais = ByteArrayInputStream(decoded)
ois = ObjectInputStream(bais)
result = ois.readObject() as C
} catch (e: Exception) {
LogHelper.e(e)
throw RuntimeException(e)
} finally {
if (oos != null) {
if (ois != null) {
try {
oos.close()
ois.close()
} catch (e: IOException) {
LogHelper.e(e)
}
}
if (baos != null) {
if (bais != null) {
try {
baos.close()
bais.close()
} catch (e: IOException) {
LogHelper.e(e)
}
@@ -217,21 +142,118 @@ open class PreferencesUtil {
}
}
fun remove(key: String?) {
remove(defaultName, key)
}
fun remove(name: String, key: String?) {
if (APILevel.require(9)) getPreferences(name).edit().remove(key).apply()
else getPreferences(name).edit().remove(key).commit()
}
return result
}
@JvmOverloads
fun clear(name: String = defaultName) {
if (APILevel.require(9)) getPreferences(name).edit().clear().apply()
else getPreferences(name).edit().clear().commit()
fun put(key: String?, value: Boolean) {
put(getDefaultPrefix(), key, value)
}
fun put(key: String?, value: Int) {
put(getDefaultPrefix(), key, value)
}
fun put(key: String?, value: Float) {
put(getDefaultPrefix(), key, value)
}
fun put(key: String?, value: Long) {
put(getDefaultPrefix(), key, value)
}
fun put(key: String?, value: String?) {
put(getDefaultPrefix(), key, value)
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
fun put(key: String?, value: Set<String?>?) {
put(getDefaultPrefix(), key, value)
}
@TargetApi(Build.VERSION_CODES.FROYO)
fun <C : Serializable?> put(key: String?, value: C) {
put(getDefaultPrefix(), key, value)
}
fun put(name: String, key: String?, value: Boolean) {
if (APILevel.require(9)) getPreferences()?.edit()?.putBoolean(key, value)?.apply()
else getPreferences()?.edit()?.putBoolean(key, value)?.commit()
}
fun put(name: String, key: String?, value: Int) {
if (APILevel.require(9)) getPreferences()?.edit()?.putInt(key, value)?.apply()
else getPreferences()?.edit()?.putInt(key, value)?.commit()
}
fun put(name: String, key: String?, value: Float) {
if (APILevel.require(9)) getPreferences()?.edit()?.putFloat(key, value)?.apply()
else getPreferences()?.edit()?.putFloat(key, value)?.commit()
}
fun put(name: String, key: String?, value: Long) {
if (APILevel.require(9)) getPreferences()?.edit()?.putLong(key, value)?.apply()
else getPreferences()?.edit()?.putLong(key, value)?.commit()
}
fun put(name: String, key: String?, value: String?) {
if (APILevel.require(9)) getPreferences()?.edit()?.putString(key, value)?.apply()
else getPreferences()?.edit()?.putString(key, value)?.commit()
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
fun put(name: String, key: String?, value: Set<String?>?) {
if (APILevel.require(9)) getPreferences()?.edit()?.putStringSet(key, value)?.apply()
else getPreferences()?.edit()?.putStringSet(key, value)?.commit()
}
@TargetApi(Build.VERSION_CODES.FROYO)
fun <C : Serializable?> put(name: String, key: String?, value: C) {
var baos: ByteArrayOutputStream? = null
var oos: ObjectOutputStream? = null
try {
baos = ByteArrayOutputStream()
oos = ObjectOutputStream(baos)
oos.writeObject(value)
val encoded = Base64.encode(baos.toByteArray(), Base64.DEFAULT)
if (APILevel.require(9)) getPreferences()?.edit()?.putString(key, String(encoded))?.apply()
else getPreferences()?.edit()?.putString(key, String(encoded))?.commit()
} catch (e: IOException) {
LogHelper.e(e)
throw RuntimeException(e)
} finally {
if (oos != null) {
try {
oos.close()
} catch (e: IOException) {
LogHelper.e(e)
}
}
if (baos != null) {
try {
baos.close()
} catch (e: IOException) {
LogHelper.e(e)
}
}
}
}
}
fun remove(key: String?) {
remove(getDefaultPrefix(), key)
}
fun remove(name: String, key: String?) {
if (APILevel.require(9)) getPreferences()?.edit()?.remove(key)?.apply()
else getPreferences()?.edit()?.remove(key)?.commit()
}
@JvmOverloads
fun clear(name: String = getDefaultPrefix()) {
if (APILevel.require(9)) getPreferences()?.edit()?.clear()?.apply()
else getPreferences()?.edit()?.clear()?.commit()
}
}