converted tms configs into kotlin
This commit is contained in:
parent
86998e1fe2
commit
6dc180e791
@ -0,0 +1,6 @@
|
|||||||
|
package com.mob.utsmyanmar.model.sirius
|
||||||
|
|
||||||
|
data class TMSValidity(
|
||||||
|
var status: ValidityStatus? = null,
|
||||||
|
var message: String? = null
|
||||||
|
)
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
package com.mob.utsmyanmar.model.sirius
|
||||||
|
|
||||||
|
enum class ValidityStatus {
|
||||||
|
SUCCESS,
|
||||||
|
FAILURE
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
package com.mob.utsmyanmar.utils.tms
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.os.Build
|
||||||
|
import android.telephony.TelephonyManager
|
||||||
|
import androidx.annotation.RequiresPermission
|
||||||
|
|
||||||
|
object Connectivity {
|
||||||
|
|
||||||
|
fun isConnected(context: Context): Boolean {
|
||||||
|
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
val network = cm.activeNetwork ?: return false
|
||||||
|
val capabilities = cm.getNetworkCapabilities(network) ?: return false
|
||||||
|
return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
|
||||||
|
capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isConnectedWifi(context: Context): Boolean {
|
||||||
|
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
val capabilities = cm.getNetworkCapabilities(cm.activeNetwork ?: return false) ?: return false
|
||||||
|
return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isConnectedMobile(context: Context): Boolean {
|
||||||
|
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
val capabilities = cm.getNetworkCapabilities(cm.activeNetwork ?: return false) ?: return false
|
||||||
|
return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isConnectedFast(context: Context): Boolean {
|
||||||
|
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
val capabilities = cm.getNetworkCapabilities(cm.activeNetwork ?: return false) ?: return false
|
||||||
|
return when {
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
|
||||||
|
// Downstream bandwidth in Kbps; 2000 Kbps = ~2 Mbps threshold for "fast"
|
||||||
|
capabilities.linkDownstreamBandwidthKbps >= 2000
|
||||||
|
}
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
|
||||||
|
fun getNetworkType(context: Context): String {
|
||||||
|
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
val capabilities = cm.getNetworkCapabilities(cm.activeNetwork ?: return "None") ?: return "None"
|
||||||
|
|
||||||
|
if (!capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
|
||||||
|
return when {
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> "WiFi"
|
||||||
|
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> "Ethernet"
|
||||||
|
else -> "Unknown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val tm = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
|
||||||
|
val networkType = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
|
tm.dataNetworkType
|
||||||
|
} else {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
tm.networkType
|
||||||
|
}
|
||||||
|
|
||||||
|
return when (networkType) {
|
||||||
|
TelephonyManager.NETWORK_TYPE_GPRS,
|
||||||
|
TelephonyManager.NETWORK_TYPE_EDGE,
|
||||||
|
TelephonyManager.NETWORK_TYPE_CDMA,
|
||||||
|
TelephonyManager.NETWORK_TYPE_1xRTT,
|
||||||
|
TelephonyManager.NETWORK_TYPE_IDEN -> "2G"
|
||||||
|
|
||||||
|
TelephonyManager.NETWORK_TYPE_UMTS,
|
||||||
|
TelephonyManager.NETWORK_TYPE_EVDO_0,
|
||||||
|
TelephonyManager.NETWORK_TYPE_EVDO_A,
|
||||||
|
TelephonyManager.NETWORK_TYPE_EVDO_B,
|
||||||
|
TelephonyManager.NETWORK_TYPE_HSDPA,
|
||||||
|
TelephonyManager.NETWORK_TYPE_HSUPA,
|
||||||
|
TelephonyManager.NETWORK_TYPE_HSPA,
|
||||||
|
TelephonyManager.NETWORK_TYPE_EHRPD,
|
||||||
|
TelephonyManager.NETWORK_TYPE_HSPAP -> "3G"
|
||||||
|
|
||||||
|
TelephonyManager.NETWORK_TYPE_LTE -> "4G"
|
||||||
|
TelephonyManager.NETWORK_TYPE_NR -> "5G"
|
||||||
|
else -> "Unknown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,6 +3,7 @@ package com.mob.utsmyanmar.utils.tms
|
|||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.mob.utsmyanmar.model.sirius.SiriusResponse
|
import com.mob.utsmyanmar.model.sirius.SiriusResponse
|
||||||
import com.mob.utsmyanmar.model.sirius.TMSUpdate
|
import com.mob.utsmyanmar.model.sirius.TMSUpdate
|
||||||
|
import com.utsmyanmar.baselib.BaseApplication
|
||||||
import com.utsmyanmar.baselib.emv.EmvParamOperation
|
import com.utsmyanmar.baselib.emv.EmvParamOperation
|
||||||
import com.utsmyanmar.baselib.network.model.sirius.SiriusHost
|
import com.utsmyanmar.baselib.network.model.sirius.SiriusHost
|
||||||
import com.utsmyanmar.baselib.network.model.sirius.SiriusMerchant
|
import com.utsmyanmar.baselib.network.model.sirius.SiriusMerchant
|
||||||
@ -236,19 +237,39 @@ class TMSSetupsImpl : TMSSetups {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun convertToArray(string: String): ArrayList<String> {
|
override fun convertToArray(string: String): ArrayList<String> {
|
||||||
TODO("Not yet implemented")
|
if (string.isEmpty()) return ArrayList()
|
||||||
|
return ArrayList(string.split(",").filter { it.isNotEmpty() })
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getPayHardwareVersion(): String {
|
override fun getPayHardwareVersion(): String {
|
||||||
TODO("Not yet implemented")
|
return try {
|
||||||
|
BaseApplication.getInstance().applicationContext.packageManager
|
||||||
|
.getPackageInfo("com.sunmi.pay.hardware_v3", 0)
|
||||||
|
.versionName ?: "?"
|
||||||
|
} catch (e: Exception) {
|
||||||
|
"?"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getRomVersion(): String {
|
override fun getRomVersion(): String {
|
||||||
TODO("Not yet implemented")
|
return try {
|
||||||
|
android.os.Build.VERSION.RELEASE
|
||||||
|
} catch (e: Exception) {
|
||||||
|
"UNKNOWN"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun generateFinalVersion(): String {
|
override fun generateFinalVersion(): String {
|
||||||
TODO("Not yet implemented")
|
val phv = getPayHardwareVersion()
|
||||||
|
val rv = getRomVersion()
|
||||||
|
val sv = try {
|
||||||
|
BaseApplication.getInstance().applicationContext.packageManager
|
||||||
|
.getPackageInfo(BaseApplication.getInstance().packageName, 0)
|
||||||
|
.versionName ?: "?"
|
||||||
|
} catch (e: Exception) {
|
||||||
|
"?"
|
||||||
|
}
|
||||||
|
return "PHV$phv-RV$rv-SV$sv"
|
||||||
}
|
}
|
||||||
private fun parseBoolean(data: String): Boolean =
|
private fun parseBoolean(data: String): Boolean =
|
||||||
data.toIntOrNull()?.let { it == 1 } ?: data.toBoolean();
|
data.toIntOrNull()?.let { it == 1 } ?: data.toBoolean();
|
||||||
|
|||||||
165
app/src/main/java/com/mob/utsmyanmar/utils/tms/TMSUtil.kt
Normal file
165
app/src/main/java/com/mob/utsmyanmar/utils/tms/TMSUtil.kt
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
package com.mob.utsmyanmar.utils.tms
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.BatteryManager
|
||||||
|
import android.os.Build
|
||||||
|
import androidx.annotation.RequiresPermission
|
||||||
|
import com.mob.utsmyanmar.model.sirius.TMSValidity
|
||||||
|
import com.mob.utsmyanmar.model.sirius.ValidityStatus
|
||||||
|
import com.mob.utsmyanmar.viewmodel.SharedViewModel
|
||||||
|
import com.sunmi.pay.hardware.aidl.AidlConstants
|
||||||
|
import com.utsmyanmar.baselib.BaseApplication
|
||||||
|
import com.utsmyanmar.baselib.network.model.sirius.SiriusRequest
|
||||||
|
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation
|
||||||
|
import sunmi.sunmiui.BuildConfig
|
||||||
|
import sunmi.sunmiui.utils.LogUtil
|
||||||
|
|
||||||
|
class TMSUtil private constructor() {
|
||||||
|
private val tmsSetups: TMSSetups = TMSSetupsImpl();
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val TAG = TMSUtil::class.java.simpleName
|
||||||
|
|
||||||
|
@Volatile
|
||||||
|
private var app: TMSUtil? = null
|
||||||
|
|
||||||
|
fun getInstance(): TMSUtil = app ?: synchronized(this) {
|
||||||
|
app ?: TMSUtil().also { app = it }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Param Init ---
|
||||||
|
fun initParams(json: String) {
|
||||||
|
tmsSetups.initParams(json)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun convertToArray(string: String): ArrayList<String> = tmsSetups.convertToArray(string)
|
||||||
|
|
||||||
|
fun getPayHardwareVersion(): String = tmsSetups.getPayHardwareVersion()
|
||||||
|
|
||||||
|
fun getRomVersion(): String = tmsSetups.getRomVersion()
|
||||||
|
|
||||||
|
fun generateFinalVersion(): String = tmsSetups.generateFinalVersion()
|
||||||
|
|
||||||
|
//---shared view model---
|
||||||
|
fun loadDownloadParameters(sharedViewModel: SharedViewModel) {
|
||||||
|
sharedViewModel.setManualEntryStatus(SystemParamsOperation.getInstance().manualEntryStatus)
|
||||||
|
}
|
||||||
|
|
||||||
|
//---system params---
|
||||||
|
fun getSystemParams(name: String): String = runCatching {
|
||||||
|
BaseApplication.basicOptV2.getSysParam(name)
|
||||||
|
}.getOrDefault("")
|
||||||
|
|
||||||
|
fun getSerialNumber(): String = runCatching {
|
||||||
|
BaseApplication.basicOptV2.getSysParam("SN")
|
||||||
|
}.getOrDefault("")
|
||||||
|
|
||||||
|
@RequiresPermission(Manifest.permission.READ_PHONE_STATE)
|
||||||
|
fun generateRequestParams(lastTransName: String, lastTransTime: String): SiriusRequest =
|
||||||
|
SiriusRequest().apply {
|
||||||
|
serial = getSerialNumber()
|
||||||
|
appPackage = BuildConfig.APPLICATION_ID
|
||||||
|
androidVersion = Build.VERSION.RELEASE
|
||||||
|
firmwareVersion = getSystemParams(AidlConstants.SysParam.FIRMWARE_VERSION)
|
||||||
|
currentNetwork = getNetworkType()
|
||||||
|
lastTransaction = lastTransName
|
||||||
|
lastTranTime = lastTransTime
|
||||||
|
}
|
||||||
|
|
||||||
|
//---logging--
|
||||||
|
fun retrieveParameters() {
|
||||||
|
val ops = SystemParamsOperation.getInstance()
|
||||||
|
LogUtil.d(TAG, "TID: ${ops.terminalId}")
|
||||||
|
LogUtil.d(TAG, "MID: ${ops.merchantId}")
|
||||||
|
LogUtil.d(TAG, "Merchant Name: ${ops.merchantName}")
|
||||||
|
LogUtil.d(TAG, "Merchant Address: ${ops.merchantAddress}")
|
||||||
|
LogUtil.d(TAG, "Host Timeout: ${ops.hostResponseTimeout}")
|
||||||
|
LogUtil.d(TAG, "TMS Timeout: ${ops.tmsTimeOut}")
|
||||||
|
LogUtil.d(TAG, "Key Index: ${ops.tmkIndex}")
|
||||||
|
LogUtil.d(TAG, "Receipt Footer: ${ops.receiptFooter}")
|
||||||
|
LogUtil.d(TAG, "Manual Update: ${ops.manualUpdate}")
|
||||||
|
LogUtil.d(TAG, "Master Enabled: ${ops.isEmvEnabled}")
|
||||||
|
}
|
||||||
|
|
||||||
|
//---checks---
|
||||||
|
fun checkParams(): TMSValidity {
|
||||||
|
val ops = SystemParamsOperation.getInstance()
|
||||||
|
val tid = ops.terminalId
|
||||||
|
val mid = ops.merchantId
|
||||||
|
val hostIp = ops.ipAddress
|
||||||
|
val secIp = ops.secIpAddress
|
||||||
|
val keyIndex = ops.tmkIndex
|
||||||
|
|
||||||
|
return when {
|
||||||
|
tid.length == 8 && mid.length == 15 && hostIp.isNotEmpty() && secIp.isNotEmpty() && keyIndex.isNotEmpty() -> TMSValidity(
|
||||||
|
ValidityStatus.SUCCESS, "Success"
|
||||||
|
)
|
||||||
|
|
||||||
|
tid.length != 8 -> TMSValidity(ValidityStatus.FAILURE, "Tid is invalid")
|
||||||
|
mid.length != 15 -> TMSValidity(ValidityStatus.FAILURE, "Mid is invalid")
|
||||||
|
hostIp.isEmpty() -> TMSValidity(ValidityStatus.FAILURE, "host ip is empty")
|
||||||
|
secIp.isEmpty() -> TMSValidity(ValidityStatus.FAILURE, "sec ip is empty")
|
||||||
|
|
||||||
|
else -> TMSValidity(ValidityStatus.FAILURE, "KeyIndex is invalid")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun checkSecHostParams(): TMSValidity {
|
||||||
|
val ops = SystemParamsOperation.getInstance()
|
||||||
|
val tid = ops.secHostTerminalId
|
||||||
|
val mid = ops.secHostMerchantId
|
||||||
|
val hostIp = ops.secHostIpAddress
|
||||||
|
val secIp = ops.secHostSecIpAddress
|
||||||
|
val keyIndex = ops.tmkIndex
|
||||||
|
|
||||||
|
return when {
|
||||||
|
tid.length == 8 && mid.length == 15 && hostIp.isNotEmpty() && secIp.isNotEmpty() && keyIndex.isNotEmpty()
|
||||||
|
-> TMSValidity(ValidityStatus.SUCCESS, "Success")
|
||||||
|
|
||||||
|
tid.length != 8 -> TMSValidity(ValidityStatus.FAILURE, "MMQR Tid is invalid!")
|
||||||
|
mid.length != 15 -> TMSValidity(ValidityStatus.FAILURE, "MMQR Mid is invalid!")
|
||||||
|
hostIp.isEmpty() -> TMSValidity(ValidityStatus.FAILURE, "MMQR Pri-Ip is invalid!")
|
||||||
|
else -> TMSValidity(ValidityStatus.FAILURE, "MMQR Sec-Ip is invalid!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//---helpers---
|
||||||
|
private fun getTransactionStatus(code: String): String = when (code) {
|
||||||
|
"00" -> "Transaction Approved"
|
||||||
|
else -> "Transaction Failed, reason : $code"
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getBoolean(data: String): Boolean = data == "1"
|
||||||
|
|
||||||
|
private fun getBatteryLevel(context: Context): Int {
|
||||||
|
val bm = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
|
||||||
|
return bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresPermission(Manifest.permission.READ_PHONE_STATE)
|
||||||
|
private fun getNetworkType(): String {
|
||||||
|
val ctx = BaseApplication.getInstance().applicationContext
|
||||||
|
|
||||||
|
return when {
|
||||||
|
Connectivity.isConnectedWifi(ctx) -> {
|
||||||
|
LogUtil.d(TAG, "Connected to Wifi")
|
||||||
|
"WIFI"
|
||||||
|
}
|
||||||
|
|
||||||
|
Connectivity.isConnectedMobile(ctx) -> {
|
||||||
|
val type = try {
|
||||||
|
Connectivity.getNetworkType(ctx)
|
||||||
|
} catch (e: SecurityException) {
|
||||||
|
LogUtil.d(TAG, "READ_PHONE_STATE permission not granted: ${e.message}")
|
||||||
|
"MOBILE"
|
||||||
|
}
|
||||||
|
LogUtil.d(TAG, "Connected to Mobile Network: $type")
|
||||||
|
type
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> "No Internet Connection"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user