Compare commits

...

No commits in common. "mpu_latest" and "main" have entirely different histories.

400 changed files with 495 additions and 1758 deletions

File diff suppressed because one or more lines are too long

View File

@ -13,12 +13,6 @@
</DropdownSelection>
<DialogSelection />
</SelectionState>
<SelectionState runConfigName="testVoidPacket()">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
<SelectionState runConfigName="ExampleInstrumentedTest">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>

View File

@ -6,7 +6,7 @@
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="17 (2)" />
<option name="gradleJvm" value="temurin-17" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="temurin-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

View File

@ -11,11 +11,11 @@ android {
compileSdk 34
defaultConfig {
applicationId "com.utsmm.kbz" //mpu
applicationId "com.utsmm.kbz"
minSdk 24
targetSdk 33
versionCode 8
versionName "1.08"
versionCode 5
versionName "1.05"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@ -196,10 +196,6 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.3.0'
androidTestImplementation 'androidx.test:core:1.5.0'
androidTestImplementation 'androidx.test:runner:1.5.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
// Add Mockito dependency for mocking
testImplementation 'org.mockito:mockito-core:3.12.4'
androidTestImplementation 'org.mockito:mockito-android:3.12.4'

Binary file not shown.

View File

@ -4,15 +4,15 @@
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.utsmm.kbz.mpu",
"applicationId": "com.utsmm.kbz",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 8,
"versionName": "1.08",
"versionCode": 5,
"versionName": "1.05",
"outputFile": "app-release.apk"
}
],

View File

@ -10,29 +10,6 @@ import org.junit.runner.RunWith;
import static org.junit.Assert.*;
import com.sunmi.pay.hardware.aidl.AidlConstants;
import com.utsmm.kbz.util.MockData;
import com.utsmm.kbz.util.TransactionUtil;
import com.utsmyanmar.checkxread.model.CardDataX;
import com.utsmyanmar.checkxread.util.CardTypeX;
import com.utsmyanmar.paylibs.Constant;
import com.utsmyanmar.paylibs.isobuilder.ISOMode;
import com.utsmyanmar.paylibs.isobuilder.builderx.ISOMsgX;
import com.utsmyanmar.paylibs.isobuilder.builderx.ISOVersion;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.TradeData;
import com.utsmyanmar.paylibs.model.enums.TransCVM;
import com.utsmyanmar.paylibs.utils.LogUtil;
import com.utsmyanmar.paylibs.utils.MessageType;
import com.utsmyanmar.paylibs.utils.core_utils.ByteUtil;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.enums.HostName;
import com.utsmyanmar.paylibs.utils.iso_utils.BitmapConfig;
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType;
import com.utsmyanmar.paylibs.utils.params.Params;
import java.util.Locale;
/**
* Instrumented test, which will execute on an Android device.
*
@ -46,131 +23,4 @@ public class ExampleInstrumentedTest {
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.utsmm.kbz", appContext.getPackageName());
}
@Test
public void testVoidPacket() {
CardDataX cardDataX = MockData.getInstance().generateMPUCard();
TradeData tradeData = TransactionUtil.getInstance().initMPUTransaction(cardDataX, CardTypeX.IC);
String bitmap = BitmapConfig.MPU_NEW_VOID;
MessageType messageType = MessageType.FINANCIAL;
ISOMsgX isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1987, ISOMode.ONLY_HEADER, HostName.FINEXUS)
.build();
TradeData transTradeData = setUpRebuildTransactions(tradeData, TransactionsType.VOID, HostName.FINEXUS);
transTradeData.getPayDetail().setAmount(50000);
PayDetail transPayDetail = transTradeData.getPayDetail();
byte[] sendBytes;
try {
sendBytes = isoMsgX.buildISOPackets(transTradeData, bitmap, messageType);
System.out.println("Hex Str : "+ ByteUtil.bytes2HexStr(sendBytes));
} catch (Exception e) {
e.printStackTrace();
}
}
private TradeData setUpRebuildTransactions(TradeData tradeData, TransactionsType transactionsType, HostName hostName) {
LogUtil.d(Constant.TAG, "Starting Online Transaction--" + hostName + "--" + transactionsType);
TradeData newTrade = Params.newTrade(true);
PayDetail newPay = newTrade.getPayDetail();
PayDetail oldPay = tradeData.getPayDetail();
newPay.setCardType(100);
newPay.setPINCipher("");
newPay.setHostName(hostName.name);
newPay.setTransType(transactionsType.name);
newPay.setProcessCode(transactionsType.processCode);
newPay.setCardNo(oldPay.getCardNo());
newPay.setCardHolderName(oldPay.getCardHolderName());
newPay.setEXPDate(oldPay.getEXPDate());
newPay.setTradeDate(oldPay.getTradeDate());
newPay.setTradeTime(oldPay.getTradeTime());
newPay.setAmount(oldPay.getAmount());
newPay.setTransactionType(transactionsType.value);
newPay.setAccountType(oldPay.getAccountType());
newPay.setCardInfo(oldPay.getCardInfo());
newPay.setSettlementEnabled(SystemParamsOperation.getInstance().getSettlementStatus());
// added on Nov, 13 2024
newPay.setICC55(oldPay.getICC55());
if(newPay.getICC55() != null && !newPay.getICC55().isEmpty()) {
newPay.setAppLabel(oldPay.getAppLabel());
newPay.setAppName(oldPay.getAppName());
newPay.setTSI(oldPay.getTSI());
newPay.setAID(oldPay.getAID());
newPay.setArqC(oldPay.getArqC());
newPay.setTVR(oldPay.getTVR());
}
if(transactionsType != TransactionsType.PRE_AUTH_COMPLETE) {
newPay.setTradeDateTime(oldPay.getTradeDateTime());
}
if (transactionsType == TransactionsType.VOID || transactionsType == TransactionsType.REFUND) {
String field60;
if(hostName == HostName.BPC) {
field60 = String.format(Locale.getDefault(), "%010d00", oldPay.getAmount());
} else {
field60 = String.format(Locale.getDefault(), "%012d", oldPay.getAmount());
}
// String field60 = String.format(Locale.getDefault(), "%010d00", oldPay.getAmount());
newPay.setReferNo(oldPay.getReferNo());
newPay.setTransCVM(TransCVM.SIGNATURE);
newTrade.setField60(field60);
} else if (transactionsType == TransactionsType.PRE_AUTH_VOID) {
newPay.setCardType(oldPay.getCardType());
newPay.setCustomOrderNo(oldPay.getVoucherNo());
newPay.setReferNo(oldPay.getReferNo());
newPay.setCardInfo(oldPay.getCardInfo());
newPay.setPINCipher(oldPay.getPINCipher());
newPay.setTempKSN(oldPay.getTempKSN());
newPay.setTransCVM(TransCVM.SIGNATURE);
// for manual entry reversal which need de 35
} else if (transactionsType == TransactionsType.TIP_ADJUSTMENT ) {
newPay.setReferNo(oldPay.getReferNo());
newPay.setApprovalCode(oldPay.getApprovalCode());
} else if (transactionsType == TransactionsType.PRE_AUTH_COMPLETE) {
newPay.setCardType(oldPay.getCardType());
newPay.setCardInfo(oldPay.getCardInfo());
newPay.setPINCipher(oldPay.getPINCipher());
newPay.setReferNo(oldPay.getReferNo());
newPay.setTempKSN(oldPay.getTempKSN());
} else if (transactionsType == TransactionsType.PRE_AUTH_COMPLETE_VOID) {
newPay.setVoucherNo(oldPay.getVoucherNo());
newPay.setCustomOrderNo(oldPay.getVoucherNo());
newPay.setReferNo(oldPay.getReferNo());
newPay.setCardInfo(oldPay.getCardInfo());
/*
* new requirements */
newPay.setCardType(AidlConstants.CardType.IC.getValue());
newPay.setPINCipher("55");
newPay.setTransCVM(TransCVM.SIGNATURE);
}
if(oldPay.getAccountType().equals("MPU")){
// newPay.setIsFreeSign(true);
newPay.setTransCVM(TransCVM.SIGNATURE);
}
newTrade.setPayDetail(newPay);
return newTrade;
}
}

