5th fix for see phone

This commit is contained in:
kizzy 2026-02-20 10:53:40 +07:00
parent 4aab58d0bf
commit 538ae41938
4 changed files with 46 additions and 15 deletions

View File

@ -197,6 +197,17 @@ public class EmvTransactionFragment extends DataBindingFragment {
break;
case READ_CARD:
isCardInserted(new CardDetectCallback() {
@Override
public void onComplete() {
sharedViewModel.setIsFallback(true);
navigateToCheckCard();
}
});
break;
case SEE_PHONE:
isCardTaped("Please check your phone!",new CardDetectCallback() {
@Override
public void onComplete() {
@ -204,7 +215,10 @@ public class EmvTransactionFragment extends DataBindingFragment {
navigateToCheckCard();
}
});
break;
case OTHER_INTERFACE:
sharedViewModel.set_errorFragmentMsg("Please use other interface!");
navigateToError();
break;
case PIN_PAD_CANCEL:
navigateToMain();

View File

@ -176,9 +176,16 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements
case EMV_SUCCESS_OFFLINE:
transResult.postValue(TransResultStatus.OFFLINE_SUCCESS);
break;
case EMV_FAILURE_OFFLINE:
transResult.postValue(TransResultStatus.OFFLINE_FAILURE);
break;
case EMV_SEE_PHONE:
emvResultStatus.postValue(EmvResultStatus.SEE_PHONE);
break;
case EMV_OTHER_INTERFACE:
emvResultStatus.postValue(EmvResultStatus.OTHER_INTERFACE);
break;
}
}
@ -204,12 +211,13 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements
} else if (mProcessStep == EMV_CONFIRM_CARD_NO) {
emvHandler.onSetConfirmCardNoResponse(false);
} else if (mProcessStep == EMV_CERT_VERIFY) {
// importCertStatus(1);
// importCertStatus(1);
} else if (mProcessStep == PIN_ERROR) {
emvHandler.onSetPinInputResponse(false, false);
} else if (mProcessStep == EMV_ONLINE_PROCESS) {
importOnlineProcess(SdkResult.Success, new EmvOnlineResultEntity());
} else if (mProcessStep == EMV_SIGNATURE) {
// emvHandler.
// importSignatureStatus(1);
} else if (mProcessStep == EMV_SHOW_PIN_PAD) {
emvHandler.onSetPinInputResponse(false, false);

View File

@ -28,5 +28,7 @@ public enum EmvResultStatus {
OFFLINE_DECLINE,
CONFIRM_CODE_VERIFY,
MPU_CARD
MPU_CARD,
SEE_PHONE,
OTHER_INTERFACE
}

View File

@ -66,6 +66,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Locale;
@ -157,6 +158,8 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
protected static final int EMV_FAILURE_ONLINE = 16;
protected static final int EMV_SUCCESS_OFFLINE = 17;
protected static final int EMV_FAILURE_OFFLINE = 18;
protected static final int EMV_SEE_PHONE = 19;
protected static final int EMV_OTHER_INTERFACE = 22;
protected static final int EMV_TRANS_FAIL = 999;
protected static final int REMOVE_CARD = 1000;
private String oldPin = "";
@ -638,6 +641,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
mProcessStep = EMV_APP_SELECT;
LogUtil.d(TAG, "onWaitAppSelect :");
String[] candidateNames = getCandidateNames(list);
LogUtil.d(TAG, "onWaitAppSelect :" + Arrays.toString(candidateNames));
mHandler.obtainMessage(EMV_APP_SELECT, candidateNames).sendToTarget();
}
@ -709,6 +713,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
public void onContactlessTapCardAgain() {
LogUtil.d(TAG, "onReadCardAgain");
emvHandler.onSetContactlessTapCardResponse(true);
mHandler.sendEmptyMessage(EMV_TRY_AGAIN);
//this method only used for EMV contactless card if the host response the script. Such as paywave , AMEX...
@ -788,7 +793,6 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
switch (retCode) {
case SdkResult.Emv_Success_Arpc_Fail:
case SdkResult.Success:
case SdkResult.Emv_Declined:
case SdkResult.Emv_Script_Fail:
mHandler.postDelayed(new Runnable() {
@Override
@ -815,22 +819,24 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
case SdkResult.Emv_Candidatelist_Empty:// Application have no aid list
case SdkResult.Emv_FallBack:// FallBack ,chip card reset failed
//fallback process
emvResultStatus.postValue(EmvResultStatus.READ_CARD_RETRY);
break;
// case SdkResult.Emv_Arpc_Fail: //
case SdkResult.Emv_Declined:
case SdkResult.Emv_Arpc_Fail: //
//// case SdkResult.Emv_Declined:
// //online decline ,if it is in second gac, application should decide if it is need reversal the transaction
// break;
break;
//
// case SdkResult.Emv_Cancel:// Transaction Cancel
case SdkResult.Emv_Cancel:// Transaction Cancel
// //user cancel
// break;
mHandler.obtainMessage(EMV_ERROR, retCode, retCode, "Canceled").sendToTarget();
break;
//
//// case SdkResult.Emv_Offline_Declined: //
//// //offline decline
//// offlineDenial();
//// break;
// case SdkResult.Emv_Offline_Declined: //
// //offline decline
// offlineDenial();
// break;
//
// case SdkResult.Emv_Card_Block: //Card Block
// //card is blocked
@ -849,11 +855,12 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
// break;
case SdkResult.Emv_Other_Interface:
emvResultStatus.postValue(EmvResultStatus.READ_CARD_NO_APP);
mHandler.sendEmptyMessage(EMV_OTHER_INTERFACE);
break;
case SdkResult.Emv_Plz_See_Phone:
mHandler.sendEmptyMessage(EMV_TRY_AGAIN);
mHandler.sendEmptyMessage(EMV_SEE_PHONE);
//see phone flow
//prompt a dialog to user to check phone-->search contactless card(another card) -->start new emvProcess again
break;