optimize USD contacts
This commit is contained in:
@@ -48,10 +48,16 @@ class ContactPickerSheetFragment : BottomSheetDialogFragment() {
|
||||
|
||||
adapter = ContactPickerAdapter(
|
||||
onItemClick = { accountNumber, label ->
|
||||
setFragmentResult(REQUEST_KEY, bundleOf(
|
||||
KEY_ACCOUNT_NUMBER to accountNumber,
|
||||
KEY_LABEL to label
|
||||
))
|
||||
val contacts = viewModel.contacts.value ?: emptyList()
|
||||
val contact = contacts.firstOrNull { it.benefAccount == accountNumber }
|
||||
val bundle = bundleOf(KEY_ACCOUNT_NUMBER to accountNumber, KEY_LABEL to label)
|
||||
if (contact != null && !contact.transferCyDesc.equals("MVR", ignoreCase = true)) {
|
||||
bundle.putBoolean(KEY_SKIP_LOOKUP, true)
|
||||
bundle.putString(KEY_SUBTITLE, "${contact.benefBankName} · ${contact.benefAccount}")
|
||||
bundle.putString(KEY_COLOR, contact.bankColor)
|
||||
contact.customerImgHash?.let { bundle.putString(KEY_IMAGE_HASH, it) }
|
||||
}
|
||||
setFragmentResult(REQUEST_KEY, bundle)
|
||||
dismiss()
|
||||
},
|
||||
onSameAsFrom = {},
|
||||
@@ -254,6 +260,10 @@ class ContactPickerSheetFragment : BottomSheetDialogFragment() {
|
||||
const val REQUEST_KEY = "contact_picker"
|
||||
const val KEY_ACCOUNT_NUMBER = "accountNumber"
|
||||
const val KEY_LABEL = "label"
|
||||
const val KEY_SKIP_LOOKUP = "skipLookup"
|
||||
const val KEY_SUBTITLE = "subtitle"
|
||||
const val KEY_COLOR = "color"
|
||||
const val KEY_IMAGE_HASH = "imageHash"
|
||||
private const val ARG_FROM_ACCOUNT = "fromAccount"
|
||||
private const val RECENTS_TAG = "__recents__"
|
||||
private const val MY_ACCOUNTS_TAG = "__my_accounts__"
|
||||
|
||||
@@ -83,6 +83,8 @@ class HomeActivity : AppCompatActivity() {
|
||||
if (cachedContacts.isNotEmpty()) viewModel.contacts.value = cachedContacts
|
||||
val cachedCats = ContactsCache.loadCategories(this)
|
||||
if (cachedCats.isNotEmpty()) viewModel.contactCategories.value = cachedCats
|
||||
val cachedLimits = ForeignLimitsCache.load(this)
|
||||
if (cachedLimits.isNotEmpty()) viewModel.bmlLimits.value = cachedLimits
|
||||
|
||||
refreshFinancing(app.mibSession, app.mibProfiles)
|
||||
refreshContacts(app.mibSession, app.mibProfiles)
|
||||
@@ -102,6 +104,8 @@ class HomeActivity : AppCompatActivity() {
|
||||
if (cachedContacts.isNotEmpty()) viewModel.contacts.value = cachedContacts
|
||||
val cachedCats = ContactsCache.loadCategories(this)
|
||||
if (cachedCats.isNotEmpty()) viewModel.contactCategories.value = cachedCats
|
||||
val cachedLimits = ForeignLimitsCache.load(this)
|
||||
if (cachedLimits.isNotEmpty()) viewModel.bmlLimits.value = cachedLimits
|
||||
|
||||
val store = CredentialStore(this)
|
||||
autoRefresh(store.loadMibCredentials(), store.loadBmlCredentials(), store)
|
||||
|
||||
@@ -70,7 +70,14 @@ class TransferFragment : Fragment() {
|
||||
childFragmentManager.setFragmentResultListener(ContactPickerSheetFragment.REQUEST_KEY, viewLifecycleOwner) { _, bundle ->
|
||||
val accountNumber = bundle.getString(ContactPickerSheetFragment.KEY_ACCOUNT_NUMBER) ?: return@setFragmentResultListener
|
||||
val label = bundle.getString(ContactPickerSheetFragment.KEY_LABEL) ?: ""
|
||||
prefillToFromContact(accountNumber, label)
|
||||
if (bundle.getBoolean(ContactPickerSheetFragment.KEY_SKIP_LOOKUP, false)) {
|
||||
val subtitle = bundle.getString(ContactPickerSheetFragment.KEY_SUBTITLE) ?: accountNumber
|
||||
val colorHex = bundle.getString(ContactPickerSheetFragment.KEY_COLOR) ?: "#607D8B"
|
||||
val imageHash = bundle.getString(ContactPickerSheetFragment.KEY_IMAGE_HASH)
|
||||
prefillToDirectly(accountNumber, label, subtitle, colorHex, imageHash)
|
||||
} else {
|
||||
prefillToFromContact(accountNumber, label)
|
||||
}
|
||||
}
|
||||
|
||||
binding.btnPickContact.setOnClickListener {
|
||||
@@ -132,6 +139,21 @@ class TransferFragment : Fragment() {
|
||||
Toast.makeText(requireContext(), R.string.transfer_enter_account_first, Toast.LENGTH_SHORT).show()
|
||||
return
|
||||
}
|
||||
|
||||
// If a known contact with non-MVR currency matches, skip the IPS lookup
|
||||
val contacts = viewModel.contacts.value ?: emptyList()
|
||||
val matchedContact = contacts.firstOrNull { it.benefAccount == accountNumber }
|
||||
if (matchedContact != null && !matchedContact.transferCyDesc.equals("MVR", ignoreCase = true)) {
|
||||
prefillToDirectly(
|
||||
accountNumber = matchedContact.benefAccount,
|
||||
displayName = matchedContact.benefNickName,
|
||||
subtitle = "${matchedContact.benefBankName} · ${matchedContact.benefAccount}",
|
||||
colorHex = matchedContact.bankColor,
|
||||
imageHash = matchedContact.customerImgHash
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
val sess = session
|
||||
if (sess == null) {
|
||||
Toast.makeText(requireContext(), R.string.transfer_session_unavailable, Toast.LENGTH_SHORT).show()
|
||||
@@ -186,6 +208,36 @@ class TransferFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun prefillToDirectly(
|
||||
accountNumber: String,
|
||||
displayName: String,
|
||||
subtitle: String,
|
||||
colorHex: String,
|
||||
imageHash: String?
|
||||
) {
|
||||
binding.tvToAccountName.text = displayName
|
||||
binding.tvToBankBic.text = subtitle
|
||||
binding.ivToPhoto.setImageBitmap(makeInitialsBitmap(displayName, colorHex))
|
||||
binding.tilTo.visibility = View.GONE
|
||||
binding.btnPickContact.visibility = View.GONE
|
||||
binding.btnScanQr.visibility = View.GONE
|
||||
binding.cardToInfo.visibility = View.VISIBLE
|
||||
|
||||
val contacts = viewModel.contacts.value ?: emptyList()
|
||||
val contact = contacts.firstOrNull { it.benefAccount == accountNumber }
|
||||
if (contact != null) {
|
||||
RecentsCache.save(requireContext(), RecentPick(
|
||||
accountNumber = contact.benefAccount,
|
||||
displayName = contact.benefNickName,
|
||||
subtitle = subtitle,
|
||||
colorHex = colorHex,
|
||||
imageHash = imageHash,
|
||||
isProfileImage = false
|
||||
))
|
||||
if (imageHash != null) loadToPhoto(imageHash, isProfile = false)
|
||||
}
|
||||
}
|
||||
|
||||
private fun prefillToFromContact(accountNumber: String, label: String) {
|
||||
binding.cardToInfo.visibility = View.GONE
|
||||
binding.tilTo.visibility = View.VISIBLE
|
||||
|
||||
Reference in New Issue
Block a user