Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions base/src/main/java/com/koai/base/app/BaseApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -34,7 +36,7 @@ abstract class BaseApplication : Application() {
module {
viewModel<BaseNavigator> { BaseNavigator() }
viewModel { BaseViewModel() }
factory<SharePreference> { SharePreference(get()) }
factory { EncryptPreference(get()) }
single<SharePreferenceApp> { SharePreferenceAppImpl(get()) }
single<EncryptPreferenceApp> { EncryptPreferenceAppImpl(get()) }
}
}
106 changes: 56 additions & 50 deletions base/src/main/java/com/koai/base/utils/EncryptPreference.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, *>
fun edit(): SharedPreferences.Editor
fun getLongPref(key: String, default: Long = 0): Long
fun setLongPref(key: String, value: Long)
fun getStringSetPref(key: String, default: Set<String> = emptySet()): Set<String>?
}

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<String, *> = pref.all
override fun getAll(): Map<String, *> = 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<String> = emptySet(),
): Set<String>? = pref.getStringSet(key, default)
default: Set<String>,
): Set<String>? = sharedPreferences.getStringSet(key, default)
}
83 changes: 38 additions & 45 deletions base/src/main/java/com/koai/base/utils/SharePreference.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}