diff --git a/app/build.gradle b/app/build.gradle
index 2a45189..33d4922 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -14,13 +14,13 @@ android {
compileSdk 34
namespace 'in.sminnovations.hpostesting'
- // dev - development, quality - qc, uat - User Acceptance Test, preprod - preproduction, prod - production
+ // dev -> development, quality -> qc, uat -> User Acceptance Testing, preprod -> preproduction, prod -> production, iocl -> iocl-iisc production
defaultConfig {
- applicationId "in.sminnovations.hpostesting.dev"
+ applicationId "in.sminnovations.hpostesting.quality"
minSdk 21
targetSdk 34
- versionCode 111
- versionName "2.1.111"
+ versionCode 114
+ versionName "2.1.114"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b5fbefa..6a31cea 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,7 +51,6 @@
{
+ return try {
+ db.collection("jigs").add(data!!).await()
+ Response.Success(data.deviceId)
+ } catch (e: Exception) {
+ Firebase.crashlytics.recordException(e)
+ Response.Error(e)
+ }
+ }
+
override suspend fun uploadFileToStorage(
patientID: String, filePath: String
): Response {
@@ -216,9 +227,6 @@ class DatabaseRepository @Inject constructor(
}
}
-
-
-
override suspend fun uploadDeviceId(data: DeviceData): Response? {
return try {
db.collection("devices").add(data!!).await()
diff --git a/app/src/main/java/com/example/hpostesting/data/repository/Repository.kt b/app/src/main/java/com/example/hpostesting/data/repository/Repository.kt
index 676b7b6..3a35715 100644
--- a/app/src/main/java/com/example/hpostesting/data/repository/Repository.kt
+++ b/app/src/main/java/com/example/hpostesting/data/repository/Repository.kt
@@ -5,6 +5,7 @@ import com.example.hpostesting.data.model.Response
import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionRequest
import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionResponse
import com.example.hpostesting.data.model.diagnostics.DiagnosticsData
+import com.example.hpostesting.data.model.jig.JigData
import com.example.hpostesting.data.model.log.UploadLogsResponse
import com.example.hpostesting.data.model.login.LoginRequest
import com.example.hpostesting.data.model.login.LoginResponse
@@ -29,6 +30,8 @@ interface Repository {
suspend fun addDiagnostics(data: DiagnosticsData?): Response
+ suspend fun addTestJigData(data: JigData?): Response
+
suspend fun uploadFileToStorage(patientID: String, filePath: String): Response
suspend fun getDeviceDataById(deviceId: String): DeviceData?
diff --git a/app/src/main/java/com/example/hpostesting/presentation/KitScanActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/KitScanActivity.kt
index 5118148..f5b87e4 100644
--- a/app/src/main/java/com/example/hpostesting/presentation/KitScanActivity.kt
+++ b/app/src/main/java/com/example/hpostesting/presentation/KitScanActivity.kt
@@ -229,7 +229,6 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
} else {
Toast.makeText(this,"Error", Toast.LENGTH_LONG).show()
}
-
}
private fun pullTrigger() {
diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt
index 55b49b8..3153f95 100644
--- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt
+++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt
@@ -94,11 +94,11 @@ class DashboardActivity : AppCompatActivity(), IDataCollector {
// val apkUrl = "https://dl.dropboxusercontent.com/s/fi/1c3nn7t0co431hicl3hrt/app-debug.apk?rlkey=e4uf13ty1dpcked614vy1aaqp&dl=0"
initiateUpdate(apkUrl.toString())
Log.d("ApI", "APK URL: $apkUrl")
- Toast.makeText(
- this,
- "APK UPLOAD ${result.data}",
- Toast.LENGTH_SHORT
- ).show()
+// Toast.makeText(
+// this,
+// "APK UPLOAD ${result.data}",
+// Toast.LENGTH_SHORT
+// ).show()
}
is Result.Error -> {
diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt
index 8815933..49359b7 100644
--- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt
+++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt
@@ -320,11 +320,11 @@ class HomeFragment : Fragment() {
hemoCubeViewModel.uploadLogs.observe(viewLifecycleOwner) { response ->
when (response) {
is Result.Success -> {
- Toast.makeText(
- requireContext(),
- "Log uploaded ${response.data.data?.filename}",
- Toast.LENGTH_SHORT
- ).show()
+// Toast.makeText(
+// requireContext(),
+// "Log uploaded ${response.data.data?.filename}",
+// Toast.LENGTH_SHORT
+// ).show()
}
is Result.Error -> {
diff --git a/app/src/main/java/com/example/hpostesting/presentation/jig/JigActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/jig/JigActivity.kt
index e6848f1..53950f0 100644
--- a/app/src/main/java/com/example/hpostesting/presentation/jig/JigActivity.kt
+++ b/app/src/main/java/com/example/hpostesting/presentation/jig/JigActivity.kt
@@ -8,6 +8,7 @@ import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.ServiceConnection
+import android.content.pm.ActivityInfo
import android.hardware.usb.UsbDevice
import android.hardware.usb.UsbDeviceConnection
import android.hardware.usb.UsbManager
@@ -90,6 +91,8 @@ class JigActivity: AppCompatActivity(){
// setupListener()
// connectUsb(false)
+ this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE)
+
moveToNext()
}
diff --git a/app/src/main/java/com/example/hpostesting/presentation/jig/JigFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/jig/JigFragment.kt
index 83f9a35..9a7204a 100644
--- a/app/src/main/java/com/example/hpostesting/presentation/jig/JigFragment.kt
+++ b/app/src/main/java/com/example/hpostesting/presentation/jig/JigFragment.kt
@@ -1,7 +1,9 @@
package com.example.hpostesting.presentation.jig
+import android.annotation.SuppressLint
import android.content.Context
import android.content.SharedPreferences
+import android.content.pm.PackageManager
import android.os.Bundle
import android.text.Editable
import android.util.Log
@@ -13,6 +15,8 @@ import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.MutableLiveData
+import com.example.hpostesting.data.constant.Constants
+import com.example.hpostesting.data.model.jig.JigData
import com.example.hpostesting.data.model.patient.DeviceData
import com.journeyapps.barcodescanner.ScanContract
import com.journeyapps.barcodescanner.ScanIntentResult
@@ -23,8 +27,11 @@ import com.zebra.scannercontrol.FirmwareUpdateEvent
import com.zebra.scannercontrol.IDcsSdkApiDelegate
import com.zebra.scannercontrol.SDKHandler
import `in`.sminnovations.hpostesting.databinding.FragmentJigBinding
+import java.text.SimpleDateFormat
+import java.util.Calendar
+import java.util.Locale
-class JigFragment: Fragment(), IDcsSdkApiDelegate {
+class JigFragment : Fragment(), IDcsSdkApiDelegate {
private lateinit var binding: FragmentJigBinding
private val jigViewModel: JigViewModel by activityViewModels()
private lateinit var sharedPreferences: SharedPreferences
@@ -44,16 +51,54 @@ class JigFragment: Fragment(), IDcsSdkApiDelegate {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ initScanner()
initViews()
observeViewModel()
}
- private fun initViews() {
- binding.btnSubmit.visibility = View.GONE
+ private fun initScanner() {
+ //Setting up the SDK handler
+ sdkHandler = SDKHandler(requireContext())
+ //Registers a particular object which conforms to IDcsSdkApiDelegate interface as a receiver of SDK notifications.
+ sdkHandler!!.dcssdkSetDelegate(this)
+ //this command is telling the sdk that we're going to be connecting to the scanner via USB
+ sdkHandler!!.dcssdkSetOperationalMode(DCSSDKDefs.DCSSDK_MODE.DCSSDK_OPMODE_SNAPI)
+ //deciding what kind of notifications we want to receive. Explained more in the function
+ //first we use bitmapping to set these values into the notifications_mask.
+ var notifications_mask = 0
+ // We would like to subscribe to all barcode events
+ notifications_mask =
+ notifications_mask or DCSSDKDefs.DCSSDK_EVENT.DCSSDK_EVENT_BARCODE.value
+ sdkHandler!!.dcssdkSubsribeForEvents(notifications_mask)
+ mScannerInfoList.addAll(sdkHandler!!.dcssdkGetAvailableScannersList())
+ Log.e("scannersize", sdkHandler!!.dcssdkGetAvailableScannersList().size.toString())
+ if (mScannerInfoList.isNotEmpty()) {
+ sdkHandler!!.dcssdkEstablishCommunicationSession(mScannerInfoList[0].scannerID)
+ } else {
+ Toast.makeText(requireContext(), "Scanner Error", Toast.LENGTH_LONG).show()
+ }
+ }
+
+ @SuppressLint("SetTextI18n")
+ private fun initViews() {
binding.btnScanNow.setOnClickListener {
pullTrigger()
}
+
+ binding.btnRefresh.setOnClickListener {
+ activity?.recreate()
+ initScanner()
+
+ activity?.runOnUiThread {
+ binding.tvScanText.text = ""
+ }
+ }
+
+ activity?.runOnUiThread {
+ binding.tvAppVersion.text =
+ getAppVersion(requireContext()) + " [ " + getAppEnvironment(requireContext()) + " ]"
+ }
}
private fun observeViewModel() {
@@ -68,29 +113,32 @@ class JigFragment: Fragment(), IDcsSdkApiDelegate {
jigViewModel.fireBaseUpload.observe(viewLifecycleOwner) { result ->
if (result == "Success") {
- showToast("Auto Dac data uploaded successfully")
+ showToast("Data uploaded successfully")
}
if (result == "Local") {
- showToast("Auto Dac uploading failed, note it down manually")
+ showToast("Data uploading failed, note it down manually")
}
binding.progressBar.visibility = View.GONE
}
}
- fun parseData(inputData: List): List> {
- val pattern = Regex("([A-Z]+)\\s(\\d+)")
- val parsedData = mutableListOf>()
-
- for (item in inputData) {
- val matchResult = pattern.find(item)
- if (matchResult != null) {
- val (letters, numbers) = matchResult.destructured
- parsedData.add(Pair(letters, numbers))
- }
+ private fun getAppVersion(context: Context): String {
+ return try {
+ val pInfo = context.packageManager.getPackageInfo(context.packageName, 0)
+ pInfo.versionName
+ } catch (e: PackageManager.NameNotFoundException) {
+ "N/A"
}
+ }
- return parsedData
+ private fun getAppEnvironment(context: Context): String {
+ return try {
+ val pInfo = context.packageManager.getPackageInfo(context.packageName, 0)
+ pInfo.packageName.substringAfterLast('.')
+ } catch (e: PackageManager.NameNotFoundException) {
+ "N/A"
+ }
}
private fun showToast(message: String) {
@@ -127,7 +175,10 @@ class JigFragment: Fragment(), IDcsSdkApiDelegate {
val outXML = StringBuilder()
val result: DCSSDKDefs.DCSSDK_RESULT =
sdkHandler!!.dcssdkExecuteCommandOpCodeInXMLForScanner(
- DCSSDKDefs.DCSSDK_COMMAND_OPCODE.DCSSDK_DEVICE_PULL_TRIGGER, inXML, outXML, mScannerInfoList[0].scannerID // Ensure you're using the correct scanner ID
+ DCSSDKDefs.DCSSDK_COMMAND_OPCODE.DCSSDK_DEVICE_PULL_TRIGGER,
+ inXML,
+ outXML,
+ mScannerInfoList[0].scannerID // Ensure you're using the correct scanner ID
)
if (result == DCSSDKDefs.DCSSDK_RESULT.DCSSDK_RESULT_SUCCESS) {
Log.d("Scanning", "Success")
@@ -145,7 +196,17 @@ class JigFragment: Fragment(), IDcsSdkApiDelegate {
Log.d("BARCODE", result)
activity?.runOnUiThread {
val editableResult: Editable = Editable.Factory.getInstance().newEditable(result)
- binding.tvScanText.text = editableResult
+ binding.tvScanText.text = result
+
+ jigViewModel.addScanDataToDb(
+ JigData(
+ deviceId = sharedPreferences.getString(Constants.DEVICE_ID, "").toString(),
+ scanData = result,
+ createdAt = SimpleDateFormat(
+ "yyyy-MM-dd HH:mm:ss", Locale.getDefault()
+ ).format(Calendar.getInstance().time)
+ )
+ )
}
}
@@ -171,7 +232,7 @@ class JigFragment: Fragment(), IDcsSdkApiDelegate {
override fun dcssdkEventAuxScannerAppeared(
dcsScannerInfo: DCSScannerInfo?,
- dcsScannerInfo1: DCSScannerInfo?
+ dcsScannerInfo1: DCSScannerInfo?,
) {
}
diff --git a/app/src/main/java/com/example/hpostesting/presentation/jig/JigViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/jig/JigViewModel.kt
index 64970b7..c51678c 100644
--- a/app/src/main/java/com/example/hpostesting/presentation/jig/JigViewModel.kt
+++ b/app/src/main/java/com/example/hpostesting/presentation/jig/JigViewModel.kt
@@ -7,7 +7,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.hpostesting.data.dao.HemoCubeDao
import com.example.hpostesting.data.model.Response
-import com.example.hpostesting.data.model.diagnostics.DiagnosticsData
+import com.example.hpostesting.data.model.jig.JigData
import com.example.hpostesting.data.model.patient.DeviceData
import com.example.hpostesting.data.repository.Repository
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -29,10 +29,10 @@ class JigViewModel @Inject constructor(
val deviceData = MutableLiveData()
val fireBaseUpload = MutableLiveData()
- fun addAutoDacDataToDb(data: DiagnosticsData) {
+ fun addScanDataToDb(data: JigData) {
viewModelScope.launch {
try {
- when (val response = repository.addDiagnostics(data)) {
+ when (val response = repository.addTestJigData(data)) {
is Response.Success -> {
fireBaseUpload.postValue("Success")
}
diff --git a/app/src/main/res/layout/fragment_jig.xml b/app/src/main/res/layout/fragment_jig.xml
index 9967b62..74caab0 100644
--- a/app/src/main/res/layout/fragment_jig.xml
+++ b/app/src/main/res/layout/fragment_jig.xml
@@ -18,6 +18,18 @@
app:layout_constraintTop_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+ app:layout_constraintTop_toBottomOf="@id/btn_scan_now" />