From 620620e1389341846139dba2a1f7e967fbf5c74a Mon Sep 17 00:00:00 2001 From: kizzy Date: Fri, 6 Mar 2026 16:40:43 +0700 Subject: [PATCH] fixed for magstripe not allowed --- .../kbz/ui/core_ui/CardWaitingFragment.java | 3 +++ .../ui/core_ui/EmvTransactionFragment.java | 20 ++++++++++++++++++- .../EmvTransactionProcessViewModel.java | 3 +++ .../ui/core_viewmodel/SharedViewModel.java | 5 +++++ .../baselib/util/enums/EmvResultStatus.java | 3 ++- .../baselib/viewModel/EmvBaseViewModel.java | 16 ++++++++++----- 6 files changed, 43 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java index 66b3966..c128548 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java @@ -151,6 +151,9 @@ public class CardWaitingFragment extends DataBindingFragment implements DataBind }else if(sharedViewModel.getIsSeePhone().getValue() != null && sharedViewModel.getIsSeePhone().getValue()) { cardReadViewModel.setCheckCardAlertMsg("Please Tap!",false); setupCardReadProcess(true); + } else if(sharedViewModel.getIsCardAppBlock().getValue() != null && sharedViewModel.getIsCardAppBlock().getValue()) { + cardReadViewModel.setCheckCardAlertMsg("Magstripe not allowed!",false); + setupCardReadProcess(true); } else { setupCardReadProcess(false); } diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java index d6b9f27..693cc73 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java @@ -249,7 +249,25 @@ public class EmvTransactionFragment extends DataBindingFragment { } }); } - + break; + case CARD_APP_BLOCKED: + if(cardReadViewModel.cardTypeData.getValue()!= null && cardReadViewModel.cardTypeData.getValue() == CardTypeX.IC.value) { + isCardInserted(new CardDetectCallback() { + @Override + public void onComplete() { + sharedViewModel.setIsCardAppBlock(true); + navigateToCheckCard(); + } + }); + } else if(cardReadViewModel.cardTypeData.getValue() != null && cardReadViewModel.cardTypeData.getValue() == CardTypeX.NFC.value) { + isCardTaped("Please try again",new CardDetectCallback() { + @Override + public void onComplete() { + sharedViewModel.setIsCardAppBlock(true); + navigateToCheckCard(); + } + }); + } // sharedViewModel.set_errorFragmentMsg("Interface not found!"); // navigateToError(); break; diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java index f67347e..ef790eb 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java @@ -164,6 +164,9 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements case EMV_TRY_AGAIN: emvResultStatus.postValue(EmvResultStatus.READ_CARD_RETRY); break; + case EMV_CARD_BLOCK: + emvResultStatus.postValue(EmvResultStatus.CARD_APP_BLOCKED); + break; case EMV_CONFIRM_CODE_VERIFY: emvResultStatus.postValue(EmvResultStatus.CONFIRM_CODE_VERIFY); break; diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java index 822858e..64b189f 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java @@ -164,6 +164,7 @@ public class SharedViewModel extends ViewModel { private SingleLiveEvent isFallback = new SingleLiveEvent<>(); private SingleLiveEvent isSeePhone = new SingleLiveEvent<>(); + private SingleLiveEvent isCardAppBlock = new SingleLiveEvent<>(); private SingleLiveEvent _isCardDataExist = new SingleLiveEvent<>(); @@ -233,6 +234,10 @@ public class SharedViewModel extends ViewModel { public SingleLiveEvent getIsFallback() { return isFallback;} + public void setIsCardAppBlock(boolean status) { isCardAppBlock.setValue(status);} + + public SingleLiveEvent getIsCardAppBlock() {return isCardAppBlock;} + public void setIsSeePhone(boolean status) { isSeePhone.setValue(status);} public SingleLiveEvent getIsSeePhone() { return isSeePhone;} diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/util/enums/EmvResultStatus.java b/baselib/src/main/java/com/utsmyanmar/baselib/util/enums/EmvResultStatus.java index beac357..fd9d20c 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/util/enums/EmvResultStatus.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/util/enums/EmvResultStatus.java @@ -30,5 +30,6 @@ public enum EmvResultStatus { CONFIRM_CODE_VERIFY, MPU_CARD, SEE_PHONE, - OTHER_INTERFACE + OTHER_INTERFACE, + CARD_APP_BLOCKED } diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java index 31ea53d..aa1bded 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java @@ -153,6 +153,8 @@ public abstract class EmvBaseViewModel extends BaseViewModel { protected static final int EMV_ONLINE_PROCESS = 11; protected static final int EMV_ERROR = 12; protected static final int EMV_TRY_AGAIN = 13; + + protected static final int EMV_CARD_BLOCK = 23; protected static final int EMV_CTLS_TRY_AGAIN = 13; protected static final int EMV_CONFIRM_CODE_VERIFY = 14; @@ -674,11 +676,11 @@ public abstract class EmvBaseViewModel extends BaseViewModel { } } else { //contact terminal capability ; if different card brand(depend on aid) have different terminal capability - if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000004")) { - emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x33}, new byte[]{(byte) 0xE0, (byte) 0x28, (byte) 0xC8}); - emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x1D}, ByteUtils.hexString2ByteArray("6C00800000000000"));//terminal risk - - } +// if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000004")) { +// emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x33}, new byte[]{(byte) 0xE0, (byte) 0x28, (byte) 0xC8}); +// emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x1D}, ByteUtils.hexString2ByteArray("6C00800000000000"));//terminal risk +// +// } } emvHandler.onSetTransInitBeforeGPOResponse(true); @@ -825,6 +827,10 @@ public abstract class EmvBaseViewModel extends BaseViewModel { case SdkResult.Emv_Qpboc_Online://EMV Contactless: Online Process for union pay //union pay online contactless--application should go online break; + case SdkResult.Emv_Card_Block: + case SdkResult.Emv_App_Block: + mHandler.sendEmptyMessage(EMV_CARD_BLOCK); + break; case SdkResult.Emv_Candidatelist_Empty:// Application have no aid list case SdkResult.Emv_FallBack:// FallBack ,chip card reset failed