first commit

This commit is contained in:
kizzy 2025-11-06 01:08:32 +07:00
commit b5a82a5fd1
23 changed files with 561 additions and 0 deletions

View File

@ -0,0 +1,6 @@
package com.utsmyanmar.baselib.util;
public interface BackPressCallback {
void onBackPress();
}

View File

@ -0,0 +1,5 @@
package com.utsmyanmar.baselib.util;
public interface CardDetectCallback {
void onComplete();
}

View File

@ -0,0 +1,35 @@
package com.utsmyanmar.baselib.util;
public class Config {
private boolean IS_SETTING_NEW_INPUT_TYPE = true;
private static final Config instance = new Config();
private String hostIP = "";
private String hostPort = "";
public static Config getInstance() {
return instance;
}
public boolean IS_SETTING_NEW_INPUT_TYPE() {
return IS_SETTING_NEW_INPUT_TYPE;
}
public String getHostIP() {
return hostIP;
}
public String getHostPort() {
return hostPort;
}
public void setHostIP(String hostIP) {
this.hostIP = hostIP;
}
public void setHostPort(String hostPort) {
this.hostPort = hostPort;
}
}

View File

@ -0,0 +1,49 @@
package com.utsmyanmar.baselib.util;
import android.util.SparseArray;
import androidx.annotation.NonNull;
import androidx.lifecycle.ViewModel;
public class DataBindingConfig {
private final int layout;
private final int vmVariableId;
private final ViewModel stateViewModel;
private SparseArray bindingParams = new SparseArray();
public DataBindingConfig(@NonNull Integer layout,
@NonNull Integer vmVariableId,
@NonNull ViewModel stateViewModel) {
this.layout = layout;
this.vmVariableId = vmVariableId;
this.stateViewModel = stateViewModel;
}
public int getLayout() {
return layout;
}
public int getVmVariableId() {
return vmVariableId;
}
public ViewModel getStateViewModel() {
return stateViewModel;
}
public SparseArray getBindingParams() {
return bindingParams;
}
public DataBindingConfig addBindingParam(@NonNull Integer variableId,
@NonNull Object object) {
if (bindingParams.get(variableId) == null) {
bindingParams.put(variableId, object);
}
return this;
}
}

View File

@ -0,0 +1,5 @@
package com.utsmyanmar.baselib.util;
public interface DelayCaller {
void onCall();
}

View File

@ -0,0 +1,8 @@
package com.utsmyanmar.baselib.util;
public interface DialogCallback {
void onClickCancel();
void onClickRetry();
}

View File

@ -0,0 +1,32 @@
package com.utsmyanmar.baselib.util;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import com.utsmyanmar.baselib.BaseApplication;
public class NetworkHelpers {
private Context context;
private static NetworkHelpers INSTANCE;
public static NetworkHelpers getInstance(){
if(INSTANCE==null){
INSTANCE=new NetworkHelpers();
}
return INSTANCE;
}
private NetworkHelpers(){
context= BaseApplication.getInstance().getApplicationContext();
}
public boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
}

View File

@ -0,0 +1,62 @@
package com.utsmyanmar.baselib.util;
import android.os.RemoteException;
import com.sunmi.pay.hardware.aidlv2.system.BasicOptV2;
import com.utsmyanmar.baselib.BaseApplication;
import com.utsmyanmar.paylibs.utils.core_utils.ByteUtil;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import com.utsmyanmar.paylibs.utils.LogUtil;
public class TerminalUtil {
private static final String TAG = TerminalUtil.class.getSimpleName();
private static TerminalUtil app;
private TerminalUtils terminalUtils;
BasicOptV2 basicOptV2;
public static TerminalUtil getInstance(){
if(app == null){
app = new TerminalUtil();
}
return app;
}
TerminalUtil(){
basicOptV2 = BaseApplication.basicOptV2;
terminalUtils = new TerminalUtilsImpl();
}
public void makeBuzzer(int count) throws RemoteException {
basicOptV2.buzzerOnDevice(count,7,3000,1000);
}
public void shortBuzzer(int count) throws RemoteException {
basicOptV2.buzzerOnDevice(1, 2750, 200, 0);
}
public void makeBuzzerParam(int count,int frequency,int duration,int interval) throws RemoteException {
basicOptV2.buzzerOnDevice(3,7,2000,1000);
}
public String generateHashedString(String random) throws NoSuchAlgorithmException {
return terminalUtils.generateHashString(random);
}
public String getSerialNo() {
return terminalUtils.getSerialNumber();
}
public String generateRandomNumbers() {
return terminalUtils.generateRandom();
}
}

