From 2b830a4d971b8acdfa829ea2d451962bf467889d Mon Sep 17 00:00:00 2001 From: Pritimay Sarkar Date: Mon, 15 Jan 2024 16:24:58 +0530 Subject: [PATCH] add quick capture and solution dropdowns --- app/build.gradle | 2 +- .../hpostesting/data/dao/MyDataBase.kt | 2 +- .../data/model/patient/HemoCubeTestData.kt | 6 +- .../assurance/AssuranceControlsActivity.kt | 18 ++- .../assurance/AssuranceControlsFragment.kt | 104 ++++++++++++++++++ .../presentation/dashboard/HomeFragment.kt | 8 ++ app/src/main/res/drawable/flask.png | Bin 0 -> 14307 bytes app/src/main/res/drawable/spinner_border.xml | 10 ++ .../layout/fragment_assurance_controls.xml | 43 +++++++- .../layout/fragment_hemo_cube_reference.xml | 27 ----- app/src/main/res/layout/fragment_home.xml | 24 ++++ 11 files changed, 209 insertions(+), 35 deletions(-) create mode 100644 app/src/main/res/drawable/flask.png create mode 100644 app/src/main/res/drawable/spinner_border.xml diff --git a/app/build.gradle b/app/build.gradle index 41f092e..494a6b9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,7 +16,7 @@ android { // prod - production, preprod - preproduction, quality - qc, dev - development defaultConfig { - applicationId "in.sminnovations.hpostesting.preprod" + applicationId "in.sminnovations.hpostesting.dev" minSdk 21 targetSdk 34 versionCode 91 diff --git a/app/src/main/java/com/example/hpostesting/data/dao/MyDataBase.kt b/app/src/main/java/com/example/hpostesting/data/dao/MyDataBase.kt index 86ad9cb..b380365 100644 --- a/app/src/main/java/com/example/hpostesting/data/dao/MyDataBase.kt +++ b/app/src/main/java/com/example/hpostesting/data/dao/MyDataBase.kt @@ -8,7 +8,7 @@ import com.example.hpostesting.data.model.patient.DeviceData import com.example.hpostesting.data.model.patient.HemoCubeTestData import com.example.hpostesting.data.model.patient.UserData -@Database(entities = [UserData::class, HemoCubeTestData::class, DeviceData::class, BufferCheckData::class], version = 20, exportSchema = false) +@Database(entities = [UserData::class, HemoCubeTestData::class, DeviceData::class, BufferCheckData::class], version = 21, exportSchema = false) @TypeConverters(Converters::class) abstract class MyDatabase : RoomDatabase() { abstract fun userDao(): UserDao diff --git a/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt b/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt index 4a200d4..52c7a5f 100644 --- a/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt +++ b/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt @@ -76,5 +76,9 @@ data class HemoCubeTestData( var batteryMaxCapacity: String = "", var batteryTemperature: String = "", var batteryVoltage: String = "", - var molbioFlag: Boolean = false + var molbioFlag: Boolean = false, + var quickCapture: Boolean = false, + var solution: String? = "", + var concentration: String? = "", + var volume: String? = "", ) diff --git a/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsActivity.kt index 687baf6..1774a02 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsActivity.kt @@ -1,5 +1,8 @@ package com.example.hpostesting.presentation.assurance +import android.content.Context +import android.content.SharedPreferences +import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import dagger.hilt.android.AndroidEntryPoint import `in`.sminnovations.hpostesting.databinding.ActivityAssuranceControlsBinding @@ -7,6 +10,19 @@ import `in`.sminnovations.hpostesting.databinding.ActivityAssuranceControlsBindi @AndroidEntryPoint class AssuranceControlsActivity: AppCompatActivity() { private lateinit var binding: ActivityAssuranceControlsBinding + private lateinit var sharedPreference: SharedPreferences - + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + binding = ActivityAssuranceControlsBinding.inflate(layoutInflater) + sharedPreference = this.getSharedPreferences("HEMOCUBE", Context.MODE_PRIVATE) + setContentView(binding.root) + + if (savedInstanceState == null) { + supportFragmentManager.beginTransaction() + .replace(binding.fgAssuranceControls.id, AssuranceControlsFragment()) + .commit() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsFragment.kt index a3937e1..9239671 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsFragment.kt @@ -1,13 +1,24 @@ package com.example.hpostesting.presentation.assurance +import android.R import android.content.Context +import android.content.Intent import android.content.SharedPreferences +import android.os.Build import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ArrayAdapter +import android.widget.Spinner +import androidx.annotation.RequiresApi import androidx.fragment.app.Fragment +import com.example.hpostesting.data.DataHolder +import com.example.hpostesting.data.model.patient.UserData +import com.example.hpostesting.presentation.hemocube.HemocubeActivity import `in`.sminnovations.hpostesting.databinding.FragmentAssuranceControlsBinding +import java.time.Instant class AssuranceControlsFragment: Fragment() { private lateinit var binding: FragmentAssuranceControlsBinding @@ -21,4 +32,97 @@ class AssuranceControlsFragment: Fragment() { requireContext().getSharedPreferences("HEMOCUBE", Context.MODE_PRIVATE) return binding.root } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initViews() + } + + private fun initViews() { +// binding.btnSubmit.visibility = View.GONE + + val solutionSpinner: Spinner = binding.spinnerSolutions + val solutionOptions = arrayOf("Select solution", "KMnO4", "Tartrazine", "AR", "HB", "Blood") + val solutionAdapter = ArrayAdapter(requireContext(), R.layout.simple_spinner_item, solutionOptions) + solutionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + solutionSpinner.adapter = solutionAdapter + solutionSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, + view: View?, + position: Int, + id: Long + ) { + val selectedValue: String = solutionOptions[position] + if (!selectedValue.equals("Select solution")) { + DataHolder.hemoCubeTestData!!.solution = selectedValue + } + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + } + } + + val concentrationSpinner: Spinner = binding.spinnerConcentration + val concentrationOptions = arrayOf("Select concentration", "250umol", "350umol", "450umol", "550umol", "650umol") + val concentrationAdapter = ArrayAdapter(requireContext(), R.layout.simple_spinner_item, concentrationOptions) + concentrationAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + concentrationSpinner.adapter = concentrationAdapter + concentrationSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, + view: View?, + position: Int, + id: Long + ) { + val selectedValue: String = concentrationOptions[position] + if (!selectedValue.equals("Select concentration")) { + DataHolder.hemoCubeTestData!!.concentration = selectedValue + } + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + } + } + + val volumeSpinner: Spinner = binding.spinnerVolume + val volumeOptions = arrayOf("Select volume", "1uml", "2uml", "4uml", "4.5uml", "5uml") + val volumeAdapter = ArrayAdapter(requireContext(), R.layout.simple_spinner_item, volumeOptions) + volumeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) + volumeSpinner.adapter = volumeAdapter + volumeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, + view: View?, + position: Int, + id: Long + ) { + val selectedValue: String = volumeOptions[position] + if (!selectedValue.equals("Select volume")) { + DataHolder.hemoCubeTestData!!.volume = selectedValue + } + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + } + } + + binding.btnSubmit.setOnClickListener { + DataHolder.hemoCubeTestData!!.quickCapture = true + val currentUnixTime = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + Instant.now().epochSecond + } else { + "" + } + DataHolder.hemoCubeTestData!!._id = currentUnixTime.toString() + "SMI" + DataHolder.hemoCubeTestData!!.name = "${DataHolder.hemoCubeTestData!!.solution} ${DataHolder.hemoCubeTestData!!.concentration} ${DataHolder.hemoCubeTestData!!.volume}" + + DataHolder.selectedTest = UserData() + DataHolder.selectedTest?._id = DataHolder.hemoCubeTestData!!._id + DataHolder.selectedTest?.name = DataHolder.hemoCubeTestData!!.name + + val i = Intent(requireContext(), HemocubeActivity::class.java) + startActivity(i) + } + } } \ No newline at end of file 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 3793c62..231fb0e 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 @@ -28,6 +28,7 @@ import com.example.hpostesting.data.model.updates.DeviceUpdateRequest import com.example.hpostesting.presentation.KitScanActivity import com.example.hpostesting.presentation.adapter.OfflineUserListAdapter import com.example.hpostesting.presentation.adapter.UserListAdapter +import com.example.hpostesting.presentation.assurance.AssuranceControlsActivity import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel import com.example.hpostesting.presentation.testRight.TestRightViewModel import com.firebase.ui.firestore.FirestoreRecyclerOptions @@ -72,6 +73,7 @@ class HomeFragment : Fragment() { sharedPreference = requireContext().getSharedPreferences("HEMOCUBE", Context.MODE_PRIVATE) DataHolder.selectedTest = null + DataHolder.hemoCubeTestData = HemoCubeTestData() return binding.root } @@ -138,6 +140,12 @@ class HomeFragment : Fragment() { startActivity(Intent(requireContext(), KitScanActivity::class.java)) requireActivity().finish() } + binding.btnQuickCapture.setOnClickListener { + val i = Intent( + requireContext().applicationContext, AssuranceControlsActivity::class.java + ) + startActivity(i) + } } private fun checkForTokenAndUpdate() { diff --git a/app/src/main/res/drawable/flask.png b/app/src/main/res/drawable/flask.png new file mode 100644 index 0000000000000000000000000000000000000000..22cd4b5c2329248356cc9a19d987121cc1cdc0ca GIT binary patch literal 14307 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 J7oN3`_&)}Ai_ic7 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/spinner_border.xml b/app/src/main/res/drawable/spinner_border.xml new file mode 100644 index 0000000..3d3e511 --- /dev/null +++ b/app/src/main/res/drawable/spinner_border.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_assurance_controls.xml b/app/src/main/res/layout/fragment_assurance_controls.xml index dcde211..279c80e 100644 --- a/app/src/main/res/layout/fragment_assurance_controls.xml +++ b/app/src/main/res/layout/fragment_assurance_controls.xml @@ -20,29 +20,64 @@ app:layout_constraintTop_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + + + + +