WORKING COMMIT
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
package com.example.hpos
|
||||
|
||||
import android.app.Application
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
|
||||
class MyApplication : Application() {
|
||||
|
||||
val applicationScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
||||
|
||||
// private val sampleDetails = PatientDetails("Change it later");
|
||||
// fun getSampleDetails() : PatientDetails = sampleDetails
|
||||
// fun setSampleDetails(sample: SampleDetails) {sampleDetails = sample}
|
||||
|
||||
@@ -1,4 +1,47 @@
|
||||
package com.example.hpos.data
|
||||
|
||||
import android.util.Log
|
||||
import com.example.hpos.data.model.Response
|
||||
import com.example.hpos.data.repository.DatabaseRepository
|
||||
import com.example.hpos.util.MyUtils
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import java.lang.Thread.sleep
|
||||
|
||||
class FileUploader {
|
||||
|
||||
private val TAG = "FileUploader"
|
||||
val repository = DatabaseRepository()
|
||||
|
||||
suspend fun start() {
|
||||
|
||||
val listOfFiles = repository.getAllFromPendingQueue()
|
||||
|
||||
for (each in listOfFiles){
|
||||
// Checking internet connectivity & mobile as same or not
|
||||
if (MyUtils.isInternetConnected() && each.mobileId == DataHolder.mobileUniqueId) {
|
||||
|
||||
Log.d(TAG, "uploading file ${each.pendingId}")
|
||||
GlobalScope.launch {
|
||||
val response = repository.uploadFileToStorage(each.patientId, each.filePath)
|
||||
|
||||
when (response) {
|
||||
is Response.Success -> {
|
||||
Log.d(TAG, "File Uploaded ${each.pendingId}")
|
||||
repository.removeFromPendingQueue(each.pendingId)
|
||||
}
|
||||
|
||||
is Response.Error -> {
|
||||
Log.d(TAG, response.exception.toString())
|
||||
}
|
||||
}
|
||||
}.join()
|
||||
|
||||
} else {
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,11 +1,15 @@
|
||||
package com.example.hpos.data.model
|
||||
|
||||
import java.util.Calendar
|
||||
import java.util.Date
|
||||
|
||||
data class PendingUploads(
|
||||
// Filename
|
||||
val pendingId: String,
|
||||
val mobileId: String,
|
||||
val patientId: String,
|
||||
val filePath: String,
|
||||
val timeAdded: Date
|
||||
)
|
||||
) {
|
||||
constructor(): this("", "", "", "", Calendar.getInstance().time)
|
||||
}
|
||||
|
||||
@@ -83,11 +83,11 @@ class DatabaseRepository : Repository {
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun uploadFileToStorage(id: String, filePath: String): Response<Boolean> {
|
||||
suspend fun uploadFileToStorage(patientID: String, filePath: String): Response<Boolean> {
|
||||
try {
|
||||
|
||||
val file = Uri.fromFile(File(filePath))
|
||||
val riversRef = storage.reference.child("$id/${file.lastPathSegment}")
|
||||
val riversRef = storage.reference.child("$patientID/${file.lastPathSegment}")
|
||||
riversRef.putFile(file).await()
|
||||
return Response.Success(true)
|
||||
|
||||
@@ -111,10 +111,29 @@ class DatabaseRepository : Repository {
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun removeFromPendingQueue(pendingId: String): Response<Boolean> {
|
||||
suspend fun getAllFromPendingQueue(): List<PendingUploads> {
|
||||
val pendingList = mutableListOf<PendingUploads>()
|
||||
return try {
|
||||
val querySnapshot = db.collection("pendingUploads").orderBy("timeAdded").get().await()
|
||||
|
||||
for (doc in querySnapshot.documents){
|
||||
val pendingFile = doc.toObject(PendingUploads::class.java)
|
||||
pendingFile?.let {
|
||||
pendingList.add(it)
|
||||
}
|
||||
}
|
||||
pendingList
|
||||
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
pendingList
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun removeFromPendingQueue(fileName: String): Response<Boolean> {
|
||||
return try {
|
||||
db.collection("pendingUploads")
|
||||
.document(pendingId)
|
||||
.document(fileName)
|
||||
.delete()
|
||||
.await()
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.example.hpos.R
|
||||
import com.example.hpos.data.DataHolder
|
||||
import com.example.hpos.data.constant.Constants
|
||||
import com.example.hpos.databinding.ActivityKitScanBinding
|
||||
@@ -51,7 +52,8 @@ class KitScanActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
binding.btnGo.setOnClickListener {
|
||||
if (binding.nameEditText.text.toString().trim().isNotEmpty() && checkDataNotNull()) {
|
||||
val serialNumber = binding.nameEditText.text.toString().trim()
|
||||
if (serialNumber.isNotEmpty() && checkDataNotNull() && isSerialValid(serialNumber)) {
|
||||
DataHolder.selectedTest!!.kitSerial = binding.nameEditText.text.toString()
|
||||
moveToNext()
|
||||
} else {
|
||||
@@ -60,6 +62,14 @@ class KitScanActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun isSerialValid(s: String): Boolean {
|
||||
if (s.length != 17){
|
||||
binding.nameEditText.error = getString(R.string.invalid_kit)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun moveToNext() {
|
||||
val i = Intent(applicationContext, TestRightActivity::class.java)
|
||||
startActivity(i)
|
||||
|
||||
@@ -121,7 +121,7 @@ class MainActivity : AppCompatActivity() {
|
||||
menuInflater.inflate(R.menu.my_menu, menu)
|
||||
myMenu = menu
|
||||
// Todo: Uncomment this
|
||||
// checkAndUpdateUsbConnection()
|
||||
checkAndUpdateUsbConnection()
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package com.example.hpos.presentation
|
||||
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RadioButton
|
||||
import android.widget.RadioGroup
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.example.hpos.R
|
||||
@@ -36,12 +38,14 @@ class RVAdapter : RecyclerView.Adapter<RVAdapter.ViewHolder>() {
|
||||
val tvName: TextView
|
||||
val tvStatus: TextView
|
||||
val radioButton: RadioButton
|
||||
val radioGroup: RadioGroup
|
||||
|
||||
init {
|
||||
tvId = view.findViewById(R.id.tv_id)
|
||||
tvName = view.findViewById(R.id.tv_name)
|
||||
tvStatus = view.findViewById(R.id.tv_status)
|
||||
radioButton = view.findViewById(R.id.radioButton)
|
||||
radioGroup = view.findViewById(R.id.radio_group)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,21 +57,24 @@ class RVAdapter : RecyclerView.Adapter<RVAdapter.ViewHolder>() {
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
Log.d("RVAdapter", "onBindViewHolder called() : pos = ${position}")
|
||||
val idString = "ID: " + dataset[position].patientID
|
||||
holder.tvId.text = idString
|
||||
holder.tvName.text = dataset[position].patientName
|
||||
holder.tvStatus.text = dataset[position].testStatus.toString()
|
||||
|
||||
holder.radioGroup.clearCheck()
|
||||
if (dataset[position].testStatus == Status.PENDING) {
|
||||
holder.radioButton.isChecked = (position
|
||||
== selectedPosition)
|
||||
holder.radioButton.isChecked = (position == selectedPosition)
|
||||
} else {
|
||||
holder.radioButton.isEnabled = false
|
||||
}
|
||||
|
||||
holder.radioButton.setOnCheckedChangeListener { compoundButton, b ->
|
||||
Log.d("RVAdapter", "setOnCheckedChangeListener called() : pos = ${position}")
|
||||
// check condition
|
||||
if (b) {
|
||||
Log.d("RVAdapter", "setOnCheckedChangeListener called() -> b true : pos = ${position}")
|
||||
// When checked update selected position
|
||||
selectedPosition = holder.adapterPosition
|
||||
itemClickListener!!.onClick(position)
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
package com.example.hpos.presentation
|
||||
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RadioButton
|
||||
import android.widget.RadioGroup
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.example.hpos.R
|
||||
import com.example.hpos.data.model.test.Status
|
||||
import com.example.hpos.data.model.test.TestDetails
|
||||
import com.example.hpos.presentation.dashboard.ItemClickListener
|
||||
|
||||
class RecyclerViewAdapter : RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>() {
|
||||
|
||||
private val dataset = ArrayList<TestDetails>()
|
||||
|
||||
var itemClickListener: ItemClickListener? = null
|
||||
|
||||
var selectedPosition = -1
|
||||
var prev = -1
|
||||
|
||||
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
||||
val tvId: TextView = view.findViewById(R.id.tv_id)
|
||||
val tvName: TextView = view.findViewById(R.id.tv_name)
|
||||
val tvStatus: TextView = view.findViewById(R.id.tv_status)
|
||||
val radioButton: RadioButton = view.findViewById(R.id.radioButton)
|
||||
val radioGroup: RadioGroup = view.findViewById(R.id.radio_group)
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
val view = LayoutInflater.from(parent.context)
|
||||
.inflate(R.layout.table_item, parent, false)
|
||||
|
||||
return ViewHolder(view)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
Log.d("RVAdapter", "onBindViewHolder called() : pos = ${position}")
|
||||
val idString = "ID: " + dataset[position].patientID
|
||||
holder.tvId.text = idString
|
||||
holder.tvName.text = dataset[position].patientName
|
||||
holder.tvStatus.text = dataset[position].testStatus.toString()
|
||||
|
||||
|
||||
Log.d("RVAdapter", "For ${dataset[position].patientName}, selected = $selectedPosition")
|
||||
|
||||
holder.radioGroup.clearCheck()
|
||||
if (dataset[position].testStatus == Status.PENDING) {
|
||||
holder.radioButton.isEnabled = true
|
||||
holder.radioButton.isChecked = (position == selectedPosition)
|
||||
Log.d("RVAdapter", "inside pending if")
|
||||
} else {
|
||||
holder.radioButton.isChecked = false
|
||||
holder.radioButton.isEnabled = false
|
||||
Log.d("RVAdapter", "inside pending else")
|
||||
}
|
||||
|
||||
holder.radioButton.setOnClickListener {
|
||||
setSelectedItem(position)
|
||||
}
|
||||
holder.itemView.setOnClickListener {
|
||||
setSelectedItem(position)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setSelectedItem(position: Int) {
|
||||
Log.d("RVAdapter", "setOnCheckedChangeListener called() -> b true : pos = $position")
|
||||
|
||||
if (position != selectedPosition && dataset[position].testStatus == Status.PENDING) {
|
||||
prev = selectedPosition
|
||||
selectedPosition = position
|
||||
itemClickListener!!.onClick(position)
|
||||
|
||||
if (prev != -1) {
|
||||
notifyItemChanged(prev)
|
||||
}
|
||||
notifyItemChanged(position)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return dataset.size
|
||||
}
|
||||
|
||||
fun updateDataSet(newDataSet: ArrayList<TestDetails>) {
|
||||
dataset.clear()
|
||||
dataset.addAll(newDataSet)
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,13 +13,17 @@ import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.example.hpos.MyApplication
|
||||
import com.example.hpos.data.DataHolder
|
||||
import com.example.hpos.data.FileUploader
|
||||
import com.example.hpos.databinding.ActivitySplashBinding
|
||||
import com.example.hpos.presentation.dashboard.DashboardActivity
|
||||
import com.example.hpos.util.MyUtils
|
||||
import com.google.firebase.firestore.FirebaseFirestoreSettings
|
||||
import com.google.firebase.firestore.ktx.firestore
|
||||
import com.google.firebase.ktx.Firebase
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
|
||||
/**
|
||||
@@ -41,7 +45,6 @@ class SplashActivity : AppCompatActivity() {
|
||||
setContentView(binding.root)
|
||||
|
||||
setupFirestoreCache()
|
||||
setupStaticConstants()
|
||||
|
||||
checkForStoragePermissions()
|
||||
checkForLocationPermission()
|
||||
@@ -52,6 +55,22 @@ class SplashActivity : AppCompatActivity() {
|
||||
// Log.d("surya_permission", "passed first")
|
||||
checkAllPermissionsGiven()
|
||||
|
||||
setupStaticConstants()
|
||||
|
||||
startWorker()
|
||||
|
||||
// GlobalScope.launch(Dispatchers.IO) {
|
||||
// FileUploader().uploadFiles(listOf())
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
private fun startWorker() {
|
||||
if (MyUtils.isInternetConnected()) {
|
||||
(applicationContext as MyApplication).applicationScope.launch(Dispatchers.IO) {
|
||||
FileUploader().start()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupStaticConstants() {
|
||||
|
||||
@@ -59,4 +59,5 @@ class DashboardActivity : AppCompatActivity() {
|
||||
val navController = findNavController(R.id.nav_host_fragment_content_dashboard)
|
||||
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -10,11 +10,13 @@ import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE
|
||||
import com.example.hpos.R
|
||||
import com.example.hpos.data.DataHolder
|
||||
import com.example.hpos.data.model.patient.PatientDetails
|
||||
import com.example.hpos.databinding.FragmentHomeBinding
|
||||
import com.example.hpos.presentation.RVAdapter
|
||||
import com.example.hpos.presentation.RecyclerViewAdapter
|
||||
|
||||
class HomeFragment : Fragment() {
|
||||
|
||||
@@ -24,7 +26,8 @@ class HomeFragment : Fragment() {
|
||||
private val viewModel: DashboardViewModel by activityViewModels()
|
||||
// private val viewModel: DashboardViewModel by activityViewModels{ MyViewModelFactory() }
|
||||
|
||||
private lateinit var rvAdapter: RVAdapter
|
||||
// private lateinit var rvAdapter: RVAdapter
|
||||
private lateinit var rvAdapter: RecyclerViewAdapter
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
@@ -33,13 +36,12 @@ class HomeFragment : Fragment() {
|
||||
): View {
|
||||
try {
|
||||
_binding = FragmentHomeBinding.inflate(inflater, container, false)
|
||||
// DataHolder.selectedTest = TestDetails()
|
||||
|
||||
rvAdapter = RVAdapter()
|
||||
DataHolder.selectedTest = null
|
||||
rvAdapter = RecyclerViewAdapter()
|
||||
val itemClickListener = object : ItemClickListener {
|
||||
override fun onClick(pos: Int) {
|
||||
// binding.recyclerView.post(Runnable { rvAdapter.notifyDataSetChanged() })
|
||||
rvAdapter.notifyDataSetChanged()
|
||||
Log.d(TAG, "onclick called in ItemClickListener")
|
||||
DataHolder.selectedTest = viewModel.allTestDetails.value?.get(pos)
|
||||
}
|
||||
}
|
||||
@@ -70,10 +72,15 @@ class HomeFragment : Fragment() {
|
||||
findNavController().navigate(R.id.action_nav_home_to_registerOneScanAbhaFragment)
|
||||
}
|
||||
binding.btnTest.setOnClickListener {
|
||||
if (DataHolder.selectedTest != null)
|
||||
if (DataHolder.selectedTest != null) {
|
||||
findNavController().navigate(R.id.action_nav_home_to_mainActivity)
|
||||
else
|
||||
Toast.makeText(requireContext(), "Select One Record to start testing", Toast.LENGTH_SHORT).show()
|
||||
} else {
|
||||
Toast.makeText(
|
||||
requireContext(),
|
||||
"Select One Record to start testing",
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Toast
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.example.hpos.R
|
||||
@@ -46,7 +47,6 @@ class RegisterOneScanAbhaFragment : Fragment() {
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
binding = FragmentRegisterOneScanAbhaBinding.inflate(inflater, container, false)
|
||||
|
||||
return binding.root
|
||||
}
|
||||
|
||||
|
||||
@@ -145,7 +145,9 @@ class RegisterThreeEnterPatientDetails : Fragment() {
|
||||
if (binding.etYob.text.isNullOrEmpty()) {
|
||||
binding.etYob.error = getString(R.string.yob_error)
|
||||
return null
|
||||
} else if (binding.etYob.text.toString().toInt() <= 1900 || binding.etYob.text.toString().toInt() > 2023) {
|
||||
} else if (binding.etYob.text.toString().toInt() <= 1900 || binding.etYob.text.toString()
|
||||
.toInt() > 2023
|
||||
) {
|
||||
binding.etYob.error = getString(R.string.yob_error_2)
|
||||
return null
|
||||
} else {
|
||||
@@ -162,7 +164,10 @@ class RegisterThreeEnterPatientDetails : Fragment() {
|
||||
if (binding.etMobile.text.isNullOrEmpty()) {
|
||||
binding.etMobile.error = getString(R.string.mobile_error)
|
||||
return null
|
||||
} else {
|
||||
} else if (binding.etMobile.text.toString().length != 10) {
|
||||
binding.etMobile.error = getString(R.string.mobile_error)
|
||||
return null
|
||||
}else {
|
||||
viewModel.patientDetails.mobile = binding.etMobile.text.toString()
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -25,6 +25,7 @@ import com.example.hpos.data.constant.Constants
|
||||
import com.example.hpos.databinding.ActivityTestRightBinding
|
||||
import com.example.hpos.util.MyViewModelFactory
|
||||
import com.hoho.android.usbserial.driver.UsbSerialDriver
|
||||
import com.hoho.android.usbserial.driver.UsbSerialProber
|
||||
|
||||
|
||||
class TestRightActivity : AppCompatActivity() {
|
||||
@@ -64,7 +65,7 @@ class TestRightActivity : AppCompatActivity() {
|
||||
viewModel.isServiceConnected = true
|
||||
|
||||
// Todo: Uncomment this
|
||||
// mConnection.let { mService.connect(mDriver, mConnection!!) }
|
||||
mConnection.let { mService.connect(mDriver, mConnection!!) }
|
||||
moveToNext()
|
||||
}
|
||||
|
||||
@@ -111,38 +112,38 @@ class TestRightActivity : AppCompatActivity() {
|
||||
// }
|
||||
|
||||
// Todo: Comment this
|
||||
private fun connectUsb(permissionGranted: Boolean) {
|
||||
setupService()
|
||||
}
|
||||
// private fun connectUsb(permissionGranted: Boolean) {
|
||||
// setupService()
|
||||
// }
|
||||
|
||||
// Todo: Uncomment this
|
||||
// private fun connectUsb(permissionGranted: Boolean) {
|
||||
// Log.d(TAG, "connectUsb() called, permission variable = $permissionGranted")
|
||||
// val manager = getSystemService(Context.USB_SERVICE) as UsbManager
|
||||
// val availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager)
|
||||
//
|
||||
// if (availableDrivers.isEmpty()) {
|
||||
// onErrorReported("No Device is Connected")
|
||||
// } else {
|
||||
// mDriver = availableDrivers[0]
|
||||
//
|
||||
// if (mDriver.device.productId != Constants.DEVICE_PRODUCT_ID || mDriver.device.vendorId != Constants.DEVICE_VENDOR_ID){
|
||||
// Toast.makeText(this, "Device Connected is not supported", Toast.LENGTH_SHORT).show()
|
||||
// onBackPressed()
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// viewModel.testDetails?.deviceId = mDriver.device.serialNumber.toString()
|
||||
// DataHolder.deviceSerialNumber = mDriver.device.serialNumber.toString()
|
||||
// mConnection = manager.openDevice(mDriver.device)
|
||||
//
|
||||
// if (mConnection == null) {
|
||||
// requestUserPermission(manager, mDriver.device)
|
||||
// } else {
|
||||
// setupService()
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
private fun connectUsb(permissionGranted: Boolean) {
|
||||
Log.d(TAG, "connectUsb() called, permission variable = $permissionGranted")
|
||||
val manager = getSystemService(Context.USB_SERVICE) as UsbManager
|
||||
val availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager)
|
||||
|
||||
if (availableDrivers.isEmpty()) {
|
||||
onErrorReported("No Device is Connected")
|
||||
} else {
|
||||
mDriver = availableDrivers[0]
|
||||
|
||||
if (mDriver.device.productId != Constants.DEVICE_PRODUCT_ID || mDriver.device.vendorId != Constants.DEVICE_VENDOR_ID){
|
||||
Toast.makeText(this, "Device Connected is not supported", Toast.LENGTH_SHORT).show()
|
||||
onBackPressed()
|
||||
return
|
||||
}
|
||||
|
||||
viewModel.testDetails?.deviceId = mDriver.device.serialNumber.toString()
|
||||
DataHolder.deviceSerialNumber = mDriver.device.serialNumber.toString()
|
||||
mConnection = manager.openDevice(mDriver.device)
|
||||
|
||||
if (mConnection == null) {
|
||||
requestUserPermission(manager, mDriver.device)
|
||||
} else {
|
||||
setupService()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Request user permission. The response will be received in the BroadcastReceiver
|
||||
|
||||
@@ -65,8 +65,7 @@ class TestRightExpReference : Fragment() {
|
||||
getString(R.string.yes),
|
||||
object : MyDialogListener {
|
||||
override fun onClickNegativeButton() {
|
||||
// Todo: Only for testing
|
||||
// viewModel.progressBar.postValue(true)
|
||||
|
||||
}
|
||||
override fun onClickPositiveButton() {
|
||||
startTakingReference()
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.example.hpos.data.model.test.TestType
|
||||
import com.example.hpos.databinding.FragmentTestRightResultsBinding
|
||||
import com.example.hpos.presentation.dashboard.DashboardActivity
|
||||
import com.example.hpos.util.MyUtils
|
||||
import com.example.hpos.util.MyUtils.calculateAgeFromYOB
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
|
||||
@@ -48,9 +49,9 @@ class TestRightResults : Fragment() {
|
||||
viewModel.addFilesToQueue(requireContext())
|
||||
|
||||
// Uploading to cloud storage and deleting the from the pending queue when uploaded
|
||||
// if (MyUtils.isInternetConnected()) {
|
||||
// viewModel.addFilesToCloud(requireContext())
|
||||
// }
|
||||
if (MyUtils.isInternetConnected()) {
|
||||
viewModel.addFilesToCloud(requireContext())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -69,15 +70,11 @@ class TestRightResults : Fragment() {
|
||||
private fun updateResults() {
|
||||
binding.tvName.text = getString(R.string.name_in_textview, viewModel.testDetails?.patientName)
|
||||
binding.tvAge.text =
|
||||
getString(R.string.age_in_textview, viewModel.testDetails?.patientAge.toString())
|
||||
// binding.tvGender.text =
|
||||
// getString(R.string.gender_in_textview, viewModel.patientDetails.gender)
|
||||
getString(R.string.age_in_textview, viewModel.testDetails?.patientAge?.calculateAgeFromYOB().toString())
|
||||
|
||||
binding.tvId.text = getString(R.string.patient_id_in_tv, viewModel.testDetails?.patientID)
|
||||
|
||||
|
||||
//TODO: remove
|
||||
// viewModel.patientDetails.results = TestRightResultType.NEGATIVEBORDERLINE
|
||||
|
||||
if (DataHolder.selectedTestType == TestType.SICKLECERT){
|
||||
when (viewModel.testDetails?.result) {
|
||||
TestRightResultType.NORMAL -> {
|
||||
|
||||
@@ -7,10 +7,12 @@ import android.os.Binder
|
||||
import android.os.IBinder
|
||||
import android.util.Log
|
||||
import com.example.hpos.data.DataHolder
|
||||
import com.example.hpos.data.constant.Constants
|
||||
import com.example.hpos.data.constant.TestRightCommands
|
||||
import com.example.hpos.presentation.UsbServiceListener
|
||||
import com.hoho.android.usbserial.driver.UsbSerialDriver
|
||||
import com.hoho.android.usbserial.driver.UsbSerialPort
|
||||
import com.hoho.android.usbserial.util.SerialInputOutputManager
|
||||
import java.io.IOException
|
||||
|
||||
|
||||
@@ -35,26 +37,26 @@ class UsbService : Service() {
|
||||
var listener: UsbServiceListener? = null
|
||||
fun connect(driver: UsbSerialDriver, connection: UsbDeviceConnection) {
|
||||
// Todo: Uncomment this
|
||||
// mPort = driver.ports[0] // Most devices have just one port (port 0)
|
||||
// mPort.open(connection)
|
||||
// mPort.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE)
|
||||
mPort = driver.ports[0] // Most devices have just one port (port 0)
|
||||
mPort.open(connection)
|
||||
mPort.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE)
|
||||
//
|
||||
isUsbConnected = true
|
||||
// Log.d(TAG, "My Usb Connected ${mPort.driver}")
|
||||
//
|
||||
// val usbIoManager = SerialInputOutputManager(mPort,
|
||||
// object : SerialInputOutputManager.Listener{
|
||||
// override fun onNewData(data: ByteArray?) {
|
||||
//// Log.e(TAG, "onNewData() called inside eventDrivenWrite()")
|
||||
// listener?.onUsbRead(data)
|
||||
// }
|
||||
// override fun onRunError(e: Exception?) {
|
||||
// Log.e(TAG, "onRunError() called inside eventDrivenWrite()")
|
||||
// listener?.onUsbError(e)
|
||||
// }
|
||||
//
|
||||
// })
|
||||
// usbIoManager.start();
|
||||
Log.d(TAG, "My Usb Connected ${mPort.driver}")
|
||||
|
||||
val usbIoManager = SerialInputOutputManager(mPort,
|
||||
object : SerialInputOutputManager.Listener{
|
||||
override fun onNewData(data: ByteArray?) {
|
||||
// Log.e(TAG, "onNewData() called inside eventDrivenWrite()")
|
||||
listener?.onUsbRead(data)
|
||||
}
|
||||
override fun onRunError(e: Exception?) {
|
||||
Log.e(TAG, "onRunError() called inside eventDrivenWrite()")
|
||||
listener?.onUsbError(e)
|
||||
}
|
||||
|
||||
})
|
||||
usbIoManager.start();
|
||||
}
|
||||
|
||||
fun disconnect() {
|
||||
@@ -66,52 +68,52 @@ class UsbService : Service() {
|
||||
}
|
||||
|
||||
// Todo: comment this
|
||||
fun eventDrivenWrite(command: TestRightCommands, listener: UsbServiceListener) {
|
||||
this.listener = listener
|
||||
try {
|
||||
when (command) {
|
||||
TestRightCommands.autoset -> {
|
||||
this.listener!!.onUsbRead("OK".toByteArray())
|
||||
}
|
||||
TestRightCommands.led2Set50 -> {
|
||||
this.listener!!.onUsbRead("OK".toByteArray())
|
||||
}
|
||||
TestRightCommands.run -> {
|
||||
this.listener!!.onUsbRead("OK [0]".toByteArray())
|
||||
}
|
||||
TestRightCommands.read -> {
|
||||
this.listener!!.onUsbRead(InputData().inputRead.toByteArray())
|
||||
}
|
||||
TestRightCommands.printAll -> {
|
||||
if (DataHolder.testExp) {
|
||||
for (each in InputData().printForReference.lines()) {
|
||||
this.listener!!.onUsbRead((each + "\n").toByteArray())
|
||||
}
|
||||
} else {
|
||||
for (each in InputData().printForSample.lines()) {
|
||||
this.listener!!.onUsbRead((each + "\n").toByteArray())
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
this.listener!!.onUsbRead("OK".toByteArray())
|
||||
}
|
||||
}
|
||||
} catch (e: IOException) {
|
||||
listener.onUsbError(e)
|
||||
}
|
||||
}
|
||||
|
||||
// Todo: Uncomment this
|
||||
// fun eventDrivenWrite(command: TestRightCommands, listener: UsbServiceListener) {
|
||||
// this.listener = listener
|
||||
// try {
|
||||
// mPort.write(command.command.toByteArray(), Constants.WRITE_TIMEOUT_MILLIS)
|
||||
// when (command) {
|
||||
// TestRightCommands.autoset -> {
|
||||
// this.listener!!.onUsbRead("OK".toByteArray())
|
||||
// }
|
||||
// TestRightCommands.led2Set50 -> {
|
||||
// this.listener!!.onUsbRead("OK".toByteArray())
|
||||
// }
|
||||
// TestRightCommands.run -> {
|
||||
// this.listener!!.onUsbRead("OK [0]".toByteArray())
|
||||
// }
|
||||
// TestRightCommands.read -> {
|
||||
// this.listener!!.onUsbRead(InputData().inputRead.toByteArray())
|
||||
// }
|
||||
// TestRightCommands.printAll -> {
|
||||
// if (DataHolder.testExp) {
|
||||
// for (each in InputData().printForReference.lines()) {
|
||||
// this.listener!!.onUsbRead((each + "\n").toByteArray())
|
||||
// }
|
||||
// } else {
|
||||
// for (each in InputData().printForSample.lines()) {
|
||||
// this.listener!!.onUsbRead((each + "\n").toByteArray())
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else -> {
|
||||
// this.listener!!.onUsbRead("OK".toByteArray())
|
||||
// }
|
||||
// }
|
||||
// } catch (e: IOException) {
|
||||
// listener.onUsbError(e)
|
||||
// }
|
||||
// }
|
||||
|
||||
// Todo: Uncomment this
|
||||
fun eventDrivenWrite(command: TestRightCommands, listener: UsbServiceListener) {
|
||||
this.listener = listener
|
||||
try {
|
||||
mPort.write(command.command.toByteArray(), Constants.WRITE_TIMEOUT_MILLIS)
|
||||
} catch (e: IOException) {
|
||||
listener.onUsbError(e)
|
||||
}
|
||||
}
|
||||
|
||||
// fun write(command: TestRightCommands){
|
||||
// mPort.write(command.command.toByteArray(), Constants.WRITE_TIMEOUT_MILLIS)
|
||||
// }
|
||||
|
||||
11
app/src/main/java/com/example/hpos/test.kt
Normal file
11
app/src/main/java/com/example/hpos/test.kt
Normal file
@@ -0,0 +1,11 @@
|
||||
package com.example.hpos
|
||||
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
|
||||
fun main(){
|
||||
val dateFormat = SimpleDateFormat("MM:HHddMMyyyy", Locale.getDefault())
|
||||
val currentDate = Date()
|
||||
print(dateFormat.format(currentDate))
|
||||
}
|
||||
@@ -79,7 +79,7 @@ object MyUtils {
|
||||
}
|
||||
|
||||
fun Int.calculateAgeFromYOB(): Int {
|
||||
val currentY = SimpleDateFormat("yyyy_HHmmss").format(Date()).toInt()
|
||||
val currentY = SimpleDateFormat("yyyy").format(Date()).toInt()
|
||||
return (currentY - this)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user