View File

@ -46,15 +46,14 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme.NoActionBar">
android:theme="@style/AppTheme.NoActionBar"
>
<!-- android:manageSpaceActivity="com.utsmyanmar.upos.config.UTSManageSpaceActivity"-->
<!-- <activity-->
<!-- android:screenOrientation="portrait"-->
<!-- android:name=".config.UTSManageSpaceActivity"/>-->
<activity android:name="com.utsmm.kbz.MainActivity"
android:exported="true"
android:showWhenLocked="true"
android:turnScreenOn="true">
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

@ -382,32 +382,6 @@ public class MainActivity extends AppCompatActivity implements
SystemParamsOperation.getInstance().setSetupEcr(false);
SystemParamsOperation.getInstance().setDownloadedParams(false);
handleAutoSettlementIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
handleAutoSettlementIntent(intent);
}
private void handleAutoSettlementIntent(Intent intent) {
if (intent == null) return;
boolean auto = intent.getBooleanExtra("AUTO_SETTLEMENT", false);
if (!auto) return;
com.utsmyanmar.paylibs.model.PayDetail payDetail = (com.utsmyanmar.paylibs.model.PayDetail) intent.getSerializableExtra("EXTRA_PAY_DETAIL");
if (payDetail != null) {
sharedViewModel.payDetail.setValue(payDetail);
sharedViewModel.transactionsType.setValue(com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.SETTLEMENT);
try {
navController.navigate(R.id.transactionResultFragment);
} catch (Exception e) {
LogUtil.e(TAG, "Navigation error: " + e.getMessage());
}
}
}
@Override

View File

