MPU-UPI contactless is restricted, need to put it in db later.
This commit is contained in:
parent
d32dd1ce5b
commit
bab8390ba4
@ -154,6 +154,9 @@ public class CardWaitingFragment extends DataBindingFragment implements DataBind
|
||||
} else if(sharedViewModel.getIsCardAppBlock().getValue() != null && sharedViewModel.getIsCardAppBlock().getValue()) {
|
||||
cardReadViewModel.setCheckCardAlertMsg("Magstripe not allowed!",false);
|
||||
setupCardReadProcess(true);
|
||||
} else if(sharedViewModel.getIsContactlessRestricted().getValue() != null && sharedViewModel.getIsContactlessRestricted().getValue()) {
|
||||
cardReadViewModel.setCheckCardAlertMsg("Tap not allowed!",false);
|
||||
setupCardReadProcess(true);
|
||||
} else {
|
||||
setupCardReadProcess(false);
|
||||
}
|
||||
@ -166,6 +169,7 @@ public class CardWaitingFragment extends DataBindingFragment implements DataBind
|
||||
|
||||
sharedViewModel.setIsFallback(false);
|
||||
sharedViewModel.setIsSeePhone(false);
|
||||
sharedViewModel.setIsContactlessRestricted(false);
|
||||
|
||||
// cardReadViewModel.cancelCheckCard();
|
||||
|
||||
@ -262,7 +266,10 @@ public class CardWaitingFragment extends DataBindingFragment implements DataBind
|
||||
} else if(!SystemParamsOperation.getInstance().isNfcEnabled()) {
|
||||
allType.add(CardSlotTypeEnum.ICC1);
|
||||
allType.add(CardSlotTypeEnum.SWIPE);
|
||||
} else {
|
||||
} else if(sharedViewModel.getIsContactlessRestricted().getValue() != null && sharedViewModel.getIsContactlessRestricted().getValue()) {
|
||||
allType.add(CardSlotTypeEnum.ICC1);
|
||||
// allType.add(CardSlotTypeEnum.SWIPE);
|
||||
} else {
|
||||
allType.add(CardSlotTypeEnum.ICC1);
|
||||
allType.add(CardSlotTypeEnum.RF);
|
||||
|
||||
|
||||
@ -232,6 +232,17 @@ public class EmvTransactionFragment extends DataBindingFragment {
|
||||
case ON_NEXT_SCREEN:
|
||||
navigateToRRNScreen();
|
||||
break;
|
||||
case INSERT_OR_MANUAL:
|
||||
if(cardReadViewModel.cardTypeData.getValue() != null && cardReadViewModel.cardTypeData.getValue() == CardTypeX.NFC.value) {
|
||||
isCardTaped("Please insert or type card",new CardDetectCallback() {
|
||||
@Override
|
||||
public void onComplete() {
|
||||
sharedViewModel.setIsContactlessRestricted(true);
|
||||
navigateToCheckCard();
|
||||
}
|
||||
});
|
||||
}
|
||||
break;
|
||||
case READ_CARD_RETRY:
|
||||
LogUtil.d(TAG,"Card type :"+cardReadViewModel.cardTypeData.getValue());
|
||||
if(cardReadViewModel.cardTypeData.getValue()!= null && cardReadViewModel.cardTypeData.getValue() == CardTypeX.IC.value) {
|
||||
|
||||
@ -172,6 +172,9 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements
|
||||
case EMV_TRY_AGAIN:
|
||||
emvResultStatus.postValue(EmvResultStatus.READ_CARD_RETRY);
|
||||
break;
|
||||
case EMV_INSERT_OR_MANUAL:
|
||||
emvResultStatus.postValue(EmvResultStatus.INSERT_OR_MANUAL);
|
||||
break;
|
||||
case EMV_CARD_APP_BLOCK:
|
||||
emvResultStatus.postValue(EmvResultStatus.CARD_APP_BLOCKED);
|
||||
break;
|
||||
|
||||
@ -168,6 +168,8 @@ public class SharedViewModel extends ViewModel {
|
||||
|
||||
private SingleLiveEvent<Boolean> isFallback = new SingleLiveEvent<>();
|
||||
private SingleLiveEvent<Boolean> isSeePhone = new SingleLiveEvent<>();
|
||||
|
||||
private SingleLiveEvent<Boolean> isContactlessRestricted = new SingleLiveEvent<>();
|
||||
private SingleLiveEvent<Boolean> isCardAppBlock = new SingleLiveEvent<>();
|
||||
|
||||
private SingleLiveEvent<Boolean> _isCardDataExist = new SingleLiveEvent<>();
|
||||
@ -246,6 +248,10 @@ public class SharedViewModel extends ViewModel {
|
||||
|
||||
public SingleLiveEvent<Boolean> getIsSeePhone() { return isSeePhone;}
|
||||
|
||||
public void setIsContactlessRestricted(boolean status) { isContactlessRestricted.setValue(status);}
|
||||
|
||||
public SingleLiveEvent<Boolean> getIsContactlessRestricted() {return isContactlessRestricted;}
|
||||
|
||||
public void setCardDataExist(boolean exist) { _isCardDataExist.setValue(exist);}
|
||||
|
||||
public SingleLiveEvent<Boolean> getCardDataExist() { return _isCardDataExist; }
|
||||
|
||||
@ -31,5 +31,6 @@ public enum EmvResultStatus {
|
||||
MPU_CARD,
|
||||
SEE_PHONE,
|
||||
OTHER_INTERFACE,
|
||||
CARD_APP_BLOCKED
|
||||
CARD_APP_BLOCKED,
|
||||
INSERT_OR_MANUAL
|
||||
}
|
||||
|
||||
@ -159,6 +159,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
||||
protected static final int EMV_ERROR = 12;
|
||||
protected static final int EMV_TRY_AGAIN = 13;
|
||||
|
||||
protected static final int EMV_INSERT_OR_MANUAL = 24;
|
||||
protected static final int EMV_CARD_APP_BLOCK = 23;
|
||||
protected static final int EMV_CTLS_TRY_AGAIN = 13;
|
||||
|
||||
@ -179,6 +180,21 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
||||
protected int mProcessStep;
|
||||
protected int mAppSelect = 0;
|
||||
|
||||
private static final String[] RESTRICTED_BINS = {"624430",
|
||||
"624431",
|
||||
"624445",
|
||||
"626220",
|
||||
"623476",
|
||||
"629214",
|
||||
"623466",
|
||||
"623433",
|
||||
"62911028",
|
||||
"62441900",
|
||||
"62441901"
|
||||
};
|
||||
|
||||
private boolean isMPU_UPIContactless = false;
|
||||
|
||||
private boolean mMPUContactlessConfigured = false;
|
||||
private Looper mLooper = Looper.getMainLooper();
|
||||
private final Handler mHandler = new Handler(mLooper) {
|
||||
@ -215,7 +231,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
||||
public void startProcess() {
|
||||
isOfflinePinEntered = false;
|
||||
mMPUContactlessConfigured = false;
|
||||
|
||||
isMPU_UPIContactless = false;
|
||||
initData();
|
||||
|
||||
// Check if initialization was successful
|
||||
@ -522,6 +538,16 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
||||
++pinEnterCount;
|
||||
}
|
||||
|
||||
private boolean isRestrictedBin(String cardNo) {
|
||||
if (cardNo == null || cardNo.isEmpty()) return false;
|
||||
for (String bin : RESTRICTED_BINS) {
|
||||
if (cardNo.startsWith(bin)) {
|
||||
LogUtil.d(TAG, "isRestrictedBin: matched BIN " + bin);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private OnEmvProcessListener2 emvProcessListener = new OnEmvProcessListener2() {
|
||||
@Override
|
||||
@ -590,7 +616,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
||||
} else if (aidStr.contains("A000000003")) {
|
||||
configPaywaveParameters();
|
||||
} else if (aidStr.contains("A000000333")) {
|
||||
configureQuickPassParamerter();
|
||||
// configureQuickPassParamerter();
|
||||
} else if (aidStr.contains("A000000541")) {
|
||||
configPureContactlessParameter();
|
||||
} else if (aidStr.contains("A000000065")) {
|
||||
@ -653,6 +679,17 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
||||
|
||||
|
||||
cardNo = cardInfoEntity.getCardNo();
|
||||
|
||||
if (mPayDetail.getCardType() == CardTypeX.NFC.value) {
|
||||
if (isRestrictedBin(cardNo)) {
|
||||
isMPU_UPIContactless = true;
|
||||
LogUtil.d(TAG, "onConfirmCardNo: restricted BIN detected — " + cardNo);
|
||||
emvHandler.onSetConfirmCardNoResponse(false);
|
||||
emvHandler.emvProcessCancel();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (mPayDetail.getCardType() == CardTypeX.NFC.value) {
|
||||
cardNum.postValue(cardInfoEntity.getCardNo());
|
||||
mPayDetail.setCardNo(cardInfoEntity.getCardNo());
|
||||
@ -824,7 +861,12 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
||||
//
|
||||
case SdkResult.Emv_Cancel:// Transaction Cancel
|
||||
// //user cancel
|
||||
mHandler.obtainMessage(EMV_ERROR, retCode, retCode, "Canceled").sendToTarget();
|
||||
if(isMPU_UPIContactless) {
|
||||
mHandler.sendEmptyMessage(EMV_INSERT_OR_MANUAL);
|
||||
} else {
|
||||
mHandler.obtainMessage(EMV_ERROR, retCode, retCode, "Canceled").sendToTarget();
|
||||
}
|
||||
|
||||
break;
|
||||
//
|
||||
// case SdkResult.Emv_Offline_Declined: //
|
||||
|
||||
Loading…
Reference in New Issue
Block a user