diff --git a/base/src/main/java/com/koai/base/app/BaseApplication.kt b/base/src/main/java/com/koai/base/app/BaseApplication.kt index a6ae111..594d09a 100644 --- a/base/src/main/java/com/koai/base/app/BaseApplication.kt +++ b/base/src/main/java/com/koai/base/app/BaseApplication.kt @@ -3,9 +3,11 @@ package com.koai.base.app import android.app.Application import com.koai.base.core.action.navigator.BaseNavigator import com.koai.base.core.viewmodel.BaseViewModel -import com.koai.base.utils.EncryptPreference +import com.koai.base.utils.EncryptPreferenceApp +import com.koai.base.utils.EncryptPreferenceAppImpl import com.koai.base.utils.LogUtils -import com.koai.base.utils.SharePreference +import com.koai.base.utils.SharePreferenceApp +import com.koai.base.utils.SharePreferenceAppImpl import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidFileProperties import org.koin.android.ext.koin.androidLogger @@ -34,7 +36,7 @@ abstract class BaseApplication : Application() { module { viewModel { BaseNavigator() } viewModel { BaseViewModel() } - factory { SharePreference(get()) } - factory { EncryptPreference(get()) } + single { SharePreferenceAppImpl(get()) } + single { EncryptPreferenceAppImpl(get()) } } } \ No newline at end of file diff --git a/base/src/main/java/com/koai/base/utils/EncryptPreference.kt b/base/src/main/java/com/koai/base/utils/EncryptPreference.kt index a0c5464..78ea3cb 100644 --- a/base/src/main/java/com/koai/base/utils/EncryptPreference.kt +++ b/base/src/main/java/com/koai/base/utils/EncryptPreference.kt @@ -10,96 +10,102 @@ package com.koai.base.utils import android.content.Context import android.content.SharedPreferences +import androidx.core.content.edit import androidx.security.crypto.EncryptedSharedPreferences import androidx.security.crypto.MasterKey import com.koai.base.R -open class EncryptPreference( - context: Context, -) { - val pref: SharedPreferences - - init { - val masterKey = - MasterKey - .Builder(context) - .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) - .build() - - pref = - EncryptedSharedPreferences.create( - context, - "secret_" + context.resources.getString(R.string.app_name), - masterKey, - EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, - EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM, - ) +interface EncryptPreferenceApp : SharePreferenceApp { + fun clear() + fun getAll(): Map + fun edit(): SharedPreferences.Editor + fun getLongPref(key: String, default: Long = 0): Long + fun setLongPref(key: String, value: Long) + fun getStringSetPref(key: String, default: Set = emptySet()): Set? +} + +class EncryptPreferenceAppImpl( + private val context: Context, +) : EncryptPreferenceApp { + private val sharedPreferences: SharedPreferences by lazy { + val masterKey = MasterKey + .Builder(context) + .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) + .build() + + EncryptedSharedPreferences.create( + context, + "secret_" + context.resources.getString(R.string.app_name), + masterKey, + EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, + EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM, + ) } - fun getIntPref( + override fun getIntPref( key: String, - default: Int = -1, - ): Int = pref.getInt(key, default) + default: Int, + ): Int = sharedPreferences.getInt(key, default) - fun setIntPref( + override fun setIntPref( key: String, value: Int, ) { - pref.edit().putInt(key, value).apply() + sharedPreferences.edit { putInt(key, value) } } - fun getStringPref( + override fun getStringPref( key: String, - default: String = "", - ): String? = pref.getString(key, default) + default: String, + ): String? = sharedPreferences.getString(key, default) - fun setStringPref( + override fun setStringPref( key: String, value: String, ) { - pref.edit().putString(key, value).apply() + sharedPreferences.edit { putString(key, value) } } - fun getBooleanPref( + override fun getBooleanPref( key: String, - default: Boolean = false, - ): Boolean = pref.getBoolean(key, default) + default: Boolean, + ): Boolean = sharedPreferences.getBoolean(key, default) - fun setBooleanPref( + override fun setBooleanPref( key: String, value: Boolean, ) { - pref.edit().putBoolean(key, value).apply() + sharedPreferences.edit { putBoolean(key, value) } } - fun removePref(key: String) { - pref.edit().remove(key).apply() + override fun removePref(key: String) { + sharedPreferences.edit { remove(key) } } - fun contains(key: String): Boolean = pref.contains(key) + override fun contains(key: String): Boolean = sharedPreferences.contains(key) - fun clear() { - pref.edit().clear().apply() + override fun clear() { + sharedPreferences.edit { clear() } } - fun getAll(): Map = pref.all + override fun getAll(): Map = sharedPreferences.all - fun edit(): SharedPreferences.Editor = pref.edit() + override fun edit(): SharedPreferences.Editor = sharedPreferences.edit() - fun getLongPref( + override fun getLongPref( key: String, - default: Long = 0, - ): Long = pref.getLong(key, default) + default: Long, + ): Long = sharedPreferences.getLong(key, default) - fun setLongPref( + override fun setLongPref( key: String, value: Long, ) { - pref.edit().putLong(key, value).apply() + sharedPreferences.edit { putLong(key, value) } } - fun getStringSetPref( + override fun getStringSetPref( key: String, - default: Set = emptySet(), - ): Set? = pref.getStringSet(key, default) + default: Set, + ): Set? = sharedPreferences.getStringSet(key, default) } diff --git a/base/src/main/java/com/koai/base/utils/SharePreference.kt b/base/src/main/java/com/koai/base/utils/SharePreference.kt index 021295b..a6be8d9 100644 --- a/base/src/main/java/com/koai/base/utils/SharePreference.kt +++ b/base/src/main/java/com/koai/base/utils/SharePreference.kt @@ -13,73 +13,66 @@ import android.content.SharedPreferences import androidx.core.content.edit import com.koai.base.R -class SharePreference( +interface SharePreferenceApp { + fun getIntPref(key: String, default: Int = -1): Int + fun setIntPref(key: String, value: Int) + fun getStringPref(key: String, default: String = ""): String? + fun setStringPref(key: String, value: String) + fun getBooleanPref(key: String, default: Boolean = false): Boolean + fun setBooleanPref(key: String, value: Boolean) + fun removePref(key: String) + fun contains(key: String): Boolean +} + +class SharePreferenceAppImpl( private val context: Context, -) { - fun getIntPref( - key: String, - default: Int = -1, - ): Int { - val pref: SharedPreferences = - context.getSharedPreferences(context.resources.getString(R.string.app_name), Context.MODE_PRIVATE) - return pref.getInt(key, default) +) : SharePreferenceApp { + private val sharedPreferences: SharedPreferences by lazy { + context.getSharedPreferences( + context.resources.getString(R.string.app_name), + Context.MODE_PRIVATE + ) } - fun setIntPref( + override fun getIntPref( + key: String, + default: Int, + ): Int = sharedPreferences.getInt(key, default) + + override fun setIntPref( key: String, value: Int, ) { - val pref: SharedPreferences = - context.getSharedPreferences(context.resources.getString(R.string.app_name), Context.MODE_PRIVATE) - pref.edit { putInt(key, value) } + sharedPreferences.edit { putInt(key, value) } } - fun getStringPref( + override fun getStringPref( key: String, - default: String = "", - ): String? { - val pref: SharedPreferences? = - context.getSharedPreferences(context.resources.getString(R.string.app_name), Context.MODE_PRIVATE) - return pref!!.getString(key, default) - } + default: String, + ): String? = sharedPreferences.getString(key, default) - fun setStringPref( + override fun setStringPref( key: String, value: String, ) { - val pref: SharedPreferences = - context.getSharedPreferences(context.resources.getString(R.string.app_name), Context.MODE_PRIVATE) - pref.edit { putString(key, value) } + sharedPreferences.edit { putString(key, value) } } - fun getBooleanPref( + override fun getBooleanPref( key: String, - default: Boolean = false, - ): Boolean { - val pref: SharedPreferences? = - context.getSharedPreferences(context.resources.getString(R.string.app_name), Context.MODE_PRIVATE) - - return pref!!.getBoolean(key, default) - } + default: Boolean, + ): Boolean = sharedPreferences.getBoolean(key, default) - fun setBooleanPref( + override fun setBooleanPref( key: String, value: Boolean, ) { - val pref: SharedPreferences = - context.getSharedPreferences(context.resources.getString(R.string.app_name), Context.MODE_PRIVATE) - pref.edit { putBoolean(key, value) } + sharedPreferences.edit { putBoolean(key, value) } } - fun removePref(key: String) { - val pref: SharedPreferences = - context.getSharedPreferences(context.resources.getString(R.string.app_name), Context.MODE_PRIVATE) - pref.edit { remove(key) } + override fun removePref(key: String) { + sharedPreferences.edit { remove(key) } } - fun contains(key: String): Boolean { - val pref: SharedPreferences = - context.getSharedPreferences(context.resources.getString(R.string.app_name), Context.MODE_PRIVATE) - return pref.contains(key) - } + override fun contains(key: String): Boolean = sharedPreferences.contains(key) }