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()) {
|
} else if(sharedViewModel.getIsCardAppBlock().getValue() != null && sharedViewModel.getIsCardAppBlock().getValue()) {
|
||||||
cardReadViewModel.setCheckCardAlertMsg("Magstripe not allowed!",false);
|
cardReadViewModel.setCheckCardAlertMsg("Magstripe not allowed!",false);
|
||||||
setupCardReadProcess(true);
|
setupCardReadProcess(true);
|
||||||
|
} else if(sharedViewModel.getIsContactlessRestricted().getValue() != null && sharedViewModel.getIsContactlessRestricted().getValue()) {
|
||||||
|
cardReadViewModel.setCheckCardAlertMsg("Tap not allowed!",false);
|
||||||
|
setupCardReadProcess(true);
|
||||||
} else {
|
} else {
|
||||||
setupCardReadProcess(false);
|
setupCardReadProcess(false);
|
||||||
}
|
}
|
||||||
@ -166,6 +169,7 @@ public class CardWaitingFragment extends DataBindingFragment implements DataBind
|
|||||||
|
|
||||||
sharedViewModel.setIsFallback(false);
|
sharedViewModel.setIsFallback(false);
|
||||||
sharedViewModel.setIsSeePhone(false);
|
sharedViewModel.setIsSeePhone(false);
|
||||||
|
sharedViewModel.setIsContactlessRestricted(false);
|
||||||
|
|
||||||
// cardReadViewModel.cancelCheckCard();
|
// cardReadViewModel.cancelCheckCard();
|
||||||
|
|
||||||
@ -262,7 +266,10 @@ public class CardWaitingFragment extends DataBindingFragment implements DataBind
|
|||||||
} else if(!SystemParamsOperation.getInstance().isNfcEnabled()) {
|
} else if(!SystemParamsOperation.getInstance().isNfcEnabled()) {
|
||||||
allType.add(CardSlotTypeEnum.ICC1);
|
allType.add(CardSlotTypeEnum.ICC1);
|
||||||
allType.add(CardSlotTypeEnum.SWIPE);
|
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.ICC1);
|
||||||
allType.add(CardSlotTypeEnum.RF);
|
allType.add(CardSlotTypeEnum.RF);
|
||||||
|
|
||||||
|
|||||||
@ -232,6 +232,17 @@ public class EmvTransactionFragment extends DataBindingFragment {
|
|||||||
case ON_NEXT_SCREEN:
|
case ON_NEXT_SCREEN:
|
||||||
navigateToRRNScreen();
|
navigateToRRNScreen();
|
||||||
break;
|
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:
|
case READ_CARD_RETRY:
|
||||||
LogUtil.d(TAG,"Card type :"+cardReadViewModel.cardTypeData.getValue());
|
LogUtil.d(TAG,"Card type :"+cardReadViewModel.cardTypeData.getValue());
|
||||||
if(cardReadViewModel.cardTypeData.getValue()!= null && cardReadViewModel.cardTypeData.getValue() == CardTypeX.IC.value) {
|
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:
|
case EMV_TRY_AGAIN:
|
||||||
emvResultStatus.postValue(EmvResultStatus.READ_CARD_RETRY);
|
emvResultStatus.postValue(EmvResultStatus.READ_CARD_RETRY);
|
||||||
break;
|
break;
|
||||||
|
case EMV_INSERT_OR_MANUAL:
|
||||||
|
emvResultStatus.postValue(EmvResultStatus.INSERT_OR_MANUAL);
|
||||||
|
break;
|
||||||
case EMV_CARD_APP_BLOCK:
|
case EMV_CARD_APP_BLOCK:
|
||||||
emvResultStatus.postValue(EmvResultStatus.CARD_APP_BLOCKED);
|
emvResultStatus.postValue(EmvResultStatus.CARD_APP_BLOCKED);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -168,6 +168,8 @@ public class SharedViewModel extends ViewModel {
|
|||||||
|
|
||||||
private SingleLiveEvent<Boolean> isFallback = new SingleLiveEvent<>();
|
private SingleLiveEvent<Boolean> isFallback = new SingleLiveEvent<>();
|
||||||
private SingleLiveEvent<Boolean> isSeePhone = new SingleLiveEvent<>();
|
private SingleLiveEvent<Boolean> isSeePhone = new SingleLiveEvent<>();
|
||||||
|
|
||||||
|
private SingleLiveEvent<Boolean> isContactlessRestricted = new SingleLiveEvent<>();
|
||||||
private SingleLiveEvent<Boolean> isCardAppBlock = new SingleLiveEvent<>();
|
private SingleLiveEvent<Boolean> isCardAppBlock = new SingleLiveEvent<>();
|
||||||
|
|
||||||
private SingleLiveEvent<Boolean> _isCardDataExist = new SingleLiveEvent<>();
|
private SingleLiveEvent<Boolean> _isCardDataExist = new SingleLiveEvent<>();
|
||||||
@ -246,6 +248,10 @@ public class SharedViewModel extends ViewModel {
|
|||||||
|
|
||||||
public SingleLiveEvent<Boolean> getIsSeePhone() { return isSeePhone;}
|
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 void setCardDataExist(boolean exist) { _isCardDataExist.setValue(exist);}
|
||||||
|
|
||||||
public SingleLiveEvent<Boolean> getCardDataExist() { return _isCardDataExist; }
|
public SingleLiveEvent<Boolean> getCardDataExist() { return _isCardDataExist; }
|
||||||
|
|||||||
@ -31,5 +31,6 @@ public enum EmvResultStatus {
|
|||||||
MPU_CARD,
|
MPU_CARD,
|
||||||
SEE_PHONE,
|
SEE_PHONE,
|
||||||
OTHER_INTERFACE,
|
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_ERROR = 12;
|
||||||
protected static final int EMV_TRY_AGAIN = 13;
|
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_CARD_APP_BLOCK = 23;
|
||||||
protected static final int EMV_CTLS_TRY_AGAIN = 13;
|
protected static final int EMV_CTLS_TRY_AGAIN = 13;
|
||||||
|
|
||||||
@ -179,6 +180,21 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
|||||||
protected int mProcessStep;
|
protected int mProcessStep;
|
||||||
protected int mAppSelect = 0;
|
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 boolean mMPUContactlessConfigured = false;
|
||||||
private Looper mLooper = Looper.getMainLooper();
|
private Looper mLooper = Looper.getMainLooper();
|
||||||
private final Handler mHandler = new Handler(mLooper) {
|
private final Handler mHandler = new Handler(mLooper) {
|
||||||
@ -215,7 +231,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
|||||||
public void startProcess() {
|
public void startProcess() {
|
||||||
isOfflinePinEntered = false;
|
isOfflinePinEntered = false;
|
||||||
mMPUContactlessConfigured = false;
|
mMPUContactlessConfigured = false;
|
||||||
|
isMPU_UPIContactless = false;
|
||||||
initData();
|
initData();
|
||||||
|
|
||||||
// Check if initialization was successful
|
// Check if initialization was successful
|
||||||
@ -522,6 +538,16 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
|||||||
++pinEnterCount;
|
++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() {
|
private OnEmvProcessListener2 emvProcessListener = new OnEmvProcessListener2() {
|
||||||
@Override
|
@Override
|
||||||
@ -590,7 +616,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
|||||||
} else if (aidStr.contains("A000000003")) {
|
} else if (aidStr.contains("A000000003")) {
|
||||||
configPaywaveParameters();
|
configPaywaveParameters();
|
||||||
} else if (aidStr.contains("A000000333")) {
|
} else if (aidStr.contains("A000000333")) {
|
||||||
configureQuickPassParamerter();
|
// configureQuickPassParamerter();
|
||||||
} else if (aidStr.contains("A000000541")) {
|
} else if (aidStr.contains("A000000541")) {
|
||||||
configPureContactlessParameter();
|
configPureContactlessParameter();
|
||||||
} else if (aidStr.contains("A000000065")) {
|
} else if (aidStr.contains("A000000065")) {
|
||||||
@ -653,6 +679,17 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
|||||||
|
|
||||||
|
|
||||||
cardNo = cardInfoEntity.getCardNo();
|
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) {
|
if (mPayDetail.getCardType() == CardTypeX.NFC.value) {
|
||||||
cardNum.postValue(cardInfoEntity.getCardNo());
|
cardNum.postValue(cardInfoEntity.getCardNo());
|
||||||
mPayDetail.setCardNo(cardInfoEntity.getCardNo());
|
mPayDetail.setCardNo(cardInfoEntity.getCardNo());
|
||||||
@ -824,7 +861,12 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
|
|||||||
//
|
//
|
||||||
case SdkResult.Emv_Cancel:// Transaction Cancel
|
case SdkResult.Emv_Cancel:// Transaction Cancel
|
||||||
// //user 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;
|
break;
|
||||||
//
|
//
|
||||||
// case SdkResult.Emv_Offline_Declined: //
|
// case SdkResult.Emv_Offline_Declined: //
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user