View File

@ -0,0 +1,17 @@
package com.utsmyanmar.baselib.util;
import com.sunmi.pay.hardware.aidlv2.system.BasicOptV2;
import java.security.NoSuchAlgorithmException;
public interface TerminalUtils {
String generateHashString(String random) throws NoSuchAlgorithmException ;
String generateHashString(String random,BasicOptV2 basicOptV2) throws NoSuchAlgorithmException;
String generateRandom();
String getSerialNumber(BasicOptV2 basicOptV2);
String getSerialNumber();
}

View File

@ -0,0 +1,94 @@
package com.utsmyanmar.baselib.util;
import android.os.RemoteException;
import com.sunmi.pay.hardware.aidlv2.system.BasicOptV2;
import com.utsmyanmar.baselib.BaseApplication;
import com.utsmyanmar.paylibs.utils.core_utils.ByteUtil;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
public class TerminalUtilsImpl implements TerminalUtils{
long number = 2485718;
long sub = 1251151;
// public static native String getHiddenFromNative();
// public static native String getEncryptedFromNative();
// static {
// System.loadLibrary("native-lib");
// }
@Override
public String generateHashString(String random) throws NoSuchAlgorithmException {
String sn = getSerialNumber();
String snPN = BaseApplication.getInstance().getPackageName();
String nonce = random;
String text = sn + snPN + nonce;
// LogUtil.d(TAG,"Plain Text: "+text);
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));
return ByteUtil.bytes2HexStr(hash);
}
@Override
public String generateHashString(String random,BasicOptV2 basicOptV2) throws NoSuchAlgorithmException {
String sn = getSerialNumber(basicOptV2);
String snPN = BaseApplication.getInstance().getPackageName();
String nonce = random;
String text = sn + snPN + nonce;
// LogUtil.d(TAG,"Plain Text: "+text);
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));
return ByteUtil.bytes2HexStr(hash);
}
@Override
public String generateRandom() {
Random rnd = new Random();
StringBuilder sb = new StringBuilder((1000000 + rnd.nextInt(9000000)));
return sb.toString();
}
@Override
public String getSerialNumber(BasicOptV2 basicOptV2){
String data = "";
try {
// data = basicOptV2.getSysParam(getEncryptedFromNative());
data = basicOptV2.getSysParam("SN");
} catch (RemoteException e) {
e.printStackTrace();
}
return data;
}
@Override
public String getSerialNumber() {
String data = "";
try {
data = BaseApplication.getInstance().deviceEngine.getDeviceInfo().getSn();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
}

View File

@ -0,0 +1,8 @@
package com.utsmyanmar.baselib.util;
public interface TimeoutCallback {
void onTrick(long trickTime);
void onFinish();
}

View File

@ -0,0 +1,18 @@
package com.utsmyanmar.baselib.util;
import java.net.MalformedURLException;
import java.net.URL;
public class URLValidator {
public static boolean isValidURL(String urlString)
{
try {
new URL(urlString);
return true;
} catch (MalformedURLException e) {
return false;
}
}
}

View File

@ -0,0 +1,5 @@
package com.utsmyanmar.baselib.util.enums;
public enum EmvPinMode {
ONLINE,OFFLINE
}

View File

@ -0,0 +1,31 @@
package com.utsmyanmar.baselib.util.enums;
public enum EmvResultStatus {
SELECT_APP,
READ_CARD,
PIN_PAD_CANCEL,
PIN_PAD_CONFIRM,
PIN_PAD_ERROR,
READ_CARD_NO_APP,
READ_CARD_RETRY,
PIN_MISMATCH,
CLICK_CONFIRM,
SUCCESS,
BATCH_UPLOAD,
SUCCESS_ONLINE,
FAIL,
FAIL_ONLINE,
REVERSAL_PROCESS,
REVERSAL_FAIL,
REVERSAL_SUCCESS,
REVERSAL_SECONDARY,
ERROR,
NETWORK_ERROR,
TRY_AGAIN,
SECONDARY,
ON_NEXT_SCREEN,
OFFLINE_APPROVE,
OFFLINE_DECLINE,
CONFIRM_CODE_VERIFY
}

View File

@ -0,0 +1,7 @@
package com.utsmyanmar.baselib.util.enums;
public enum PinUtil {
OLD_PIN,
NEW_PIN,
CONFIRM_PIN
}

View File

@ -0,0 +1,7 @@
package com.utsmyanmar.baselib.util.rx_helper;
import java.util.List;
public interface ProcessDataResult <T>{
void onSuccess(List<T> lists);
}

View File

@ -0,0 +1,10 @@
package com.utsmyanmar.baselib.util.rx_helper;
import android.os.RemoteException;
public interface ProcessSingleDataResult <T>{
void onSuccess(T data);
void onDataNotFound();
}

View File

@ -0,0 +1,12 @@
package com.utsmyanmar.baselib.util.rx_helper;
import io.reactivex.rxjava3.disposables.Disposable;
public interface RxCallbackUpdateX
{
void onError(Throwable throwable);
void onComplete();
}

View File

@ -0,0 +1,13 @@
package com.utsmyanmar.baselib.util.rx_helper;
import android.os.RemoteException;
import com.utsmyanmar.baselib.db.model.ContactlessAid;
public interface RxCallbackX <T>{
void onSuccess(T data ) throws RemoteException;
void onError(Throwable throwable);
void onComplete();
}

View File

@ -0,0 +1,20 @@
package com.utsmyanmar.baselib.util.rx_helper;
import java.util.List;
import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.core.Maybe;
import io.reactivex.rxjava3.core.Observable;
public interface RxHelper <T> {
void queryData(Maybe<List<T>> observable, RxCallbackX<List<T>> callbackX);
void updateData(Completable completable,RxCallbackUpdateX callbackX);
void querySingleData(Maybe<T> observable, RxCallbackX<T> callbackX);
void observableData(Observable<T> observable, RxCallbackX<T> callbackX);
void dispose();
}

View File

@ -0,0 +1,92 @@
package com.utsmyanmar.baselib.util.rx_helper;
import com.utsmyanmar.baselib.db.model.ContactlessAid;
import com.utsmyanmar.paylibs.model.PayDetail;
import java.util.List;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.core.CompletableObserver;
import io.reactivex.rxjava3.core.Maybe;
import io.reactivex.rxjava3.core.MaybeObserver;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class RxUtil <T> implements RxHelper<T > {
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
@Override
public void queryData(Maybe<List<T>> observable,RxCallbackX<List<T>> callbackX) {
compositeDisposable.add(
observable.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(
callbackX::onSuccess,
callbackX::onError,
callbackX::onComplete
)
);
}
@Override
public void updateData(Completable completable, RxCallbackUpdateX callbackX) {
completable.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(new CompletableObserver() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onComplete() {
callbackX.onComplete();
}
@Override
public void onError(@NonNull Throwable e) {
callbackX.onError(e);
}
}
);
}
@Override
public void querySingleData(Maybe<T> observable, RxCallbackX<T> callbackX) {
compositeDisposable.add(
observable.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(
callbackX::onSuccess,
callbackX::onError,
callbackX::onComplete
)
);
}
@Override
public void observableData(Observable<T> observable, RxCallbackX<T> callbackX) {
compositeDisposable.add(
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
callbackX::onSuccess,
callbackX::onError,
callbackX::onComplete
)
);
}
@Override
public void dispose() {
compositeDisposable.dispose();
}
}