@ -36,7 +36,6 @@ import com.utsmyanmar.ecr.data.model.Transactions;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.print.PrintHelper;
import com.utsmyanmar.paylibs.print.printx.PrintXReceipt;
import com.utsmyanmar.paylibs.utils.POSUtil;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.enums.CurrencyType;
@ -135,8 +134,6 @@ public class MainFragment extends DataBindingFragment {
sharedViewModel.setAmountExist(false);
sharedViewModel.setCardDataExist(false);
sharedViewModel.setTransMenu(null);
PrintXReceipt.getInstance().setSignatureBitmap(null);
updateButtonStatus();
delayFunctionCall(this::checkTerminalStatus);
@ -295,7 +292,7 @@ public class MainFragment extends DataBindingFragment {
private void updateButtonStatus() {
mainViewModel.settlementStatus.setValue(SystemParamsOperation.getInstance().getSettlementStatus());
mainViewModel.kPayStatus.setValue(SystemParamsOperation.getInstance().getQRPayStatus());
mainViewModel.kPayStatus.setValue(SystemParamsOperation.getInstance().getWavePayStatus());
}
private void setUpCarouselImages() {
@ -847,7 +844,6 @@ public class MainFragment extends DataBindingFragment {
} else {
processBatch();
sharedViewModel.transactionsType.setValue(TransactionsType.SALE);
sharedViewModel.setTransMenu(TransMenu.SALE);
sharedViewModel.processCode.postValue(ProcessCode.SALE_PURCHASE + ProcessCode.SMART + ProcessCode.TO_ACCOUNT);
navigateToAmount();
}

View File

@ -94,7 +94,7 @@ public class MainViewModel extends ViewModel {
settlementStatus.setValue(SystemParamsOperation.getInstance().getSettlementStatus());
kPayStatus.setValue(SystemParamsOperation.getInstance().getQRPayStatus());
kPayStatus.setValue(SystemParamsOperation.getInstance().getWavePayStatus());
disabledMsg.setValue(SystemParamsOperation.getInstance().getDisabledMsg());
}

View File

@ -5,6 +5,5 @@ public enum CardTransactionType {
MPU,
EMV,
MAG,
FALLBACK,
MOCK
FALLBACK
}

View File

@ -7,7 +7,6 @@ import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.text.TextUtils;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
@ -24,7 +23,8 @@ import javax.inject.Inject;
import dagger.hilt.android.AndroidEntryPoint;
import com.utsmyanmar.paylibs.utils.LogUtil;
@AndroidEntryPoint
// Temporarily disabled Hilt
// @AndroidEntryPoint
public class SmileSettleService extends Service {
private static final String TAG = SmileSettleService.class.getSimpleName();
@ -157,131 +157,7 @@ public class SmileSettleService extends Service {
// }catch (Exception e){
// e.printStackTrace();
// }
if(com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation.getInstance().getSettlementStatus()) {
final com.utsmyanmar.paylibs.isobuilder.builderx.ISOMsgX isoMsgX = new com.utsmyanmar.paylibs.isobuilder.builderx.ISOMsgX.ISOMsgXBuilder(
com.utsmyanmar.paylibs.isobuilder.builderx.ISOVersion.VERSION_1993,
com.utsmyanmar.paylibs.isobuilder.ISOMode.BOTH_HEADER_TPDU,
com.utsmyanmar.paylibs.utils.enums.HostName.BPC
).build();
repository.getSettlementPOS().observeForever(list -> {
int saleCount = 0;
long saleAmount = 0L;
int preCount = 0;
long preAmount = 0L;
int refundCount = 0;
long refundAmount = 0L;
int caCount = 0;
long caAmount = 0L;
if(list != null && !list.isEmpty()) {
for (com.utsmyanmar.paylibs.model.PayDetail pay : list) {
if (pay.getTransactionType() == com.utsmyanmar.paylibs.utils.iso_utils.TransactionType.SALE && !pay.isCanceled) {
saleCount++;
saleAmount += pay.getAmount();
} else if (pay.getTransactionType() == com.utsmyanmar.paylibs.utils.iso_utils.TransactionType.PRE_SALE_COMPLETE && !pay.isCanceled) {
preCount++;
preAmount += pay.getAmount();
} else if (pay.getTransactionType() == com.utsmyanmar.paylibs.utils.iso_utils.TransactionType.REFUND) {
refundCount++;
refundAmount += pay.getAmount();
} else if (pay.getTransactionType() == com.utsmyanmar.paylibs.utils.iso_utils.TransactionType.CASH_ADVANCE) {
caCount++;
caAmount += pay.getAmount();
}
}
}
com.utsmyanmar.paylibs.model.TradeData tradeData = com.utsmyanmar.paylibs.utils.params.Params.newTrade(true);
com.utsmyanmar.paylibs.model.PayDetail payDetail = tradeData.getPayDetail();
String bitmap = com.utsmyanmar.paylibs.utils.iso_utils.BitmapConfig.BPC_SETTLEMENT;
payDetail.setTransType(com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.SETTLEMENT.name);
payDetail.setTransactionType(com.utsmyanmar.paylibs.utils.iso_utils.TransactionType.SETTLEMENT);
payDetail.setProcessCode(com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.SETTLEMENT.processCode);
payDetail.setBatchNo(com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation.getInstance().getCurrentBatchNum());
com.utsmyanmar.paylibs.model.SettleData settleData = new com.utsmyanmar.paylibs.model.SettleData(
saleCount,
saleAmount,
preCount,
preAmount,
refundCount,
refundAmount,
caCount,
caAmount
);
payDetail.setSettleDataObj(settleData);
long totalAmount = saleAmount + preAmount + refundAmount + caAmount;
String settlementData;
if (refundAmount != 0L) {
long creditTotal = saleAmount + preAmount + caAmount;
long subTotal = creditTotal - refundAmount;
if (subTotal < 0L) {
settlementData = "D" + String.format(java.util.Locale.getDefault(), "%012d", Math.abs(subTotal));
} else {
settlementData = "C" + String.format(java.util.Locale.getDefault(), "%012d", subTotal);
}
} else {
settlementData = "C" + String.format(java.util.Locale.getDefault(), "%012d", totalAmount);
}
payDetail.setSettleData(settlementData);
payDetail.setAmount(totalAmount);
tradeData.setPayDetail(payDetail);
tradeData.setField60(com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation.getInstance().getCurrentBatchNum());
byte[] sendBytes = isoMsgX.buildISOPackets(tradeData, bitmap, com.utsmyanmar.paylibs.utils.MessageType.SETTLEMENT);
com.utsmyanmar.paylibs.network.ISOSocket.getInstance().enqueue(sendBytes, sendBytes.length, false, new com.utsmyanmar.paylibs.network.ISOCallback() {
@Override
public void onReceive(byte[] bytes, int length) {
java.util.Map<String, com.utsmyanmar.paylibs.model.MsgField> responseMap = isoMsgX.parseISOPackets(bytes, length);
if (responseMap != null) {
String resultStr = "";
try {
resultStr = responseMap.get("F039").getDataStr();
} catch (NullPointerException e) {
e.printStackTrace();
payDetail.setIsNeedReversal(true);
return;
}
payDetail.setTradeAnswerCode(resultStr);
if (TextUtils.equals(resultStr, com.utsmyanmar.paylibs.Constant.ANSWER_CODE_ACCEPT) || TextUtils.equals(resultStr, com.utsmyanmar.paylibs.Constant.ANSWER_CODE_APPROVED)) {
payDetail.setIsNeedReversal(false);
} else if (TextUtils.equals(resultStr, "95") || TextUtils.equals(resultStr, "095")) {
payDetail.setIsNeedReversal(true);
}
}
}
@Override
public void onError(String msg) {
com.utsmyanmar.paylibs.network.ISOSocket.getInstance().switchIp();
com.utsmyanmar.paylibs.network.ISOSocket.getInstance().enqueue(sendBytes, sendBytes.length, false, this);
}
@Override
public void onComplete() {
if(list != null && !list.isEmpty()) {
for (com.utsmyanmar.paylibs.model.PayDetail p : list) {
repository.deletePayDetail(p);
}
}
repository.insertPayDetail(payDetail);
Intent uiIntent = new Intent(getApplicationContext(), com.utsmm.kbz.MainActivity.class);
uiIntent.putExtra("AUTO_SETTLEMENT", true);
uiIntent.putExtra("EXTRA_TRANSACTION_TYPE", com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.SETTLEMENT.value);
uiIntent.putExtra("EXTRA_PAY_DETAIL", payDetail);
uiIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(uiIntent);
}
});
});
}
return START_NOT_STICKY;
}

View File

@ -106,13 +106,9 @@ public class CardWaitingFragment extends DataBindingFragment implements DataBind
public void onClickManualEntry() {
routeId = R.id.action_cardWaitingFragment_to_manualEntryFragment;
safeNavigateToRouteId();
}
// showSingleInfoDialogAutoHide("Coming Soon!");
public void onClickTap() {
cardReadViewModel.setCardTransactionType(CardTransactionType.MOCK);
routeId = R.id.action_cardWaitingFragment_to_processingCardFragment;
routeId = R.id.action_cardWaitingFragment_to_manualEntryFragment;
safeNavigateToRouteId();
}
}

View File

@ -220,7 +220,6 @@ public class InputRRNFragment extends DataBindingFragment {
newPay = transProcessViewModel.getPayDetail();
}
newPay.setReferNo(rrnNo);
if(sharedViewModel.getTransMenu().getValue() == TransMenu.PRE_AUTH_FULL_VOID) {
newPay.setAmount(payDetail.getAmount());
@ -312,9 +311,7 @@ public class InputRRNFragment extends DataBindingFragment {
}
newPay.setReferNo(rrnNo);
newPay.setApprovalCode(payDetail.getApprovalCode());
newPay.setTradeTime(payDetail.getTradeTime());
newPay.setTradeDate(payDetail.getTradeDate());
if(newPay.getAmount() > payDetail.getAmount()) {
newPay.setTradeAnswerCode("C1"); // ---> refer to BaseErrorCode class// ,
newPay.setTransType(sharedViewModel.transactionsType.getValue().name);

View File

@ -7,7 +7,6 @@ import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.utsmm.kbz.util.MockData;
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.checkxread.model.CardDataX;
@ -42,8 +41,6 @@ public class ProcessingCardFragment extends DataBindingFragment {
private TransProcessViewModel transProcessViewModel;
private PinPadViewModel pinPadViewModel;
private EmvTransactionProcessViewModel emvTransactionViewModel;
private int routeId;
@Override
@ -105,24 +102,9 @@ public class ProcessingCardFragment extends DataBindingFragment {
break;
case MAG: readMAGStripe(false,true);
break;
case MOCK: mockMPUCard();
break;
}
}
private void mockMPUCard() {
LogUtil.d(TAG,"initialize mock card data...");
routeId = R.id.action_processingCardFragment_to_pinPadFragment;
transProcessViewModel.transType.setValue(sharedViewModel.transactionsType.getValue());
pinPadViewModel.transType.setValue(sharedViewModel.transactionsType.getValue());
CardDataX cardDataX = MockData.getInstance().generateMPUCard();
TradeData tradeData = TransactionUtil.getInstance().initMPUTransaction(cardDataX, CardTypeX.IC);
transProcessViewModel.setTradeData(tradeData);
pinPadViewModel.setTradeData(tradeData);
sharedViewModel.setCardDataExist(true);
safeNavigateToRouteId();
}
private void readMPUCard() {
cardReadViewModel.startReadXProcess(MPUXReadCard.getInstance(), new ReadCardResultX() {

View File

@ -254,6 +254,7 @@ public class ProcessingFragment extends DataBindingFragment {
case FAIL:
case SUCCESS:
case OFFLINE_SUCCESS:
LogUtil.d(TAG,"This was called!");
if(SystemParamsOperation.getInstance().getDemoStatus()) {
delayFunctionCall(()->{
// updateData();

View File

@ -16,8 +16,6 @@ import com.utsmm.kbz.R;
import com.utsmm.kbz.config.Constants;
import com.utsmm.kbz.ui.core_viewmodel.SharedViewModel;
import com.utsmyanmar.paylibs.print.printx.PrintX;
import com.utsmyanmar.paylibs.print.printx.PrintXReceipt;
import com.utsmyanmar.paylibs.utils.LogUtil;
public class SignatureFragment extends DataBindingFragment {
@ -140,7 +138,6 @@ public class SignatureFragment extends DataBindingFragment {
// Handle digital signature
if (isSigned) {
sharedViewModel.signBitmap = mSignaturePad.getSignatureBitmap();
PrintXReceipt.getInstance().setSignatureBitmap(mSignaturePad.getSignatureBitmap());
LogUtil.d(TAG, "Digital signature confirmed and stored");
callNextScreen();
} else {
@ -149,8 +146,8 @@ public class SignatureFragment extends DataBindingFragment {
} else {
// Handle manual signature on paper
sharedViewModel.signBitmap = null; // No digital signature
PrintXReceipt.getInstance().setSignatureBitmap(null);
LogUtil.d(TAG, "Manual signature on paper selected - no digital signature stored");
showSingleInfoDialog("Please sign on the printed receipt manually and proceed.");
callNextScreen();
}
}

View File

@ -42,13 +42,12 @@ import java.io.IOException;
import javax.inject.Inject;
import dagger.hilt.android.AndroidEntryPoint;
import retrofit2.HttpException;
import com.utsmyanmar.paylibs.utils.LogUtil;
// Temporarily disabled Hilt
@AndroidEntryPoint
// @AndroidEntryPoint
public class TransactionResultFragment extends DataBindingFragment implements DataBindingFragment.BackPressCallback {
private static final String TAG = TransactionResultFragment.class.getSimpleName();
@ -147,8 +146,6 @@ public class TransactionResultFragment extends DataBindingFragment implements Da
PayDetail payDetail = sharedViewModel.payDetail.getValue();
if (payDetail == null) {
navigateToMainScreen();
return;

View File

@ -25,8 +25,6 @@ import java.util.HashSet;
import javax.inject.Inject;
import io.reactivex.rxjava3.core.Single;
public class CardReadViewModel extends ViewModel {
@ -48,7 +46,7 @@ public class CardReadViewModel extends ViewModel {
public SingleLiveEvent<Integer> cardTypeData = new SingleLiveEvent<>();
public SingleLiveEvent<PayDetail> payDetail = new SingleLiveEvent<>();
public SingleLiveEvent<CardReadStatus> readStatus = new SingleLiveEvent<>();
public SingleLiveEvent<String> checkCardAlertMsg = new SingleLiveEvent<>();
@ -97,6 +95,96 @@ public class CardReadViewModel extends ViewModel {
checkCardAlertMsg.setValue(null);
}
// public void initCardReadProcess(int allType, int timeOutInSec, ReadCardResult readCardResult) {
// ReadCardProcess.getInstance().startReadCard(allType,"",timeOutInSec,false).onStartReadCardProcess(new CheckCardListener() {
// @Override
// public void onCheckCardSuccess(int cardType, MPUCardData mpuCardData, CardScheme cardScheme) {
//
// cardData.postValue(mpuCardData);
// cardSchemeData.postValue(cardScheme);
// cardTypeData.postValue(cardType);
// PayDetail payDetailData = new PayDetail();
// payDetailData.setCardNo(mpuCardData.getPan());
// payDetailData.setEXPDate(mpuCardData.getExp());
// payDetailData.setAccountType(cardScheme.name());
// payDetailData.setCardType(cardType);
// payDetailData.setCardHolderName(mpuCardData.getCardHolderName());
// CardInfo cardInfo = new CardInfo();
// MAGCardInfo magCardInfo = new MAGCardInfo();
// LogUtil.d(TAG,"track 2 : "+mpuCardData.getTrack2());
// magCardInfo.setTrack2Cipher(mpuCardData.getTrack2());
// cardInfo.setMAGCardInfo(magCardInfo);
// payDetailData.setCardInfo(cardInfo);
//
// payDetail.postValue(payDetailData);
//
// mainThreadHandler.post(readCardResult::onSuccess);
//// readCardResult.onSuccess();
//
// }
//
// @Override
// public void onCheckCardFail(int code, String message) {
//
// if(code == -2801) {
// mainThreadHandler.post(readCardResult::onCommunicationError);
//// readCardResult.onCommunicationError();
// } else {
// mainThreadHandler.post(() -> readCardResult.onError(code,message));
//// readCardResult.onError(code,message);
// }
//
// }
// });
// }
//
// public SingleLiveEvent<CardReadStatus> startReadProcess(int allType,int timeOutInSec){
//
// ReadCardProcess.getInstance().startReadCard(allType,"",timeOutInSec,false).onStartReadCardProcess(new CheckCardListener() {
// @Override
// public void onCheckCardSuccess(int cardType, MPUCardData mpuCardData, CardScheme cardScheme) {
// flag.postValue(true);
// cardData.postValue(mpuCardData);
// cardSchemeData.postValue(cardScheme);
// cardTypeData.postValue(cardType);
// PayDetail payDetailData = new PayDetail();
// payDetailData.setCardNo(mpuCardData.getPan());
// payDetailData.setEXPDate(mpuCardData.getExp());
// payDetailData.setAccountType(cardScheme.name());
// payDetailData.setCardType(cardType);
// payDetailData.setCardHolderName(mpuCardData.getCardHolderName());
// CardInfo cardInfo = new CardInfo();
// MAGCardInfo magCardInfo = new MAGCardInfo();
// LogUtil.d(TAG,"track 2 : "+mpuCardData.getTrack2());
// magCardInfo.setTrack2Cipher(mpuCardData.getTrack2());
// cardInfo.setMAGCardInfo(magCardInfo);
// payDetailData.setCardInfo(cardInfo);
//
// payDetail.postValue(payDetailData);
//
// readStatus.postValue(CardReadStatus.SUCCESS);
//
//
// }
//
// @Override
// public void onCheckCardFail(int code, String message) {
//
// readStatus.postValue(CardReadStatus.FAIL);
// // this action just need to do once because there's too many reason to get fail
// if(!oneTimeFlag){
// errorCode.postValue(code+":"+message);
// flag.postValue(false);
// cardSchemeData.postValue(CardScheme.UNK);
// oneTimeFlag = true;
// }
//
// }
// });
//
// return readStatus;
// }
public void resetOneTimeFlag(){
oneTimeFlag = false;
}
@ -105,5 +193,19 @@ public class CardReadViewModel extends ViewModel {
NexGoSDK.getInstance().cancelCheckCard();
}
// public void checkCard(){
// int allType = AidlConstants.CardType.NFC.getValue() | AidlConstants.CardType.IC.getValue() | AidlConstants.CardType.MAGNETIC.getValue();
// ReadCardProcess.getInstance().startReadCard(allType,"",60,false).onStartReadCardProcess(new CheckCardListener() {
// @Override
// public void onCheckCardSuccess(int cardType, MPUCardData mpuCardData, CardScheme cardScheme) {
// System.out.println("Success");
// }
//
// @Override
// public void onCheckCardFail(int code, String message) {
//
// System.out.println("Failed");
// }
// });
// }
}

View File

@ -492,9 +492,9 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements
private void handleTransactionProcess() {
String cardNo = mPayDetail.getCardNo();
// if (cardNo == null || TextUtils.equals(cardNo, "")) {
if (cardNo == null || TextUtils.equals(cardNo, "")) {
getCardInfo();
// }
}
getPayWaveData();
getF055Data();
if(transType.getValue() == TransactionsType.PRE_AUTH_COMPLETE || transType.getValue() == TransactionsType.PRE_AUTH_VOID || transType.getValue() == TransactionsType.REFUND ) {

View File

@ -185,15 +185,6 @@ public class SharedViewModel extends ViewModel {
printReceiptButtons.postValue(value);
}
public void setTransactionsType(TransactionsType transactionsType) {
this.transactionsType.setValue(transactionsType);
}
public SingleLiveEvent<TransactionsType> getTransactionsType() {
return transactionsType;
}
public void setPrintReceiptMsg(String msg) { this.printReceiptMsg.setValue(msg);}
public void postPrintReceiptMsg(String msg) { this.printReceiptMsg.postValue(msg);}
public void setPrintStatus(PrintStatus printStatus) { this.printStatus.setValue(printStatus); }
public void postPrintStatus(PrintStatus printStatus) { this.printStatus.postValue(printStatus); }

View File

@ -135,7 +135,7 @@ public class DashboardTransFragment extends DataBindingFragment {
} else if (checkTid()) {
showDeclineDialog("Please Download Config!");
} else {
sharedViewModel.setTransactionsType(TransactionsType.VOID);
sharedViewModel.transactionsType.setValue(TransactionsType.VOID);
// sharedViewModel.transMenu.postValue(TransMenu.TRANSACTIONS);
sharedViewModel.setTransMenu(TransMenu.TRANSACTIONS);
@ -147,15 +147,16 @@ public class DashboardTransFragment extends DataBindingFragment {
public void onClickSettlement() {
sharedViewModel.settlementType.setValue(SettlementType.NORMAL);
sharedViewModel.transactionsType.setValue(TransactionsType.SETTLEMENT);
sharedViewModel.setTransMenu(TransMenu.SETTLEMENT);
sharedViewModel.setTransactionsType(TransactionsType.SETTLEMENT);
routeId = R.id.action_dashboardTransFragment_to_inputPasswordFragment;
safeRouteTo(currentId,routeId,hostId);
}
public void onClickRefund() {
sharedViewModel.setTransactionsType(TransactionsType.REFUND);
sharedViewModel.transactionsType.setValue(TransactionsType.REFUND);
routeId = R.id.action_dashboardTransFragment_to_inputPasswordFragment;
safeRouteTo(currentId,routeId,hostId);
}
@ -166,7 +167,8 @@ public class DashboardTransFragment extends DataBindingFragment {
} else if (checkTid()) {
showDeclineDialog("Please Download Config!");
} else {
sharedViewModel.setTransactionsType(TransactionsType.PRE_AUTH_SALE);
sharedViewModel.transactionsType.setValue(TransactionsType.PRE_AUTH_SALE);
routeId = R.id.action_dashboardTransFragment_to_inputAmountFragment;
safeRouteTo(currentId,routeId,hostId);
}
@ -174,7 +176,7 @@ public class DashboardTransFragment extends DataBindingFragment {
}
public void onClickPreAuthCancel () {
sharedViewModel.setTransactionsType(TransactionsType.PRE_AUTH_VOID);
sharedViewModel.transactionsType.setValue(TransactionsType.PRE_AUTH_VOID);
sharedViewModel.setTransMenu(TransMenu.PRE_AUTH_FULL_VOID);
sharedViewModel.amount.postValue(null);
routeId = R.id.action_dashboardTransFragment_to_inputPasswordFragment;
@ -183,14 +185,14 @@ public class DashboardTransFragment extends DataBindingFragment {
}
public void onClickPreAuthComp () {
sharedViewModel.setTransactionsType(TransactionsType.PRE_AUTH_COMPLETE);
sharedViewModel.transactionsType.setValue(TransactionsType.PRE_AUTH_COMPLETE);
routeId = R.id.action_dashboardTransFragment_to_inputPasswordFragment;
safeRouteTo(currentId,routeId,hostId);
}
public void onClickPreAuthCompCancel () {
sharedViewModel.setTransactionsType(TransactionsType.PRE_AUTH_COMPLETE_VOID);
sharedViewModel.transactionsType.setValue(TransactionsType.PRE_AUTH_COMPLETE_VOID);
routeId = R.id.action_dashboardTransFragment_to_inputPasswordFragment;
safeRouteTo(currentId,routeId,hostId);
@ -198,8 +200,7 @@ public class DashboardTransFragment extends DataBindingFragment {
public void onClickCashAdvance() {
sharedViewModel.setTransactionsType(TransactionsType.CASH_OUT);
sharedViewModel.setTransMenu(TransMenu.CASH_OUT);
sharedViewModel.transactionsType.setValue(TransactionsType.CASH_OUT);
routeId = R.id.action_dashboardTransFragment_to_inputAmountFragment;
safeRouteTo(currentId,routeId,hostId);

View File

@ -36,7 +36,6 @@ import com.utsmyanmar.paylibs.model.TradeData;
import com.utsmyanmar.paylibs.system.SingleLiveEvent;
import com.utsmyanmar.paylibs.utils.LogUtil;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsSettings;
import java.security.SecureRandom;
import java.util.HashMap;
@ -53,11 +52,7 @@ public class KPayViewModel extends ViewModel {
private final Repository repository;
private final String appKey = SystemParamsOperation.getInstance().getAppKey();
// private final String appKey = "UTSMMuat@2025";
private final String appId = SystemParamsOperation.getInstance().getAppId();
// private final String appId = "kp9b0794b349ae85b00c51e0677484c7";
private final String appKey = "UTSMMuat@2025";
private final ExecutorService executor = Executors.newSingleThreadExecutor();
private final Handler mainHandler = new Handler(Looper.getMainLooper());
@ -119,7 +114,7 @@ public class KPayViewModel extends ViewModel {
bizContent.put("refund_request_no", refundOrderId);
bizContent.put("merch_order_id", origOrderId);
bizContent.put("merch_code", mid);
bizContent.put("appid", appId);
bizContent.put("appid", "kp9b0794b349ae85b00c51e0677484c7");
if(!refundAmount.equals("0")) {
bizContent.put("refund_amount", refundAmount);
}
@ -143,7 +138,7 @@ public class KPayViewModel extends ViewModel {
KPayRefund.RefundRequest.RequestBody.BizContent biz =
new KPayRefund.RefundRequest.RequestBody.BizContent(
appId,
"kp9b0794b349ae85b00c51e0677484c7",
mid,
origOrderId,
refundAmount, // This can be null for original refunds
@ -165,7 +160,7 @@ public class KPayViewModel extends ViewModel {
} else {
KPayRefund.RefundRequest.RequestBody.BizContent biz =
new KPayRefund.RefundRequest.RequestBody.BizContent(
appId,
"kp9b0794b349ae85b00c51e0677484c7",
mid,
origOrderId,
refundOrderId,
@ -200,7 +195,7 @@ public class KPayViewModel extends ViewModel {
Map<String, Object> bizContent = new HashMap<>();
bizContent.put("merch_order_id", merchOrderId);
bizContent.put("merch_code", mid);
bizContent.put("appid", appId);
bizContent.put("appid", "kp9b0794b349ae85b00c51e0677484c7");
bizContent.put("trade_type", "PAY_BY_QRCODE");
bizContent.put("total_amount", amount);
bizContent.put("title", "testing");
@ -221,7 +216,7 @@ public class KPayViewModel extends ViewModel {
String sign = Sign.INSTANCE.generateSign(requestMap, appKey);
KPayQRRequest.QrRequest.RequestBody.BizContent biz = new KPayQRRequest.QrRequest.RequestBody.BizContent(
appId,
"kp9b0794b349ae85b00c51e0677484c7",
mid,
merchOrderId,
"PAY_BY_QRCODE",
@ -257,7 +252,7 @@ public class KPayViewModel extends ViewModel {
Map<String, Object> bizContentMap = new HashMap<>();
bizContentMap.put("merch_order_id", merchOrderId);
bizContentMap.put("merch_code", mid);
bizContentMap.put("appid", appId);
bizContentMap.put("appid", "kp9b0794b349ae85b00c51e0677484c7");
Map<String, Object> requestMap = new HashMap<>();
requestMap.put("timestamp", currentTime);
@ -269,7 +264,7 @@ public class KPayViewModel extends ViewModel {
String sign = Sign.INSTANCE.generateSign(requestMap, appKey);
KPayQRQueryRequest.QRQueryRequest.Request.BizContent bizContent = new KPayQRQueryRequest.QRQueryRequest.Request.BizContent(
appId,
"kp9b0794b349ae85b00c51e0677484c7",
mid,
merchOrderId
);

View File

@ -13,7 +13,6 @@ import com.nexgo.oaf.apiv3.SdkResult;
import com.nexgo.oaf.apiv3.device.pinpad.AlgorithmModeEnum;
import com.nexgo.oaf.apiv3.device.pinpad.OnPinPadInputListener;
import com.nexgo.oaf.apiv3.device.pinpad.PinAlgorithmModeEnum;
import com.nexgo.oaf.apiv3.device.pinpad.PinKeyboardModeEnum;
import com.nexgo.oaf.apiv3.device.pinpad.PinKeyboardViewModeEnum;
import com.nexgo.oaf.apiv3.device.pinpad.PinPad;
import com.nexgo.oaf.apiv3.device.pinpad.PinPadKeyCode;
@ -120,12 +119,7 @@ public class PinPadViewModel extends ViewModel {
case ON_CONFIRM_CLICK:
LogUtil.d(TAG, "ON CLICK CONFIRM");
// increasedKSN();
if(transType.getValue() == TransactionsType.PRE_AUTH_COMPLETE || transType.getValue() == TransactionsType.PRE_AUTH_VOID || transType.getValue() == TransactionsType.REFUND ) {
pinStatus.postValue(PinPadStatus.ON_NEXT_SCREEN);
} else {
pinStatus.postValue(PinPadStatus.ON_CONFIRM);
}
pinStatus.postValue(PinPadStatus.ON_CONFIRM);
break;
case ON_CANCEL_CLICK:
LogUtil.d(TAG, "ON CLICK CANCEL");
@ -323,8 +317,6 @@ public class PinPadViewModel extends ViewModel {
r.bottom = customPinPadKeyboard.getKey_ok().getHeight() + r.top;
pinpadLayout.setKeyConfirm(r);
pinPad.setPinKeyboardMode(PinKeyboardModeEnum.FIXED);
byte[] number = pinPad.setPinpadLayout(pinpadLayout);
if(number != null) {
@ -339,8 +331,6 @@ public class PinPadViewModel extends ViewModel {
byte[] panBytes = pan.substring(length - 13).getBytes(StandardCharsets.US_ASCII);
// byte[] panBytes = pan.substring(length - 13, length - 1).getBytes(StandardCharsets.US_ASCII);
pinPad.setPinKeyboardViewMode(PinKeyboardViewModeEnum.DEFAULT);
pinPad.setPinKeyboardMode(PinKeyboardModeEnum.FIXED);
// pinPad.setAlgorithmMode(AlgorithmModeEnum.DES);

View File

@ -8,9 +8,6 @@ import com.utsmyanmar.paylibs.model.PayDetail;
import javax.inject.Inject;
import dagger.hilt.android.lifecycle.HiltViewModel;
@HiltViewModel
public class PreAuthVoidViewModel extends ViewModel {
private Repository repository;

View File

@ -316,9 +316,7 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
dismissLoadingDialog();
updateData();
if (!SystemParamsOperation.getInstance().getDemoStatus()) {
// networkCutOver(); // bpc
navigateToNext();
networkCutOver();
} else {
navigateToNext();
}

View File

@ -121,7 +121,7 @@ public class SettlementViewModel extends ViewModel {
ca_count.setValue(0);
ca_amount.setValue(0L);
isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1987, ISOMode.ONLY_HEADER,HostName.FINEXUS)
isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1993, ISOMode.BOTH_HEADER_TPDU,HostName.BPC)
.build();
// setUpSettlementData();
@ -339,7 +339,7 @@ public class SettlementViewModel extends ViewModel {
HostName hostName = HostName.FINEXUS;
HostName hostName = HostName.BPC;
String field60 = SystemParamsOperation.getInstance().getCurrentBatchNum();
@ -361,26 +361,14 @@ public class SettlementViewModel extends ViewModel {
payDetail = tradeData.getPayDetail();
//
if(hostName == HostName.BPC) {
bitmap = BitmapConfig.BPC_SETTLEMENT;
} else {
bitmap = BitmapConfig.MPU_NEW_SETTLE;
}
bitmap = BitmapConfig.BPC_SETTLEMENT;
payDetail.setTransType(TransactionsType.SETTLEMENT.name);
payDetail.setTransactionType(TransactionType.SETTLEMENT);
if (!flag) {
payDetail.setProcessCode(TransactionsType.SETTLEMENT.processCode);
} else {
if(hostName == HostName.BPC) {
bitmap = BitmapConfig.BPC_SETTLEMENT_TRAILER;
payDetail.setProcessCode("910000");
} else {
bitmap = BitmapConfig.MPU_NEW_SETTLE;
payDetail.setProcessCode("960000");
}
bitmap = BitmapConfig.BPC_SETTLEMENT_TRAILER;
payDetail.setProcessCode("910000");
}
// CA:CA - CD - FT
@ -415,8 +403,7 @@ public class SettlementViewModel extends ViewModel {
payDetail.setSettleData(settlementData);
payDetail.setAmount(totalAmount);
} else {
// payDetail.setSettleData(totalSaleCount + totalSaleAmount + totalRefundCount + totalRefundAmount + totalDebitSaleCount + totalDebitSaleAmount + totalERefundCount + totalERefundAmount); //field 63 BPC
payDetail.setSettleData(totalSaleCount + totalSaleAmount + totalRefundCount + totalRefundAmount + totalDebitSaleCount + totalDebitSaleAmount ); //field 63
payDetail.setSettleData(totalSaleCount + totalSaleAmount + totalRefundCount + totalRefundAmount + totalDebitSaleCount + totalDebitSaleAmount + totalERefundCount + totalERefundAmount); //field 63
}

View File

@ -213,7 +213,6 @@ public class TMSProcessFragment extends DataBindingFragment {
CurrencyType currencyType = SystemParamsOperation.getInstance().getCurrencyType();
sharedViewModel.set_currencyText(currencyType.name);
// tmsProcessViewModel.loadEmvParameters();
// scheduleAutoSettlement();
navigateToMain();
}
});
@ -225,48 +224,4 @@ public class TMSProcessFragment extends DataBindingFragment {
}
private void scheduleAutoSettlement() {
String timeStr = SystemParamsOperation.getInstance().getClearBatchTime();
if(timeStr == null || timeStr.trim().isEmpty()) {
return;
}
String[] parts = timeStr.trim().split(":");
if(parts.length != 2) {
return;
}
int hour;
int minute;
try {
hour = Integer.parseInt(parts[0]);
minute = Integer.parseInt(parts[1]);
} catch (Exception e) {
return;
}
android.app.AlarmManager alarmManager = (android.app.AlarmManager) requireContext().getSystemService(android.content.Context.ALARM_SERVICE);
if(alarmManager == null) return;
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(java.util.Calendar.HOUR_OF_DAY, hour);
calendar.set(java.util.Calendar.MINUTE, minute);
calendar.set(java.util.Calendar.SECOND, 0);
long triggerAtMillis = calendar.getTimeInMillis();
if(System.currentTimeMillis() > triggerAtMillis) {
calendar.add(java.util.Calendar.DAY_OF_YEAR, 1);
triggerAtMillis = calendar.getTimeInMillis();
}
android.content.Intent intent = new android.content.Intent(requireContext(), com.utsmm.kbz.service.SmileAlarmReceiver.class);
android.app.PendingIntent pendingIntent = android.app.PendingIntent.getBroadcast(
requireContext(),
1001,
intent,
android.app.PendingIntent.FLAG_UPDATE_CURRENT
);
alarmManager.setRepeating(android.app.AlarmManager.RTC_WAKEUP, triggerAtMillis, android.app.AlarmManager.INTERVAL_DAY, pendingIntent);
}
}

View File

@ -1,7 +1,6 @@
package com.utsmm.kbz.util;
import com.sunmi.pay.hardware.aidlv2.AidlConstantsV2;
import com.utsmyanmar.checkxread.model.CardDataX;
import com.utsmyanmar.paylibs.model.CardInfo;
import com.utsmyanmar.paylibs.model.ICCardInfo;
import com.utsmyanmar.paylibs.model.MAGCardInfo;
@ -43,42 +42,15 @@ public class MockData {
// .cardScheme("VISA")
// .cardHolderName("U AYE")
// .iccData("5F21BLAHBLAH")
// .build();
// mockCardData = new MockCardData.Builder()
// .cardNo("9503051034047056")
// .expDate("0230")
// .cardScheme("MPU")
// .cardHolderName("KBZ Debit")
// .iccData("9503051034047056=30021015930000000000")
// .build();
// mockCardData = new MockCardData.Builder()
// .cardNo("9505050161133125")
// .expDate("0127")
// .cardScheme("MPU")
// .cardHolderName("KBZ Credit")
// .iccData("9505050161133125=27011017250000000000")
// .build();
mockCardData = new MockCardData.Builder()
.cardNo("9503712156912514")
.expDate("2912")
.cardNo("9503190006079422")
.expDate("0725")
.cardScheme("MPU")
.cardHolderName("Htin Kyaw Win")
.iccData("9503712156912514=29121010000000000000")
.cardHolderName("YOMA VALUED CUSTOMER")
.build();
// mockCardData = new MockCardData.Builder()
// .cardNo("9503742975107251")
// .expDate("0629")
// .cardScheme("MPU")
// .cardHolderName("Bank Q")
// .iccData("9503742975107251=22081010000000000000")
// .build();
// mockCardData = new MockCardData.Builder()
// .phoneNo("9794452506")
// .expDate("0425")
@ -102,15 +74,6 @@ public class MockData {
return String.valueOf(randomNumber);
}
public CardDataX generateMPUCard() {
CardDataX cardDataX = new CardDataX();
cardDataX.setPan(mockCardData.getCardNo());
cardDataX.setExp(mockCardData.getExpDate());
cardDataX.setCardHolderName(mockCardData.getCardHolderName());
cardDataX.setTrack2(mockCardData.getIccData());
return cardDataX;
}
public TradeData generateMockDataWithTime(TransactionsType transType,int cardInputType,String transDate,String transTime) {
String strDate = SystemDateTime.getMMDD();
String strTime = SystemDateTime.getHHmmss();

View File

@ -10,7 +10,6 @@ import com.utsmyanmar.baselib.network.model.sirius.SiriusMerchant;
import com.utsmyanmar.baselib.network.model.sirius.SiriusProperty;
import com.utsmyanmar.baselib.network.model.sirius.SiriusResponse;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsSettings;
import com.utsmyanmar.paylibs.utils.enums.CurrencyType;
import com.utsmm.kbz.BuildConfig;
@ -171,7 +170,7 @@ public class TMSSetupsImpl implements TMSSetups{
for (SiriusHost siriusHost: siriusHosts) {
if( siriusHost.getName().toLowerCase().contains("mmqr") || siriusHost.getName().toLowerCase().contains("kbzpay") || siriusHost.getName().toLowerCase().contains("mmqr") || siriusHost.getName().toLowerCase().contains("qr")) {
if( siriusHost.getName().toLowerCase().contains("mmqr") || siriusHost.getName().toLowerCase().contains("kbzpay") || siriusHost.getDescription().toLowerCase().contains("mmqr") || siriusHost.getDescription().toLowerCase().contains("qr")) {
SystemParamsOperation.getInstance().setSecHostName(siriusHost.getName());
SystemParamsOperation.getInstance().setSecHostTerminalId(siriusHost.getTid());
@ -413,15 +412,15 @@ public class TMSSetupsImpl implements TMSSetups{
} else if (TextUtils.equals(name,"ssl_enable")) {
SystemParamsOperation.getInstance().setSslSwitchStatus(parseBoolean(data));
} else if (TextUtils.equals(name,"qrpay_inquiry_status_enable")) {
} else if (TextUtils.equals(name,"wave_pay_inquiry_status_enable")) {
SystemParamsOperation.getInstance().setQRPayInquiryStatus(parseBoolean(data));
SystemParamsOperation.getInstance().setWavePayInquiryStatus(parseBoolean(data));
} else if (TextUtils.equals(name,"tips_adjustment_enable")) {
SystemParamsOperation.getInstance().setTipsAdjustmentStatus(parseBoolean(data));
} else if (TextUtils.equals(name,"qrpay_enable")) {
} else if (TextUtils.equals(name,"wave_enable")) {
SystemParamsOperation.getInstance().setQRPayStatus(parseBoolean(data));
SystemParamsOperation.getInstance().setWavePayStatus(parseBoolean(data));
} else if (TextUtils.equals(name,"print_iso_enable")) {
SystemParamsOperation.getInstance().setPrintISOStatus(parseBoolean(data));
@ -583,14 +582,11 @@ public class TMSSetupsImpl implements TMSSetups{
}
} else if (TextUtils.equals(name,"speedup_contactless_enable")) {
SystemParamsOperation.getInstance().setSpeedUpContactless(parseBoolean(data));
} else if (TextUtils.equals(name,"manual_entry_pin_enable")) {
}
else if (TextUtils.equals(name,"manual_entry_pin_enable")) {
SystemParamsOperation.getInstance().setManualEntryPinEnable(parseBoolean(data));
} else if (TextUtils.equals(name,"decimal_enable")) {
SystemParamsOperation.getInstance().setDecimalEnable(parseBoolean(data));
} else if (TextUtils.equals(name,"app_key")) {
SystemParamsOperation.getInstance().setAppKey(data);
} else if (TextUtils.equals(name,"app_id")) {
SystemParamsOperation.getInstance().setAppId(data);
}
}
@ -688,7 +684,7 @@ public class TMSSetupsImpl implements TMSSetups{
return value == 1;
} catch (Exception e) {
e.printStackTrace();
return Boolean.parseBoolean(data);
return false;
}
}
}

View File

@ -147,8 +147,7 @@ public class TMSUtil {
siriusRequest.setApplicationVersion(BuildConfig.VERSION_NAME);
siriusRequest.setCurrentNetwork(getNetworkType(context));
siriusRequest.setLastTransaction(lastTransName);
siriusRequest.setLastTranTime(Long.parseLong(lastTransTime));
siriusRequest.setValue("YourValueHere");
siriusRequest.setLastTranTime(lastTransTime);
return siriusRequest;
}
@ -207,7 +206,7 @@ public class TMSUtil {
voidStatus = SystemParamsOperation.getInstance().getVoidStatus();
cashAdvanceStatus = SystemParamsOperation.getInstance().getCashAdvanceStatus();
refundStatus = SystemParamsOperation.getInstance().getRefundStatus();
wavePayInquiryStatus = SystemParamsOperation.getInstance().getQRPayInquiryStatus();
wavePayInquiryStatus = SystemParamsOperation.getInstance().getWavePayInquiryStatus();
tipAdjustmentStatus = SystemParamsOperation.getInstance().getTipsAdjustmentStatus();
settlementStatus = SystemParamsOperation.getInstance().getSettlementStatus();

View File

@ -149,7 +149,6 @@
android:layout_weight="1"
app:cardCornerRadius="12dp"
app:cardElevation="2dp"
android:onClick="@{()->click.onClickTap()}"
android:backgroundTint="#fff"
android:foreground="?android:attr/selectableItemBackground"
android:focusable="true"

View File

@ -32,21 +32,21 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp"
android:paddingTop="14dp"
android:padding="16dp"
android:paddingTop="24dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<!-- Trace Number Icon -->
<ImageView
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="8dp"
android:layout_marginBottom="12dp"
android:src="@drawable/ic_txn_history"
app:tint="@color/colorPrimary"
android:alpha="0.88"
android:padding="6dp"
android:alpha="0.9"
android:padding="8dp"
android:background="@drawable/bg_oval" />
<!-- Compact Title -->
@ -56,10 +56,10 @@
android:text="@string/enter_trace_text"
android:textAlignment="center"
android:textColor="@color/colorPrimary"
android:textSize="17sp"
android:textSize="22sp"
android:textStyle="bold"
android:fontFamily="sans-serif-medium"
android:layout_marginBottom="2dp" />
android:layout_marginBottom="4dp" />
<!-- Compact Subtitle -->
<TextView
@ -68,18 +68,18 @@
android:text="Enter the transaction trace number"
android:textAlignment="center"
android:textColor="@color/colorPrimary"
android:textSize="12sp"
android:alpha="0.7"
android:textSize="14sp"
android:alpha="0.75"
android:fontFamily="sans-serif"
android:layout_marginBottom="10dp" />
android:layout_marginBottom="16dp" />
<!-- Compact Trace Number Display Card -->
<androidx.cardview.widget.CardView
android:id="@+id/traceCard"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginHorizontal="4dp"
app:cardCornerRadius="12dp"
android:layout_height="70dp"
android:layout_marginHorizontal="8dp"
app:cardCornerRadius="16dp"
app:cardElevation="0dp"
app:cardBackgroundColor="@color/white">
@ -87,11 +87,11 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="1dp"
android:layout_margin="2dp"
android:background="@drawable/bg_edittext_primary_border"
android:orientation="horizontal"
android:gravity="center"
android:padding="8dp">
android:padding="16dp">
<!-- Trace number display -->
<TextView
@ -102,22 +102,22 @@
android:gravity="center"
android:text="@{inputTraceViewModel.invoiceNo}"
android:textColor="@color/colorPrimary"
android:textSize="20sp"
android:textSize="28sp"
android:textStyle="bold"
android:letterSpacing="0.07"
android:letterSpacing="0.1"
android:fontFamily="monospace"
android:hint="000000"
android:textColorHint="@color/colorPrimary"
android:alpha="0.5"
android:alpha="0.6"
tools:text="123456" />
<!-- Transaction indicator -->
<View
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_width="6dp"
android:layout_height="6dp"
android:background="@drawable/bg_oval"
android:backgroundTint="@color/colorPrimary"
android:alpha="0.5" />
android:alpha="0.6" />
</LinearLayout>
@ -125,14 +125,14 @@
</LinearLayout>
<!-- Number Keyboard - guaranteed space, more compact -->
<!-- Number Keyboard - guaranteed space -->
<com.utsmyanmar.baselib.ui.NumberKeyboard
android:id="@+id/passwordKeyboard"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginHorizontal="8dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:KeyClickCallback="@{inputTraceViewModel.onKeyClick}"
app:layout_constraintBottom_toTopOf="@+id/actionButtonsContainer"
app:layout_constraintEnd_toEndOf="parent"
@ -146,8 +146,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="8dp"
android:paddingBottom="12dp"
android:padding="16dp"
android:paddingBottom="24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent">
@ -155,34 +155,34 @@
<Button
android:id="@+id/btnCancel"
android:layout_width="0dp"
android:layout_height="42dp"
android:layout_height="52dp"
android:layout_weight="1"
android:layout_marginEnd="6dp"
android:layout_marginEnd="8dp"
android:text="@string/layout_cancel"
android:textColor="@color/colorPrimary"
android:textSize="12sp"
android:textSize="15sp"
android:textStyle="bold"
android:background="@drawable/bg_rounded_btn_cancel_cv"
android:fontFamily="sans-serif-medium"
android:onClick="@{()->click.onCancel()}"
android:elevation="1dp"
android:elevation="2dp"
android:textAllCaps="false" />
<!-- Confirm Button -->
<Button
android:id="@+id/btnConfirm"
android:layout_width="0dp"
android:layout_height="42dp"
android:layout_height="52dp"
android:layout_weight="1"
android:layout_marginStart="6dp"
android:layout_marginStart="8dp"
android:text="@string/layout_confirm"
android:textColor="@color/white"
android:textSize="12sp"
android:textSize="15sp"
android:textStyle="bold"
android:background="@drawable/bg_rounded_btn_cv"
android:fontFamily="sans-serif-medium"
android:onClick="@{()->click.onConfirm()}"
android:elevation="3dp"
android:elevation="8dp"
android:textAllCaps="false" />
</LinearLayout>

View File

@ -235,86 +235,6 @@
</androidx.cardview.widget.CardView>
<!-- &lt;!&ndash; Demo Mode Card &ndash;&gt;-->
<!-- <androidx.cardview.widget.CardView-->
<!-- android:id="@+id/demoCard"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginBottom="12dp"-->
<!-- android:clickable="true"-->
<!-- android:foreground="?android:attr/selectableItemBackground"-->
<!-- android:onClick="@{()->click.onDemoClick()}"-->
<!-- app:cardBackgroundColor="@color/white"-->
<!-- app:cardCornerRadius="16dp"-->
<!-- app:cardElevation="2dp">-->
<!-- <LinearLayout-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:gravity="center_vertical"-->
<!-- android:orientation="horizontal"-->
<!-- android:padding="20dp">-->
<!-- <androidx.cardview.widget.CardView-->
<!-- android:layout_width="48dp"-->
<!-- android:layout_height="48dp"-->
<!-- android:layout_marginEnd="16dp"-->
<!-- app:cardBackgroundColor="@color/colorPrimary"-->
<!-- app:cardCornerRadius="24dp"-->
<!-- app:cardElevation="0dp">-->
<!-- <ImageView-->
<!-- android:layout_width="24dp"-->
<!-- android:layout_height="24dp"-->
<!-- android:layout_gravity="center"-->
<!-- android:src="@drawable/ic_swap"-->
<!-- app:tint="@color/white" />-->
<!-- </androidx.cardview.widget.CardView>-->
<!-- <LinearLayout-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_weight="1"-->
<!-- android:orientation="vertical">-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:fontFamily="@font/rubik_medium"-->
<!-- android:text="Reversal On/Off"-->
<!-- android:textColor="@color/colorTextTitle"-->
<!-- android:textSize="18sp"-->
<!-- android:textStyle="bold"-->
<!-- tools:fontFamily="sans-serif-medium" />-->
<!-- <TextView-->
<!-- android:id="@+id/reversalSwitch"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginTop="2dp"-->
<!-- android:fontFamily="@font/rubik_regular"-->
<!-- android:text="Demo mode active - Test transactions"-->
<!-- android:textColor="@color/colorTextContent"-->
<!-- android:textSize="14sp"-->
<!-- tools:fontFamily="sans-serif" />-->
<!-- </LinearLayout>-->
<!-- <Switch-->
<!-- android:id="@+id/demoSwitch"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginStart="8dp"-->
<!-- android:clickable="false"-->
<!-- android:focusable="false" />-->
<!-- </LinearLayout>-->
<!-- </androidx.cardview.widget.CardView>-->
<!-- Demo Mode Card -->
<androidx.cardview.widget.CardView
android:id="@+id/demoCard"

View File

@ -186,12 +186,6 @@
app:popUpToInclusive="true"
android:id="@+id/action_cardWaitingFragment_to_nav_main"
app:destination="@id/nav_main" />
<action
android:id="@+id/action_cardWaitingFragment_to_pinPadFragment"
app:launchSingleTop="true"
app:popUpTo="@+id/cardWaitingFragment"
app:popUpToInclusive="true"
app:destination="@id/pinPadFragment" />
</fragment>
<fragment
tools:layout="@layout/fragment_emv_input_pin"

View File

@ -6,6 +6,5 @@
<domain includeSubdomains="true">128.199.170.203</domain>
<domain includeSubdomains="true">152.42.199.193</domain>
<domain includeSubdomains="true">api.kbzpay.com</domain>
<domain includeSubdomains="true">sirius-nest.utsmyanmar.com</domain>
</domain-config>
</network-security-config>

View File

@ -14,7 +14,4 @@ public class ExampleUnitTest {
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}

0
baselib/src/main/assets/lottie-search-files.json Executable file → Normal file
View File

0
baselib/src/main/assets/lottie_decline.json Executable file → Normal file
View File

0
baselib/src/main/assets/lottie_info.json Executable file → Normal file
View File

0
baselib/src/main/assets/lottie_printer_not_ready.json Executable file → Normal file
View File

0
baselib/src/main/assets/lottie_remove_card.json Executable file → Normal file
View File

0
baselib/src/main/assets/lottie_success.json Executable file → Normal file
View File

0
baselib/src/main/assets/lottie_timeout.json Executable file → Normal file
View File

0
baselib/src/main/assets/rubik.ttf Executable file → Normal file
View File

0
baselib/src/main/assets/rubik_medium.ttf Executable file → Normal file
View File

View File

View File

View File

@ -11,7 +11,6 @@ import com.sunmi.pay.hardware.aidl.AidlConstants;
import com.sunmi.pay.hardware.aidlv2.AidlConstantsV2;
import com.sunmi.pay.hardware.aidlv2.security.SecurityOptV2;
import com.utsmyanmar.paylibs.Constant;
import com.utsmyanmar.paylibs.PayLibNex;
import com.utsmyanmar.paylibs.utils.core_utils.ByteUtil;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.secure.TriDes;
@ -25,11 +24,8 @@ public final class TerminalKeyUtil {
public static final String TAG = TerminalKeyUtil.class.getSimpleName();
// private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("875f63741753d18811a3449090d1777b".toUpperCase()); // KBZ UAT
private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("e121249099a677e8b7d4f6a9d49fe8d1".toUpperCase()); // MPU
private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("875f63741753d18811a3449090d1777b".toUpperCase());
private static final byte[] work_key_data = new byte[16];
public static void initNexKey() {
byte[] IPEKByte = ByteUtil.hexStr2Bytes("5A4CFF6DE93F0488926166F3317EFD2F"); // IPEK
byte[] IPEKKCVByte = ByteUtil.hexStr2Bytes("1F0C18");
@ -40,8 +36,6 @@ public final class TerminalKeyUtil {
Arrays.fill(work_key_data, (byte) 0x31);
PinPad pinPad = BaseApplication.getInstance().deviceEngine.getPinPad();
int result = pinPad.writeMKey(9, main_key_data, main_key_data.length);
//
// int resultPINKEY = pinPad.writeWKey(0, WorkKeyTypeEnum.PINKEY, work_key_data, work_key_data.length);
// int resultTDKEY = pinPad.writeWKey(0, WorkKeyTypeEnum.TDKEY, work_key_data, work_key_data.length);
@ -53,12 +47,6 @@ public final class TerminalKeyUtil {
// int result = pinPad.dukptKeyInject(9, DukptKeyTypeEnum.BDK,IPEKByte,16,ksn);
LogUtil.d(TAG, "save tmk key result: "+result);
byte[] encryptedPIK = SystemParamsOperation.getInstance().getKeyPIK().get(0);
result = pinPad.writeWKey(9, WorkKeyTypeEnum.PINKEY,encryptedPIK,encryptedPIK.length);
LogUtil.d(TAG, "save PIK key result: "+result);
// LogUtil.d(TAG, "save pin key result: "+resultPINKEY);
// LogUtil.d(TAG, "save tdk key result: "+resultTDKEY);
// LogUtil.d(TAG, "save tek key result: "+resultTEK);

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

Some files were not shown because too many files have changed in this diff Show More