From 8019ed2c3086c3b252d93728da00903a8bc58637 Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Tue, 13 Feb 2024 17:57:38 +0530 Subject: [PATCH] add refresh and qr code scan - jig --- app/build.gradle | 8 +- app/src/main/AndroidManifest.xml | 1 - .../hpostesting/data/model/jig/JigData.kt | 9 ++ .../data/repository/DatabaseRepository.kt | 14 ++- .../hpostesting/data/repository/Repository.kt | 3 + .../presentation/KitScanActivity.kt | 1 - .../dashboard/DashboardActivity.kt | 10 +- .../presentation/dashboard/HomeFragment.kt | 10 +- .../presentation/jig/JigActivity.kt | 3 + .../presentation/jig/JigFragment.kt | 99 +++++++++++++++---- .../presentation/jig/JigViewModel.kt | 6 +- app/src/main/res/layout/fragment_jig.xml | 22 ++++- 12 files changed, 140 insertions(+), 46 deletions(-) create mode 100644 app/src/main/java/com/example/hpostesting/data/model/jig/JigData.kt 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" /> + +