View File

@ -0,0 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIEITCCAwmgAwIBAgIUIp2h0WlGDCC6xqBayKEA2OfzMGAwDQYJKoZIhvcNAQEL
BQAwgZ4xCzAJBgNVBAYTAk1NMQ4wDAYDVQQIDAVCdXJtYTERMA8GA1UEBwwITWFu
ZGFsYXkxEzARBgNVBAoMClVBVF9LQlpQYXkxGjAYBgNVBAsMEVVBVF9LQlpQYXlf
UEdXX0NBMRcwFQYDVQQDDA5hcGkua2J6cGF5LmNvbTEiMCAGCSqGSIb3DQEJARYT
amlhbmdiaW5AaHVhd2VpLmNvbTAgFw0xOTA2MTcwMTE3MzNaGA8zMDE4MTAxODAx
MTczM1owgZ4xCzAJBgNVBAYTAk1NMQ4wDAYDVQQIDAVCdXJtYTERMA8GA1UEBwwI
TWFuZGFsYXkxEzARBgNVBAoMClVBVF9LQlpQYXkxGjAYBgNVBAsMEVVBVF9LQlpQ
YXlfUEdXX0NBMRcwFQYDVQQDDA5hcGkua2J6cGF5LmNvbTEiMCAGCSqGSIb3DQEJ
ARYTamlhbmdiaW5AaHVhd2VpLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBALCnpBEIKANGLSbYNajzAJ4Xc7H7XJF4erFdTR/iC1cXDenDwqIeEYpm
07jXhaPkwaQpNKO8vYkHFzY6zHO21TyswS1DowsDModnXCu8tG1mpY8p6w1wzTPI
3ccq7XYQiTmx0/9pMcuuJ/7uWA0/nFIDEpc8M0ra7tZDUgJA4nYnkryz35SwlctD
Pcb+XdKxpVOL0BnEkrT5lov+V0yOT/MTJnCEMECiR0Ggr632SPu4DovtHEpWVltq
aDqFu78KVMs3h9VfT7DUCwrXlbewD2Q3bMdsG41EPH1Wki28Sq+4lQ6EMZ7QQPbk
lOxW4J2Zq/ZCX7kaQsUOeSg81dGpMfsCAwEAAaNTMFEwHQYDVR0OBBYEFG0LxFC8
DdLu2rB8PY6xxQZHOFrXMB8GA1UdIwQYMBaAFG0LxFC8DdLu2rB8PY6xxQZHOFrX
MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAGDeGS0KCugqVQK8
SQdK1FRRqQ94ObjTx38Da02g57gVnF2gAZLn8eCisq4bksR9B+Aya+gLZylUGFK9
e2TCN1XVEDnyM4+qhs8XdKLsV0iVDMq+Hrsy1l4036Hhcy5XWH4SNN0fUrYXuaUw
zw1vHmv9IitYjRwZ13IpckbtwXOIj2bVUfN6OMnDQdcoNmXlYQsjaNZcfG/9rYV/
Ob2ynG4yXnEsz9qRhE8V7i2mSR28eBffYVWYI822N6TDeqjRrztTlNMqRBosEzfQ
Igjm6XL31RJEJfnUCLOU2HLIMdBwsYFVoxwgFLr9THbK6IlKcag1/UvfjJP8pPn9
jM4M6IA=
-----END CERTIFICATE-----

Binary file not shown.