parent
4d7146bd7b
commit
5f55d20c83
@ -1,332 +0,0 @@
|
|||||||
package com.idormy.sms.forwarder.utils
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.os.Parcelable
|
|
||||||
import android.util.Log
|
|
||||||
import androidx.preference.PreferenceManager
|
|
||||||
import com.tencent.mmkv.MMKV
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MMKV工具类
|
|
||||||
*
|
|
||||||
* @author xuexiang
|
|
||||||
* @since 2019-07-04 10:20
|
|
||||||
*/
|
|
||||||
@Suppress("PropertyName", "UNCHECKED_CAST", "MemberVisibilityCanBePrivate", "unused")
|
|
||||||
class MMKVUtils private constructor() {
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
private var TAG: String = "MMKVUtils"
|
|
||||||
private var sMMKV: MMKV? = null
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化
|
|
||||||
*
|
|
||||||
* @param context
|
|
||||||
*/
|
|
||||||
fun init(context: Context) {
|
|
||||||
MMKV.initialize(context.applicationContext)
|
|
||||||
sMMKV = MMKV.defaultMMKV()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getsMMKV(): MMKV? {
|
|
||||||
if (sMMKV == null) {
|
|
||||||
sMMKV = MMKV.defaultMMKV()
|
|
||||||
}
|
|
||||||
return sMMKV
|
|
||||||
}
|
|
||||||
//=======================================键值保存==================================================//
|
|
||||||
/**
|
|
||||||
* 保存键值
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
fun put(key: String?, value: Any?): Boolean {
|
|
||||||
when (value) {
|
|
||||||
is Int -> {
|
|
||||||
return getsMMKV()!!.encode(key, (value as Int?)!!)
|
|
||||||
}
|
|
||||||
is Float -> {
|
|
||||||
return getsMMKV()!!.encode(key, (value as Float?)!!)
|
|
||||||
}
|
|
||||||
is String -> {
|
|
||||||
return getsMMKV()!!.encode(key, value as String?)
|
|
||||||
}
|
|
||||||
is Boolean -> {
|
|
||||||
return getsMMKV()!!.encode(key, (value as Boolean?)!!)
|
|
||||||
}
|
|
||||||
is Long -> {
|
|
||||||
return getsMMKV()!!.encode(key, (value as Long?)!!)
|
|
||||||
}
|
|
||||||
is Double -> {
|
|
||||||
return getsMMKV()!!.encode(key, (value as Double?)!!)
|
|
||||||
}
|
|
||||||
is Parcelable -> {
|
|
||||||
return getsMMKV()!!.encode(key, value as Parcelable?)
|
|
||||||
}
|
|
||||||
is ByteArray -> {
|
|
||||||
return getsMMKV()!!.encode(key, value as ByteArray?)
|
|
||||||
}
|
|
||||||
is Set<*> -> {
|
|
||||||
return getsMMKV()!!.encode(key, value as Set<String?>?)
|
|
||||||
}
|
|
||||||
else -> return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//=======================================键值获取==================================================//
|
|
||||||
/**
|
|
||||||
* 获取键值
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param defaultValue
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
operator fun get(key: String?, defaultValue: Any?): Any? {
|
|
||||||
when (defaultValue) {
|
|
||||||
is Int -> {
|
|
||||||
return getsMMKV()!!
|
|
||||||
.decodeInt(key, (defaultValue as Int?)!!)
|
|
||||||
}
|
|
||||||
is Float -> {
|
|
||||||
return getsMMKV()!!
|
|
||||||
.decodeFloat(key, (defaultValue as Float?)!!)
|
|
||||||
}
|
|
||||||
is String -> {
|
|
||||||
return getsMMKV()!!.decodeString(key, defaultValue as String?)
|
|
||||||
}
|
|
||||||
is Boolean -> {
|
|
||||||
return getsMMKV()!!
|
|
||||||
.decodeBool(key, (defaultValue as Boolean?)!!)
|
|
||||||
}
|
|
||||||
is Long -> {
|
|
||||||
return getsMMKV()!!
|
|
||||||
.decodeLong(key, (defaultValue as Long?)!!)
|
|
||||||
}
|
|
||||||
is Double -> {
|
|
||||||
return getsMMKV()!!
|
|
||||||
.decodeDouble(key, (defaultValue as Double?)!!)
|
|
||||||
}
|
|
||||||
is ByteArray -> {
|
|
||||||
return getsMMKV()!!.decodeBytes(key)
|
|
||||||
}
|
|
||||||
is Set<*> -> {
|
|
||||||
return getsMMKV()!!.decodeStringSet(key, defaultValue as Set<String?>?)
|
|
||||||
}
|
|
||||||
else -> return null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据key获取boolean值
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param defValue
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
fun getBoolean(key: String?, defValue: Boolean): Boolean {
|
|
||||||
try {
|
|
||||||
return getsMMKV()!!.getBoolean(key, defValue)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
return defValue
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据key获取long值
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param defValue
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
fun getLong(key: String?, defValue: Long): Long {
|
|
||||||
try {
|
|
||||||
return getsMMKV()!!.getLong(key, defValue)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
return defValue
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据key获取float值
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param defValue
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
fun getFloat(key: String?, defValue: Float): Float {
|
|
||||||
try {
|
|
||||||
return getsMMKV()!!.getFloat(key, defValue)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
return defValue
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据key获取String值
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param defValue
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
fun getString(key: String?, defValue: String?): String? {
|
|
||||||
try {
|
|
||||||
return getsMMKV()!!.getString(key, defValue)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
return defValue
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据key获取int值
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param defValue
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
fun getInt(key: String?, defValue: Int): Int {
|
|
||||||
try {
|
|
||||||
return getsMMKV()!!.getInt(key, defValue)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
return defValue
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据key获取double值
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param defValue
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
fun getDouble(key: String?, defValue: Double): Double {
|
|
||||||
try {
|
|
||||||
return getsMMKV()!!.decodeDouble(key, defValue)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
return defValue
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取对象
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param tClass 类型
|
|
||||||
* @param <T>
|
|
||||||
* @return
|
|
||||||
</T> */
|
|
||||||
fun <T : Parcelable?> getObject(key: String?, tClass: Class<T>?): T? {
|
|
||||||
return getsMMKV()!!.decodeParcelable(key, tClass)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取对象
|
|
||||||
*
|
|
||||||
* @param key
|
|
||||||
* @param tClass 类型
|
|
||||||
* @param <T>
|
|
||||||
* @return
|
|
||||||
</T> */
|
|
||||||
fun <T : Parcelable?> getObject(key: String?, tClass: Class<T>?, defValue: T): T? {
|
|
||||||
try {
|
|
||||||
return getsMMKV()!!.decodeParcelable(key, tClass, defValue)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
return defValue
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 判断键值对是否存在
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
* @return 键值对是否存在
|
|
||||||
*/
|
|
||||||
fun containsKey(key: String?): Boolean {
|
|
||||||
return getsMMKV()!!.containsKey(key)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 清除指定键值对
|
|
||||||
*
|
|
||||||
* @param key 键
|
|
||||||
*/
|
|
||||||
fun remove(key: String?) {
|
|
||||||
getsMMKV()!!.remove(key).apply()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 从SP迁移数据
|
|
||||||
*/
|
|
||||||
fun importSharedPreferences(context: Context) {
|
|
||||||
Log.d(TAG, "从SP迁移数据")
|
|
||||||
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
|
|
||||||
val editor = preferences.edit()
|
|
||||||
getsMMKV()!!.importFromSharedPreferences(preferences)
|
|
||||||
editor.clear().apply()
|
|
||||||
|
|
||||||
Log.d(TAG, "转换旧的SP配置")
|
|
||||||
loop@ for (key: String in getsMMKV()!!.allKeys()!!) {
|
|
||||||
when {
|
|
||||||
key.startsWith("tsms_msg_key_switch_") || key.startsWith("tsms_msg_key_string_enable_") || key.endsWith("battery_level_once") -> {
|
|
||||||
val newKey = key.replace("tsms_msg_key_switch_", "enable_")
|
|
||||||
.replace("tsms_msg_key_string_", "enable_")
|
|
||||||
.replace("enable_enable_", "enable_")
|
|
||||||
val value = getBoolean(key, false)
|
|
||||||
Log.d(TAG, String.format("oldKey=%s, newKey=%s, value=%s", key, newKey, value.toString()))
|
|
||||||
put(newKey, value)
|
|
||||||
remove(key)
|
|
||||||
continue@loop
|
|
||||||
}
|
|
||||||
key.endsWith("battery_level_alarm") || key.endsWith("battery_level_max") || key.endsWith("battery_level_current") || key.endsWith("battery_status") || key.endsWith("battery_cron_interval") -> {
|
|
||||||
val newKey = key.replace("tsms_msg_key_switch_", "")
|
|
||||||
.replace("tsms_msg_key_string_", "")
|
|
||||||
.replace("alarm", "min")
|
|
||||||
.replace("tsms_msg_key_", "request_")
|
|
||||||
val value = getInt(key, 0)
|
|
||||||
Log.d(TAG, String.format("oldKey=%s, newKey=%s, value=%s", key, newKey, value.toString()))
|
|
||||||
put(newKey, value)
|
|
||||||
remove(key)
|
|
||||||
continue@loop
|
|
||||||
}
|
|
||||||
key.startsWith("tsms_msg_key_") -> {
|
|
||||||
val newKey = key.replace("tsms_msg_key_string_", "")
|
|
||||||
.replace("add_", "")
|
|
||||||
.replace("tsms_msg_key_", "request_")
|
|
||||||
val value = getString(key, "")
|
|
||||||
Log.d(TAG, String.format("oldKey=%s, newKey=%s, value=%s", key, newKey, value.toString()))
|
|
||||||
put(newKey, value)
|
|
||||||
remove(key)
|
|
||||||
continue@loop
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.d(TAG, "转换后的数据")
|
|
||||||
for (key: String in getsMMKV()!!.allKeys()!!) {
|
|
||||||
when {
|
|
||||||
key.startsWith("enable_") -> {
|
|
||||||
Log.d(TAG, String.format("key=%s, value=%s", key, getBoolean(key, false).toString()))
|
|
||||||
}
|
|
||||||
key.startsWith("battery_") || key.startsWith("request_") -> {
|
|
||||||
Log.d(TAG, String.format("key=%s, value=%s", key, getInt(key, 0).toString()))
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
Log.d(TAG, String.format("key=%s, value=%s", key, getString(key, "").toString()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
throw UnsupportedOperationException("u can't instantiate me...")
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue