forked from thijooree/android
246 lines
12 KiB
Kotlin
246 lines
12 KiB
Kotlin
package sh.sar.basedbank.util
|
|
|
|
import android.content.Context
|
|
import org.json.JSONArray
|
|
import org.json.JSONObject
|
|
import sh.sar.basedbank.api.models.BankAccount
|
|
|
|
object AccountCache {
|
|
|
|
private const val PREFS = "account_cache"
|
|
private const val KEY_MIB = "mib_accounts"
|
|
private fun bmlKey(loginId: String) = "bml_accounts_$loginId"
|
|
private fun fahipayKey(loginId: String) = "fahipay_accounts_$loginId"
|
|
private fun mfaisaKey(loginId: String) = "mfaisa_accounts_$loginId"
|
|
|
|
fun save(context: Context, accounts: List<BankAccount>) {
|
|
val arr = JSONArray()
|
|
for (acc in accounts) {
|
|
arr.put(JSONObject().apply {
|
|
put("bank", acc.bank)
|
|
put("profileName", acc.profileName)
|
|
put("profileType", acc.profileType)
|
|
put("productCode", acc.productCode)
|
|
put("accountNumber", acc.accountNumber)
|
|
put("accountBriefName", acc.accountBriefName)
|
|
put("currencyName", acc.currencyName)
|
|
put("accountTypeName", acc.accountTypeName)
|
|
put("availableBalance", acc.availableBalance)
|
|
put("currentBalance", acc.currentBalance)
|
|
put("blockedAmount", acc.blockedAmount)
|
|
put("mvrBalance", acc.mvrBalance)
|
|
put("statusDesc", acc.statusDesc)
|
|
put("loginTag", acc.loginTag)
|
|
put("profileId", acc.profileId)
|
|
if (acc.profileImageHash != null) put("profileImageHash", acc.profileImageHash)
|
|
})
|
|
}
|
|
context.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
|
.edit().putString(KEY_MIB, CacheEncryption.encrypt(arr.toString())).apply()
|
|
}
|
|
|
|
fun saveBml(context: Context, loginId: String, accounts: List<BankAccount>) {
|
|
val arr = JSONArray()
|
|
for (acc in accounts) {
|
|
arr.put(JSONObject().apply {
|
|
put("profileName", acc.profileName)
|
|
put("profileType", acc.profileType)
|
|
put("productCode", acc.productCode)
|
|
put("accountNumber", acc.accountNumber)
|
|
put("accountBriefName", acc.accountBriefName)
|
|
put("currencyName", acc.currencyName)
|
|
put("accountTypeName", acc.accountTypeName)
|
|
put("availableBalance", acc.availableBalance)
|
|
put("currentBalance", acc.currentBalance)
|
|
put("blockedAmount", acc.blockedAmount)
|
|
put("mvrBalance", acc.mvrBalance)
|
|
put("statusDesc", acc.statusDesc)
|
|
put("loginTag", acc.loginTag)
|
|
put("internalId", acc.internalId)
|
|
put("profileId", acc.profileId)
|
|
})
|
|
}
|
|
context.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
|
.edit().putString(bmlKey(loginId), CacheEncryption.encrypt(arr.toString())).apply()
|
|
}
|
|
|
|
fun loadBml(context: Context, loginId: String): List<BankAccount> {
|
|
val raw = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
|
.getString(bmlKey(loginId), null) ?: return emptyList()
|
|
return try {
|
|
val arr = JSONArray(CacheEncryption.decrypt(raw))
|
|
(0 until arr.length()).map { i ->
|
|
val o = arr.getJSONObject(i)
|
|
BankAccount(
|
|
bank = "BML",
|
|
profileName = o.optString("profileName"),
|
|
profileType = o.optString("profileType"),
|
|
productCode = o.optString("productCode", ""),
|
|
accountNumber = o.optString("accountNumber"),
|
|
accountBriefName = o.optString("accountBriefName"),
|
|
currencyName = o.optString("currencyName"),
|
|
accountTypeName = o.optString("accountTypeName"),
|
|
availableBalance = o.optString("availableBalance"),
|
|
currentBalance = o.optString("currentBalance"),
|
|
blockedAmount = o.optString("blockedAmount"),
|
|
mvrBalance = o.optString("mvrBalance"),
|
|
statusDesc = o.optString("statusDesc"),
|
|
profileImageHash = null,
|
|
loginTag = o.optString("loginTag"),
|
|
internalId = o.optString("internalId", ""),
|
|
profileId = o.optString("profileId", "")
|
|
)
|
|
}
|
|
} catch (_: Exception) { emptyList() }
|
|
}
|
|
|
|
fun loadBml(context: Context, loginIds: List<String>): List<BankAccount> =
|
|
loginIds.flatMap { loadBml(context, it) }
|
|
|
|
fun saveFahipay(context: Context, loginId: String, accounts: List<BankAccount>) {
|
|
val arr = JSONArray()
|
|
for (acc in accounts) {
|
|
arr.put(JSONObject().apply {
|
|
put("profileName", acc.profileName)
|
|
put("profileType", acc.profileType)
|
|
put("accountNumber", acc.accountNumber)
|
|
put("accountBriefName", acc.accountBriefName)
|
|
put("currencyName", acc.currencyName)
|
|
put("accountTypeName", acc.accountTypeName)
|
|
put("availableBalance", acc.availableBalance)
|
|
put("currentBalance", acc.currentBalance)
|
|
put("blockedAmount", acc.blockedAmount)
|
|
put("mvrBalance", acc.mvrBalance)
|
|
put("statusDesc", acc.statusDesc)
|
|
put("loginTag", acc.loginTag)
|
|
put("internalId", acc.internalId)
|
|
})
|
|
}
|
|
context.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
|
.edit().putString(fahipayKey(loginId), CacheEncryption.encrypt(arr.toString())).apply()
|
|
}
|
|
|
|
fun loadFahipay(context: Context, loginId: String): List<BankAccount> {
|
|
val raw = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
|
.getString(fahipayKey(loginId), null) ?: return emptyList()
|
|
return try {
|
|
val arr = JSONArray(CacheEncryption.decrypt(raw))
|
|
(0 until arr.length()).map { i ->
|
|
val o = arr.getJSONObject(i)
|
|
BankAccount(
|
|
bank = "FAHIPAY",
|
|
profileName = o.optString("profileName"),
|
|
profileType = o.optString("profileType"),
|
|
accountNumber = o.optString("accountNumber"),
|
|
accountBriefName = o.optString("accountBriefName"),
|
|
currencyName = o.optString("currencyName"),
|
|
accountTypeName = o.optString("accountTypeName"),
|
|
availableBalance = o.optString("availableBalance"),
|
|
currentBalance = o.optString("currentBalance"),
|
|
blockedAmount = o.optString("blockedAmount"),
|
|
mvrBalance = o.optString("mvrBalance"),
|
|
statusDesc = o.optString("statusDesc"),
|
|
profileImageHash = null,
|
|
loginTag = o.optString("loginTag"),
|
|
internalId = o.optString("internalId", "")
|
|
)
|
|
}
|
|
} catch (_: Exception) { emptyList() }
|
|
}
|
|
|
|
fun loadFahipay(context: Context, loginIds: List<String>): List<BankAccount> =
|
|
loginIds.flatMap { loadFahipay(context, it) }
|
|
|
|
fun saveMfaisa(context: Context, loginId: String, accounts: List<BankAccount>) {
|
|
val arr = JSONArray()
|
|
for (acc in accounts) {
|
|
arr.put(JSONObject().apply {
|
|
put("profileName", acc.profileName)
|
|
put("profileType", acc.profileType)
|
|
put("accountNumber", acc.accountNumber)
|
|
put("accountBriefName", acc.accountBriefName)
|
|
put("currencyName", acc.currencyName)
|
|
put("accountTypeName", acc.accountTypeName)
|
|
put("availableBalance", acc.availableBalance)
|
|
put("currentBalance", acc.currentBalance)
|
|
put("blockedAmount", acc.blockedAmount)
|
|
put("mvrBalance", acc.mvrBalance)
|
|
put("statusDesc", acc.statusDesc)
|
|
put("loginTag", acc.loginTag)
|
|
put("profileId", acc.profileId)
|
|
put("internalId", acc.internalId)
|
|
})
|
|
}
|
|
context.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
|
.edit().putString(mfaisaKey(loginId), CacheEncryption.encrypt(arr.toString())).apply()
|
|
}
|
|
|
|
fun loadMfaisa(context: Context, loginId: String): List<BankAccount> {
|
|
val raw = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
|
.getString(mfaisaKey(loginId), null) ?: return emptyList()
|
|
return try {
|
|
val arr = JSONArray(CacheEncryption.decrypt(raw))
|
|
(0 until arr.length()).map { i ->
|
|
val o = arr.getJSONObject(i)
|
|
BankAccount(
|
|
bank = "MFAISA",
|
|
profileName = o.optString("profileName"),
|
|
profileType = o.optString("profileType"),
|
|
accountNumber = o.optString("accountNumber"),
|
|
accountBriefName = o.optString("accountBriefName"),
|
|
currencyName = o.optString("currencyName"),
|
|
accountTypeName = o.optString("accountTypeName"),
|
|
availableBalance = o.optString("availableBalance"),
|
|
currentBalance = o.optString("currentBalance"),
|
|
blockedAmount = o.optString("blockedAmount"),
|
|
mvrBalance = o.optString("mvrBalance"),
|
|
statusDesc = o.optString("statusDesc"),
|
|
profileImageHash = null,
|
|
loginTag = o.optString("loginTag"),
|
|
profileId = o.optString("profileId", ""),
|
|
internalId = o.optString("internalId", "")
|
|
)
|
|
}
|
|
} catch (_: Exception) { emptyList() }
|
|
}
|
|
|
|
fun loadMfaisa(context: Context, loginIds: List<String>): List<BankAccount> =
|
|
loginIds.flatMap { loadMfaisa(context, it) }
|
|
|
|
fun clear(context: Context) {
|
|
context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit().clear().apply()
|
|
}
|
|
|
|
fun load(context: Context): List<BankAccount> {
|
|
val raw = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
|
.getString(KEY_MIB, null) ?: return emptyList()
|
|
return try {
|
|
val json = CacheEncryption.decrypt(raw)
|
|
val arr = JSONArray(json)
|
|
(0 until arr.length()).map { i ->
|
|
val o = arr.getJSONObject(i)
|
|
BankAccount(
|
|
bank = o.optString("bank", "MIB"),
|
|
profileName = o.optString("profileName"),
|
|
profileType = o.optString("profileType"),
|
|
productCode = o.optString("productCode", ""),
|
|
accountNumber = o.optString("accountNumber"),
|
|
accountBriefName = o.optString("accountBriefName"),
|
|
currencyName = o.optString("currencyName"),
|
|
accountTypeName = o.optString("accountTypeName"),
|
|
availableBalance = o.optString("availableBalance"),
|
|
currentBalance = o.optString("currentBalance"),
|
|
blockedAmount = o.optString("blockedAmount"),
|
|
mvrBalance = o.optString("mvrBalance"),
|
|
statusDesc = o.optString("statusDesc"),
|
|
profileImageHash = o.optString("profileImageHash").takeIf { it.isNotBlank() },
|
|
loginTag = o.optString("loginTag"),
|
|
profileId = o.optString("profileId", "")
|
|
)
|
|
}
|
|
} catch (e: Exception) {
|
|
emptyList()
|
|
}
|
|
}
|
|
}
|