diff --git a/app/src/main/assets/fira_code_semibold.ttf b/app/src/main/assets/fira_code_semibold.ttf
new file mode 100644
index 0000000..ae619e9
Binary files /dev/null and b/app/src/main/assets/fira_code_semibold.ttf differ
diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java
index 9ca847f..f2a4ea9 100644
--- a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java
+++ b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java
@@ -496,5 +496,18 @@ public class SharedViewModel extends ViewModel {
}
+ public void printTerminalHostConfigs(){
+ PrintXReceipt.getInstance().printTerminalHostConfig(new PrintXStatus() {
+ @Override
+ public void onSuccess() {
+ Log.d("PrintConfig", "Print Terminal Config Success.");
+ }
+
+ @Override
+ public void onFailure() {
+ Log.e("PrintConfig", "Print Terminal Config Success.");
+ }
+ });
+ }
}
diff --git a/app/src/main/java/com/utsmm/kbz/ui/settings/HostConfigFragment.java b/app/src/main/java/com/utsmm/kbz/ui/settings/HostConfigFragment.java
index db93ae8..690acc6 100644
--- a/app/src/main/java/com/utsmm/kbz/ui/settings/HostConfigFragment.java
+++ b/app/src/main/java/com/utsmm/kbz/ui/settings/HostConfigFragment.java
@@ -34,6 +34,7 @@ import com.utsmm.kbz.BR;
import com.utsmm.kbz.R;
import com.utsmm.kbz.config.Constants;
import com.utsmm.kbz.databinding.FragmentHostConfigBinding;
+import com.utsmm.kbz.ui.core_viewmodel.SharedViewModel;
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.baselib.util.DialogCallback;
@@ -49,6 +50,8 @@ import java.util.Objects;
public class HostConfigFragment extends DataBindingFragment {
private HostConfigViewModel viewModel;
+
+ private SharedViewModel sharedViewModel;
protected Printer printer;
int FONT_NORMAL = 20;
int FONT_HEADER = 24;
@@ -56,6 +59,7 @@ public class HostConfigFragment extends DataBindingFragment {
@Override
protected void initViewModel() {
viewModel = new ViewModelProvider(this).get(HostConfigViewModel.class);
+ sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
}
@Override
@@ -100,146 +104,7 @@ public class HostConfigFragment extends DataBindingFragment {
}
public void onPrint(){
- startPrintProcess();
+ sharedViewModel.printTerminalHostConfigs();
}
}
- private void startPrintProcess() {
-
- DeviceEngine engine = APIProxy.getDeviceEngine(requireContext());
- printer = engine.getPrinter();
- int printerStatus = printer.getStatus();
- if(printerStatus != SdkResult.Success){
- Log.e("Print Config", "Printer Error: " + printerStatus);
- return;
- }
- printer.setGray(GrayLevelEnum.LEVEL_1);
- Typeface typeface = ResourcesCompat.getFont(requireContext(), R.font.firacode);
- printer.setTypeface(typeface);
- SystemParamsOperation sp = SystemParamsOperation.getInstance();
-
- Bitmap bitmap = BitmapFactory.decodeResource(requireContext().getResources(), R.drawable.kbz_receipt_logo);
- printLogo(bitmap);
- printer.appendPrnStr("TERMINAL CONFIGURATION", FONT_HEADER, AlignEnum.CENTER, true);
- printer.appendPrnStr("\n", FONT_NORMAL, AlignEnum.CENTER, false);
- printer.appendPrnStr(sp.getMerchantName(), FONT_NORMAL, AlignEnum.CENTER, false);
- printer.appendPrnStr(sp.getMerchantAddress(), FONT_NORMAL, AlignEnum.CENTER, false);
- printer.appendPrnStr(sp.getMerchantAddress2(), FONT_NORMAL, AlignEnum.CENTER, false);
- printer.appendPrnStr("TERMINAL : " + sp.getTerminalName(), FONT_NORMAL, AlignEnum.LEFT, true);
- printer.appendPrnStr("\n---------------------------\n", FONT_NORMAL, AlignEnum.LEFT, false);
- printer.appendPrnStr("PRIMARY HOST", FONT_NORMAL, AlignEnum.LEFT, true);
- printer.appendPrnStr("Name : " + sp.getHostName(), FONT_NORMAL, AlignEnum.LEFT, false);
- printer.appendPrnStr("TID : " + sp.getTerminalId(), FONT_NORMAL, AlignEnum.LEFT, false);
- printer.appendPrnStr("MID : " + sp.getMerchantId(), FONT_NORMAL, AlignEnum.LEFT, false);
- String ipAddress = sp.getIpAddress();
- String[] ipAndPort = splitIpAndPort(ipAddress);
- String ip = ipAndPort[0];
- String port = ipAndPort[1];
- printer.appendPrnStr("Primary Ip : " + ip, FONT_NORMAL, AlignEnum.LEFT, true);
- printer.appendPrnStr("Primary Port : " + port, FONT_NORMAL, AlignEnum.LEFT, true);
- String secIpAddress = sp.getSecIpAddress();
- String[] secIpAndPort = splitIpAndPort(secIpAddress);
- String secIp = secIpAndPort[0];
- String secPort = secIpAndPort[1];
- printer.appendPrnStr("Secondary Ip : " + secIp, FONT_NORMAL, AlignEnum.LEFT, true);
- printer.appendPrnStr("Secondary Port: " + secPort, FONT_NORMAL, AlignEnum.LEFT, true);
- printer.appendPrnStr("Currency Code : " + sp.getCurrencyType(), FONT_NORMAL, AlignEnum.LEFT, true);
- printer.appendPrnStr("\n---------------------------\n", FONT_NORMAL, AlignEnum.LEFT, false);
-
- if (!TextUtils.isEmpty(sp.getSecHostName())) {
- printer.appendPrnStr("SECONDARY HOST", FONT_NORMAL, AlignEnum.LEFT, true);
- printer.appendPrnStr("Name : " + sp.getSecHostName(), FONT_NORMAL, AlignEnum.LEFT, false);
-// printer.appendPrnStr("TID : " + sp.getSecHostTerminalId(), FONT_NORMAL, AlignEnum.LEFT, false);
-// printer.appendPrnStr("MID : " + sp.getSecHostMerchantId(), FONT_NORMAL, AlignEnum.LEFT, false);
- printer.appendPrnStr("SHORT CODE : " + sp.getShortCode(), FONT_NORMAL, AlignEnum.LEFT, false);
- String secHostIpAddress = sp.getSecHostIpAddress();
- String[] secHostIpAndPort = splitIpAndPort(secHostIpAddress);
- String secHostIp = secHostIpAndPort[0];
- String secHostPort = secHostIpAndPort[1];
- printer.appendPrnStr("Primary Ip : " + secHostIp, FONT_NORMAL, AlignEnum.LEFT, true);
- printer.appendPrnStr("Primary Port : " + secHostPort, FONT_NORMAL, AlignEnum.LEFT, true);
- String secHostSecIpAddress = sp.getSecHostSecIpAddress();
- String[] SecHostSecIpAndPort = splitIpAndPort(secHostSecIpAddress);
- String secHostSecIp = SecHostSecIpAndPort[0];
- String secHostSecPort = SecHostSecIpAndPort[1];
- printer.appendPrnStr("Secondary Ip : " + secHostSecIp, FONT_NORMAL, AlignEnum.LEFT, true);
- printer.appendPrnStr("Secondary Port: " + secHostSecPort, FONT_NORMAL, AlignEnum.LEFT, true);
- printer.appendPrnStr("Currency Code : " + sp.getCurrencyType(), FONT_NORMAL, AlignEnum.LEFT, true);
- printer.appendPrnStr("\n---------------------------\n", FONT_NORMAL, AlignEnum.LEFT, false);
- }
-
- printer.startPrint(true, ret -> {
- Log.d("Print", "Print result = " + ret);
- });
- }
-
- private String[] splitIpAndPort(String raw) {
- if (raw == null || raw.trim().isEmpty()) {
- return new String[]{"", ""};
- }
-
- raw = raw.trim();
-
- // If starts with http/https
- if (raw.startsWith("http://") || raw.startsWith("https://")) {
-
- // Attempt to extract host + port via URL
- try {
- java.net.URL url = new java.net.URL(raw);
-
- String host = url.getHost(); // hostname or IP
- int port = url.getPort(); // -1 if no port
- String path = url.getPath(); // /api or /
-
- // If port exists → split normally
- if (port != -1) {
- return new String[]{
- host, // e.g. 10.10.10.10
- String.valueOf(port) // e.g. 5000
- };
- }
-
- // No port → do NOT split
- return new String[]{ raw, "" };
-
- } catch (Exception e) {
- // fail-safe: do not split
- return new String[]{ raw, "" };
- }
- }
-
- // Normal "IP:Port" split
- int idx = raw.lastIndexOf(":");
-
- if (idx == -1) {
- return new String[]{ raw, "" };
- }
-
- return new String[]{
- raw.substring(0, idx),
- raw.substring(idx + 1)
- };
- }
-
-
- private void printLogo(Bitmap logoBitmap) {
- try {
- if (logoBitmap == null || printer == null) return;
-
- Bitmap bmp = logoBitmap;
-
- // Max printable width = 384px
- if (bmp.getWidth() > 384) {
- int newHeight = (int) (bmp.getHeight() * (384f / bmp.getWidth()));
- bmp = Bitmap.createScaledBitmap(bmp, 384, newHeight, true);
- }
-
- printer.appendPrnStr("\n", FONT_NORMAL, AlignEnum.CENTER, false);
- printer.appendImage(bmp, AlignEnum.CENTER);
- printer.appendPrnStr("\n", FONT_NORMAL, AlignEnum.CENTER, false);
-
- } catch (Exception e) {
- Log.e("PRINT", "Logo error: " + e.getMessage());
- }
- }
-
}
\ No newline at end of file
diff --git a/app/src/main/res/font/fira_code_semibold.ttf b/app/src/main/res/font/fira_code_semibold.ttf
new file mode 100644
index 0000000..ae619e9
Binary files /dev/null and b/app/src/main/res/font/fira_code_semibold.ttf differ
diff --git a/app/src/main/res/layout/fragment_host_config.xml b/app/src/main/res/layout/fragment_host_config.xml
index b94797b..fe128bc 100644
--- a/app/src/main/res/layout/fragment_host_config.xml
+++ b/app/src/main/res/layout/fragment_host_config.xml
@@ -51,16 +51,7 @@
android:orientation="vertical">
-
+
+ tools:text="*********************************************************"/>
+
+
+ tools:text="********************************************************"/>
@@ -266,7 +267,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
- android:src="@drawable/ic_device_info"
+ android:src="@drawable/ic_host"
app:tint="@color/white" />
diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java
index d23b1bf..6bcc001 100644
--- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java
+++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java
@@ -2,12 +2,14 @@ package com.utsmyanmar.paylibs.print.printx;
import static com.utsmyanmar.paylibs.utils.enums.CurrencyType.MMK;
+import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Typeface;
import android.os.Build;
import android.os.RemoteException;
import android.text.TextUtils;
+import android.util.Log;
import androidx.core.content.res.ResourcesCompat;
@@ -955,7 +957,6 @@ public abstract class BaseXPrint {
} else if (payDetail.getTransType().equals(SUMMARY)) {
printer.appendPrnStr("HOST :" + HOST_NAME_MPU + "", fontNormal, AlignEnum.LEFT,false);
}
-
/* 17 Sept 2024 Yoma requested to changed slip design for QR*/
// printer.printColumnsString(new String[]{"MID :" + payDetail.getMerchantNo(), ""}, new int[]{3, 1}, new int[]{0, 2}, innerResultCallback);
// printer.printColumnsString(new String[]{"TID :" + payDetail.getTerminalNo(), ""}, new int[]{3, 1}, new int[]{0, 2}, innerResultCallback);
@@ -1004,5 +1005,126 @@ public abstract class BaseXPrint {
// LogUtil.d("lxy", "code:" + code + ",msg:" + msg);
}
+
+
};
+
+ protected void printTerminalConfiguration() {
+
+ SystemParamsOperation sp = SystemParamsOperation.getInstance();
+ // ---------- PRIMARY HOST ----------
+ printer.appendPrnStr("PRIMARY HOST", fontNormal, AlignEnum.LEFT, true);
+ printer.appendPrnStr("Name : " + sp.getHostName(), fontNormal, AlignEnum.LEFT, false);
+ printer.appendPrnStr("TID : " + sp.getTerminalId(), fontNormal, AlignEnum.LEFT, false);
+ printer.appendPrnStr("MID : " + sp.getMerchantId(), fontNormal, AlignEnum.LEFT, false);
+ String[] ipPort = splitIpAndPort(sp.getIpAddress());
+ printer.appendPrnStr("Primary Ip : " + ipPort[0], fontNormal, AlignEnum.LEFT, false);
+ printer.appendPrnStr("Primary Port : " + ipPort[1], fontNormal, AlignEnum.LEFT, false);
+ String[] secIpPort = splitIpAndPort(sp.getSecIpAddress());
+ printer.appendPrnStr("Secondary Ip : " + secIpPort[0], fontNormal, AlignEnum.LEFT, false);
+ printer.appendPrnStr("Secondary Port: " + secIpPort[1], fontNormal, AlignEnum.LEFT, false);
+ printer.appendPrnStr("Currency Code : " + sp.getCurrencyType(), fontNormal, AlignEnum.LEFT, false);
+ lineBreak();
+ // ---------- SECONDARY HOST (optional) ----------
+ if (!TextUtils.isEmpty(sp.getSecHostName())) {
+ printer.appendPrnStr("SECONDARY HOST", fontNormal, AlignEnum.LEFT, true);
+ printer.appendPrnStr("Name : " + sp.getSecHostName(), fontNormal, AlignEnum.LEFT, false);
+ printer.appendPrnStr("SHORT CODE : " + sp.getShortCode(), fontNormal, AlignEnum.LEFT, false);
+ String[] secHostIp = splitIpAndPort(sp.getSecHostIpAddress());
+ printer.appendPrnStr("Primary Ip : " + secHostIp[0], fontNormal, AlignEnum.LEFT, false);
+ printer.appendPrnStr("Primary Port : " + secHostIp[1], fontNormal, AlignEnum.LEFT, false);
+ String[] secHostSecIp = splitIpAndPort(sp.getSecHostSecIpAddress());
+ printer.appendPrnStr("Secondary Ip : " + secHostSecIp[0], fontNormal, AlignEnum.LEFT, false);
+ printer.appendPrnStr("Secondary Port: " + secHostSecIp[1], fontNormal, AlignEnum.LEFT, false);
+ printer.appendPrnStr("Currency Code : " + sp.getCurrencyType(), fontNormal, AlignEnum.LEFT, false);
+ lineBreak();
+ printer.appendPrnStr("App Version : " + getAppVersion(), fontNormal, AlignEnum.LEFT, false);
+ }
+ }
+
+ private String getAppVersion() {
+ try {
+ return PayLibsUtils.getInstance().context
+ .getPackageManager()
+ .getPackageInfo(
+ PayLibsUtils.getInstance().context.getPackageName(),
+ 0
+ )
+ .versionName;
+ } catch (Exception e) {
+ return "N/A";
+ }
+ }
+
+ private String[] splitIpAndPort(String raw) {
+ if (raw == null || raw.trim().isEmpty()) {
+ return new String[]{"", ""};
+ }
+
+ raw = raw.trim();
+
+ // If starts with http/https
+ if (raw.startsWith("http://") || raw.startsWith("https://")) {
+
+ // Attempt to extract host + port via URL
+ try {
+ java.net.URL url = new java.net.URL(raw);
+
+ String host = url.getHost(); // hostname or IP
+ int port = url.getPort(); // -1 if no port
+ String path = url.getPath(); // /api or /
+
+ // If port exists → split normally
+ if (port != -1) {
+ return new String[]{
+ host, // e.g. 10.10.10.10
+ String.valueOf(port) // e.g. 5000
+ };
+ }
+
+ // No port → do NOT split
+ return new String[]{ raw, "" };
+
+ } catch (Exception e) {
+ // fail-safe: do not split
+ return new String[]{ raw, "" };
+ }
+ }
+
+ // Normal "IP:Port" split
+ int idx = raw.lastIndexOf(":");
+
+ if (idx == -1) {
+ return new String[]{ raw, "" };
+ }
+
+ return new String[]{
+ raw.substring(0, idx),
+ raw.substring(idx + 1)
+ };
+ }
+
+
+ private void printLogo(Bitmap logoBitmap) {
+ try {
+ if (logoBitmap == null || printer == null) return;
+
+ Bitmap bmp = logoBitmap;
+
+ // Max printable width = 384px
+ if (bmp.getWidth() > 384) {
+ int newHeight = (int) (bmp.getHeight() * (384f / bmp.getWidth()));
+ bmp = Bitmap.createScaledBitmap(bmp, 384, newHeight, true);
+ }
+
+ printer.appendPrnStr("\n", fontNormal, AlignEnum.CENTER, false);
+ printer.appendImage(bmp, AlignEnum.CENTER);
+ printer.appendPrnStr("\n", fontNormal, AlignEnum.CENTER, false);
+
+ } catch (Exception e) {
+ Log.e("PRINT", "Logo error: " + e.getMessage());
+ }
+ }
+
+
}
diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintX.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintX.java
index 99108f6..56c3e17 100644
--- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintX.java
+++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintX.java
@@ -25,4 +25,7 @@ public interface PrintX {
void printKeyStatus();
+ void printTerminalConfig(PrintXStatus printXStatus);
+
+
}
diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java
index afe203b..f9d3902 100644
--- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java
+++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java
@@ -423,5 +423,21 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
+ @Override
+ public void printTerminalConfig(PrintXStatus printXStatus) {
+ this.callbackStatus = printXStatus;
+
+ try {
+ setHeight(0x12);
+ printLogo();
+ printMerchantHeader();
+ printer.appendPrnStr("TERMINAL CONFIGURATION", fontLarge, AlignEnum.CENTER, true);
+ printTerminalConfiguration();
+ startPrintNex();
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ callbackStatus.onFailure();
+ }
+ }
}
diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXReceipt.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXReceipt.java
index b0d630e..855c5c4 100644
--- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXReceipt.java
+++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXReceipt.java
@@ -54,4 +54,8 @@ public class PrintXReceipt {
public void printDetailReport(PayDetail payDetail, List lists, HostType hostType,PrintXStatus printXStatus) {
printX.printDetailReport(payDetail,lists,hostType,printXStatus);
}
+
+ public void printTerminalHostConfig(PrintXStatus printXStatus){
+ printX.printTerminalConfig(printXStatus);
+ }
}