add support to view previous transfer recipts
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
package sh.sar.basedbank.util
|
||||
|
||||
import android.content.Context
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONObject
|
||||
import sh.sar.basedbank.ui.home.TransferReceiptData
|
||||
import java.io.File
|
||||
|
||||
/** Persistent (non-cache) store for completed transfer receipts shown in Activities. */
|
||||
object ReceiptStore {
|
||||
|
||||
private const val FILE_NAME = "activities.json"
|
||||
|
||||
data class Entry(val data: TransferReceiptData, val savedAt: Long)
|
||||
|
||||
fun save(context: Context, receipt: TransferReceiptData) {
|
||||
val existing = loadAll(context).toMutableList()
|
||||
existing.add(0, Entry(receipt, System.currentTimeMillis()))
|
||||
writeAll(context, existing)
|
||||
}
|
||||
|
||||
fun loadAll(context: Context): List<Entry> {
|
||||
val file = File(context.filesDir, FILE_NAME)
|
||||
if (!file.exists()) return emptyList()
|
||||
return try {
|
||||
val arr = JSONArray(CacheEncryption.decrypt(file.readText()))
|
||||
(0 until arr.length()).map { i ->
|
||||
val o = arr.getJSONObject(i)
|
||||
Entry(
|
||||
data = TransferReceiptData(
|
||||
bank = o.optString("bank", "MIB"),
|
||||
amount = o.optString("amount"),
|
||||
currency = o.optString("currency"),
|
||||
fromLabel = o.optString("fromLabel"),
|
||||
fromColorHex = o.optString("fromColorHex"),
|
||||
fromProfileImageHash = o.optString("fromProfileImageHash").takeIf { it.isNotBlank() },
|
||||
toLabel = o.optString("toLabel"),
|
||||
toAccount = o.optString("toAccount"),
|
||||
toBank = o.optString("toBank"),
|
||||
remarks = o.optString("remarks"),
|
||||
mibReferenceNo = o.optString("mibReferenceNo"),
|
||||
mibTransactionDate = o.optString("mibTransactionDate"),
|
||||
bmlFromName = o.optString("bmlFromName"),
|
||||
bmlReference = o.optString("bmlReference"),
|
||||
bmlTimestamp = o.optString("bmlTimestamp"),
|
||||
bmlMessage = o.optString("bmlMessage")
|
||||
),
|
||||
savedAt = o.optLong("savedAt", 0L)
|
||||
)
|
||||
}
|
||||
} catch (_: Exception) { emptyList() }
|
||||
}
|
||||
|
||||
fun clearAll(context: Context) {
|
||||
File(context.filesDir, FILE_NAME).delete()
|
||||
}
|
||||
|
||||
private fun writeAll(context: Context, items: List<Entry>) {
|
||||
try {
|
||||
val arr = JSONArray()
|
||||
for ((d, ts) in items) arr.put(JSONObject().apply {
|
||||
put("bank", d.bank)
|
||||
put("amount", d.amount)
|
||||
put("currency", d.currency)
|
||||
put("fromLabel", d.fromLabel)
|
||||
put("fromColorHex", d.fromColorHex)
|
||||
put("fromProfileImageHash", d.fromProfileImageHash ?: "")
|
||||
put("toLabel", d.toLabel)
|
||||
put("toAccount", d.toAccount)
|
||||
put("toBank", d.toBank)
|
||||
put("remarks", d.remarks)
|
||||
put("mibReferenceNo", d.mibReferenceNo)
|
||||
put("mibTransactionDate", d.mibTransactionDate)
|
||||
put("bmlFromName", d.bmlFromName)
|
||||
put("bmlReference", d.bmlReference)
|
||||
put("bmlTimestamp", d.bmlTimestamp)
|
||||
put("bmlMessage", d.bmlMessage)
|
||||
put("savedAt", ts)
|
||||
})
|
||||
File(context.filesDir, FILE_NAME).writeText(CacheEncryption.encrypt(arr.toString()))
|
||||
} catch (_: Exception) {}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user