forked from shihaam/thijooree
optimze mib cards loading
This commit is contained in:
|
Before Width: | Height: | Size: 242 KiB After Width: | Height: | Size: 242 KiB |
|
Before Width: | Height: | Size: 378 KiB After Width: | Height: | Size: 378 KiB |
@@ -101,7 +101,9 @@ class CardSettingsFragment : Fragment() {
|
|||||||
tvCardOwner.text = card.cardHolderName
|
tvCardOwner.text = card.cardHolderName
|
||||||
tvCardNumber.text = PayWithCardFragment.formatMasked(card.maskedCardNumber)
|
tvCardNumber.text = PayWithCardFragment.formatMasked(card.maskedCardNumber)
|
||||||
tvCardType.text = card.cardTypeDesc
|
tvCardType.text = card.cardTypeDesc
|
||||||
PayWithCardFragment.loadCardImage(ivCardImage, PayWithCardFragment.cardImageAsset(card))
|
val assetPath = PayWithCardFragment.cardImageAsset(card)
|
||||||
|
if (assetPath != null) PayWithCardFragment.loadCardImage(ivCardImage, assetPath)
|
||||||
|
else ivCardImage.setImageDrawable(null)
|
||||||
val wip = View.OnClickListener {
|
val wip = View.OnClickListener {
|
||||||
Toast.makeText(context, R.string.work_in_progress, Toast.LENGTH_SHORT).show()
|
Toast.makeText(context, R.string.work_in_progress, Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ import sh.sar.basedbank.api.mib.MibFinanceDeal
|
|||||||
import sh.sar.basedbank.util.AccountCache
|
import sh.sar.basedbank.util.AccountCache
|
||||||
import sh.sar.basedbank.util.ContactsCache
|
import sh.sar.basedbank.util.ContactsCache
|
||||||
import sh.sar.basedbank.util.CredentialStore
|
import sh.sar.basedbank.util.CredentialStore
|
||||||
|
import sh.sar.basedbank.util.CardsCache
|
||||||
import sh.sar.basedbank.util.FinancingCache
|
import sh.sar.basedbank.util.FinancingCache
|
||||||
import sh.sar.basedbank.util.ForeignLimitsCache
|
import sh.sar.basedbank.util.ForeignLimitsCache
|
||||||
|
|
||||||
@@ -1011,6 +1012,7 @@ fun applyNavLabelVisibility() {
|
|||||||
existing.removeAll { it.loginTag == "mib_$loginId" }
|
existing.removeAll { it.loginTag == "mib_$loginId" }
|
||||||
existing += cards
|
existing += cards
|
||||||
viewModel.mibCards.postValue(existing)
|
viewModel.mibCards.postValue(existing)
|
||||||
|
CardsCache.save(this@HomeActivity, existing)
|
||||||
}
|
}
|
||||||
} catch (_: Exception) { }
|
} catch (_: Exception) { }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import androidx.recyclerview.widget.RecyclerView
|
|||||||
import sh.sar.basedbank.R
|
import sh.sar.basedbank.R
|
||||||
import sh.sar.basedbank.api.mib.MibCard
|
import sh.sar.basedbank.api.mib.MibCard
|
||||||
import sh.sar.basedbank.databinding.FragmentPayWithCardBinding
|
import sh.sar.basedbank.databinding.FragmentPayWithCardBinding
|
||||||
|
import sh.sar.basedbank.util.CardsCache
|
||||||
|
|
||||||
class PayWithCardFragment : Fragment() {
|
class PayWithCardFragment : Fragment() {
|
||||||
|
|
||||||
@@ -57,10 +58,13 @@ class PayWithCardFragment : Fragment() {
|
|||||||
binding.recyclerView.visibility = if (cards.isEmpty()) View.GONE else View.VISIBLE
|
binding.recyclerView.visibility = if (cards.isEmpty()) View.GONE else View.VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
if (viewModel.mibCards.value == null) {
|
val cached = CardsCache.load(requireContext())
|
||||||
|
if (cached.isNotEmpty()) {
|
||||||
|
viewModel.mibCards.value = cached
|
||||||
|
} else {
|
||||||
binding.loadingView.visibility = View.VISIBLE
|
binding.loadingView.visibility = View.VISIBLE
|
||||||
(activity as? HomeActivity)?.triggerRefreshCards()
|
|
||||||
}
|
}
|
||||||
|
(activity as? HomeActivity)?.triggerRefreshCards()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
@@ -101,7 +105,9 @@ class PayWithCardFragment : Fragment() {
|
|||||||
tvCardOwner.text = card.cardHolderName
|
tvCardOwner.text = card.cardHolderName
|
||||||
tvCardNumber.text = formatMasked(card.maskedCardNumber)
|
tvCardNumber.text = formatMasked(card.maskedCardNumber)
|
||||||
tvCardType.text = card.cardTypeDesc
|
tvCardType.text = card.cardTypeDesc
|
||||||
loadCardImage(ivCardImage, cardImageAsset(card))
|
val assetPath = cardImageAsset(card)
|
||||||
|
if (assetPath != null) loadCardImage(ivCardImage, assetPath)
|
||||||
|
else ivCardImage.setImageDrawable(null)
|
||||||
btnPayQr.setOnClickListener {
|
btnPayQr.setOnClickListener {
|
||||||
Toast.makeText(context, R.string.work_in_progress, Toast.LENGTH_SHORT).show()
|
Toast.makeText(context, R.string.work_in_progress, Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
@@ -113,13 +119,11 @@ class PayWithCardFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun cardImageAsset(card: MibCard): String {
|
fun cardImageAsset(card: MibCard): String? = when (card.cardType) {
|
||||||
val desc = card.cardTypeDesc.lowercase()
|
"53" -> "cards/mib/visa_black_platinum.jpg"
|
||||||
return when {
|
"57" -> "cards/mib/visa_blue_everyday.jpg"
|
||||||
"corporate" in desc || "business" in desc -> "cards/mib/visa_business.jpg"
|
"70" -> "cards/mib/visa_business.jpg"
|
||||||
"platinum" in desc -> "cards/mib/cards-platinum-bg-w-logo-1.jpg"
|
else -> null
|
||||||
else -> "cards/mib/cards-blue-bg-w-logo-1.jpg"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun loadCardImage(imageView: ImageView, assetPath: String) {
|
fun loadCardImage(imageView: ImageView, assetPath: String) {
|
||||||
@@ -129,7 +133,7 @@ class PayWithCardFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
imageView.setImageBitmap(bitmap)
|
imageView.setImageBitmap(bitmap)
|
||||||
} catch (_: Exception) {
|
} catch (_: Exception) {
|
||||||
imageView.setImageResource(android.R.color.darker_gray)
|
imageView.setImageDrawable(null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
package sh.sar.basedbank.util
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import org.json.JSONArray
|
||||||
|
import org.json.JSONObject
|
||||||
|
import sh.sar.basedbank.api.mib.MibCard
|
||||||
|
|
||||||
|
object CardsCache {
|
||||||
|
|
||||||
|
private const val PREFS = "cards_cache"
|
||||||
|
private const val KEY_MIB_CARDS = "mib_cards"
|
||||||
|
|
||||||
|
fun save(context: Context, cards: List<MibCard>) {
|
||||||
|
val arr = JSONArray()
|
||||||
|
for (c in cards) {
|
||||||
|
arr.put(JSONObject().apply {
|
||||||
|
put("cardId", c.cardId)
|
||||||
|
put("maskedCardNumber", c.maskedCardNumber)
|
||||||
|
put("cardStatus", c.cardStatus)
|
||||||
|
put("cardType", c.cardType)
|
||||||
|
put("cardTypeDesc", c.cardTypeDesc)
|
||||||
|
put("customerId", c.customerId)
|
||||||
|
put("phoneNumber", c.phoneNumber)
|
||||||
|
put("cardHolderName", c.cardHolderName)
|
||||||
|
put("loginTag", c.loginTag)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
context.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
||||||
|
.edit().putString(KEY_MIB_CARDS, CacheEncryption.encrypt(arr.toString())).apply()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun load(context: Context): List<MibCard> {
|
||||||
|
val raw = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE)
|
||||||
|
.getString(KEY_MIB_CARDS, null) ?: return emptyList()
|
||||||
|
return try {
|
||||||
|
val arr = JSONArray(CacheEncryption.decrypt(raw))
|
||||||
|
(0 until arr.length()).map { i ->
|
||||||
|
val o = arr.getJSONObject(i)
|
||||||
|
MibCard(
|
||||||
|
cardId = o.optString("cardId"),
|
||||||
|
maskedCardNumber = o.optString("maskedCardNumber"),
|
||||||
|
cardStatus = o.optString("cardStatus"),
|
||||||
|
cardType = o.optString("cardType"),
|
||||||
|
cardTypeDesc = o.optString("cardTypeDesc"),
|
||||||
|
customerId = o.optString("customerId"),
|
||||||
|
phoneNumber = o.optString("phoneNumber"),
|
||||||
|
cardHolderName = o.optString("cardHolderName"),
|
||||||
|
loginTag = o.optString("loginTag")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} catch (_: Exception) { emptyList() }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun clear(context: Context) {
|
||||||
|
context.getSharedPreferences(PREFS, Context.MODE_PRIVATE).edit().clear().apply()
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user