new 125 version, changes in HemoCubeFragment, latest version
This commit is contained in:
@@ -37,6 +37,11 @@
|
|||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/Theme.HPOSTesting"
|
android:theme="@style/Theme.HPOSTesting"
|
||||||
tools:targetApi="31">
|
tools:targetApi="31">
|
||||||
|
<activity
|
||||||
|
android:name="com.example.hpostesting.presentation.dashboard.UpdateValuesActivity"
|
||||||
|
android:exported="false"
|
||||||
|
android:screenOrientation="portrait"/>
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name="com.example.hpostesting.util.MyAuthenticatorService"
|
android:name="com.example.hpostesting.util.MyAuthenticatorService"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
@@ -49,18 +54,19 @@
|
|||||||
android:name="android.accounts.AccountAuthenticator"
|
android:name="android.accounts.AccountAuthenticator"
|
||||||
android:resource="@xml/authenticator" />
|
android:resource="@xml/authenticator" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="com.example.hpostesting.presentation.dashboard.ui.PasswordResetActivity"
|
android:name="com.example.hpostesting.presentation.dashboard.ui.PasswordResetActivity"
|
||||||
android:screenOrientation="portrait"
|
android:exported="false"
|
||||||
android:exported="false" />
|
android:screenOrientation="portrait" />
|
||||||
<activity
|
<activity
|
||||||
android:name="com.example.hpostesting.presentation.usb_teminal.UsbTerminalActivity"
|
android:name="com.example.hpostesting.presentation.usb_teminal.UsbTerminalActivity"
|
||||||
android:screenOrientation="portrait"
|
android:exported="false"
|
||||||
android:exported="false" />
|
android:screenOrientation="portrait" />
|
||||||
<activity
|
<activity
|
||||||
android:name="com.example.hpostesting.presentation.deviceinfo.DeviceActivity"
|
android:name="com.example.hpostesting.presentation.deviceinfo.DeviceActivity"
|
||||||
android:theme="@style/Theme.HPOS.NoActionBar"
|
android:exported="false"
|
||||||
android:exported="false" />
|
android:theme="@style/Theme.HPOS.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name="com.example.hpostesting.presentation.hemocube.DigitalCardActivity"
|
android:name="com.example.hpostesting.presentation.hemocube.DigitalCardActivity"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
@@ -123,7 +129,6 @@
|
|||||||
android:screenOrientation="portrait"
|
android:screenOrientation="portrait"
|
||||||
android:theme="@style/Theme.HPOS.NoActionBar"
|
android:theme="@style/Theme.HPOS.NoActionBar"
|
||||||
tools:ignore="AppLinkUrlError,MissingClass">
|
tools:ignore="AppLinkUrlError,MissingClass">
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
|
||||||
@@ -147,9 +152,10 @@
|
|||||||
android:theme="@style/AppTheme.NoActionBar">
|
android:theme="@style/AppTheme.NoActionBar">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.HOME" />
|
<category android:name="android.intent.category.HOME" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
<category android:name="android.intent.category.MONKEY"/>
|
<category android:name="android.intent.category.MONKEY" />
|
||||||
<category android:name="android.intent.category.LAUNCHER_APP" />
|
<category android:name="android.intent.category.LAUNCHER_APP" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
|||||||
@@ -14,6 +14,13 @@
|
|||||||
package com.example.hpostesting.data.constant
|
package com.example.hpostesting.data.constant
|
||||||
|
|
||||||
object Constants {
|
object Constants {
|
||||||
|
const val CENTER_NAME =""
|
||||||
|
const val DISTRICT =""
|
||||||
|
const val FLAGS_ENABLED = false//testing flag disable then pass buffer and sample checks
|
||||||
|
const val ABS_FLAGS_ENABLED = false
|
||||||
|
const val IP_ADDRESS="ip_address"
|
||||||
|
const val QUICK_CAPTURE="quick_capture"
|
||||||
|
const val KIT_TIME = "kit_time"
|
||||||
const val ACTION_USB_PERMISSION = "shanmukha.in.sickle_cell.USB_PERMISSION"
|
const val ACTION_USB_PERMISSION = "shanmukha.in.sickle_cell.USB_PERMISSION"
|
||||||
const val HEMOCUBE_USB_PERMISSION = "shanmukha.in.sickle_cell_homocube.USB_PERMISSION"
|
const val HEMOCUBE_USB_PERMISSION = "shanmukha.in.sickle_cell_homocube.USB_PERMISSION"
|
||||||
const val passphrase = "smi_#@sql"
|
const val passphrase = "smi_#@sql"
|
||||||
@@ -79,6 +86,16 @@ object Constants {
|
|||||||
// jig
|
// jig
|
||||||
const val NAVIGATE_TO_TEST_JIG_DIRECTLY = false
|
const val NAVIGATE_TO_TEST_JIG_DIRECTLY = false
|
||||||
|
|
||||||
|
//update values of abs
|
||||||
|
const val ABS2LED1MMLL = "ABS2LED1MMLL"
|
||||||
|
const val ABS2LED1MMUL = "ABS2LED1MMUL"
|
||||||
|
const val ABS2LED2MMLL = "ABS2LED2MMLL"
|
||||||
|
const val ABS2LED2MMUL = "ABS2LED2MMUL"
|
||||||
|
|
||||||
|
const val ABS10LED1MMLL = "ABS10LED1MMLL"
|
||||||
|
const val ABS10LED1MMUL = "ABS10LED1MMUL"
|
||||||
|
const val ABS10LED2MMLL = "ABS10LED2MMLL"
|
||||||
|
const val ABS10LED2MMUL = "ABS10LED2MMUL"
|
||||||
|
|
||||||
const val KIT_NUMBER = "KitNumber"
|
const val KIT_NUMBER = "KitNumber"
|
||||||
const val KIT_COUNT = "KitCount"
|
const val KIT_COUNT = "KitCount"
|
||||||
@@ -1066,8 +1083,9 @@ object Constants {
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
const val INCUBATION_TIME_MIN = 15
|
const val INCUBATION_TIME_MIN = 0
|
||||||
const val INCUBATION_TIME_MAX = 30
|
const val INCUBATION_TIME_MAX = 300
|
||||||
|
const val MAX_KIT_TIME = 240
|
||||||
const val BATTERY_LEVEL_MIN = Int.MIN_VALUE
|
const val BATTERY_LEVEL_MIN = Int.MIN_VALUE
|
||||||
|
|
||||||
const val PQ_MODE = true
|
const val PQ_MODE = true
|
||||||
@@ -1595,6 +1613,14 @@ object Constants {
|
|||||||
const val sickleCellDiseaseMin2mm = 0.45
|
const val sickleCellDiseaseMin2mm = 0.45
|
||||||
const val sickleCellDiseaseMax2mm = 0.7
|
const val sickleCellDiseaseMax2mm = 0.7
|
||||||
|
|
||||||
|
const val min2mmLed1 = 0.34
|
||||||
|
const val max2mmLed1 = 1.48
|
||||||
|
const val min2mmLed2 = 0.04
|
||||||
|
const val max2mmLed2 = 0.33
|
||||||
|
const val min10mmLed1 = 0.22
|
||||||
|
const val max10mmLed1 = 1.12
|
||||||
|
const val min10mmLed2 = 0.05
|
||||||
|
const val max10mmLed2 = 0.41
|
||||||
|
|
||||||
|
|
||||||
// val STATICID = listOf(
|
// val STATICID = listOf(
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import com.example.hpostesting.data.model.patient.UserData
|
|||||||
|
|
||||||
@Database(
|
@Database(
|
||||||
entities = [UserData::class, HemoCubeTestData::class, DeviceData::class, BufferCheckData::class],
|
entities = [UserData::class, HemoCubeTestData::class, DeviceData::class, BufferCheckData::class],
|
||||||
version = 34,
|
version = 35,
|
||||||
exportSchema = false
|
exportSchema = false
|
||||||
)
|
)
|
||||||
@TypeConverters(Converters::class)
|
@TypeConverters(Converters::class)
|
||||||
|
|||||||
@@ -109,5 +109,6 @@ data class HemoCubeTestData(
|
|||||||
var labName: String? = "",
|
var labName: String? = "",
|
||||||
var cuvetteSize: String? = "",
|
var cuvetteSize: String? = "",
|
||||||
var district: String? = "",
|
var district: String? = "",
|
||||||
var centerName: String? = ""
|
var centerName: String? = "",
|
||||||
|
var ipAddress:String?= ""
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -120,6 +120,21 @@ class DatabaseRepository @Inject constructor(
|
|||||||
Response.Error(e)
|
Response.Error(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
override suspend fun addQcTestToDatabase(data: HemoCubeTestData?): Response<String> {
|
||||||
|
return try {
|
||||||
|
val userdata =
|
||||||
|
db.collection("patientData").whereEqualTo("_id", data!!._id).get().await()
|
||||||
|
if (userdata.documents.isNotEmpty()) {
|
||||||
|
userdata.documents.forEach {
|
||||||
|
db.collection("patientData").document(it.id).update("testStatus", true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
db.collection("qcData").add(data).await()
|
||||||
|
Response.Success(data._id)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Response.Error(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun addTestToDatabase(data: UserData?): Response<String> {
|
override suspend fun addTestToDatabase(data: UserData?): Response<String> {
|
||||||
TODO("Not yet implemented")
|
TODO("Not yet implemented")
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import okhttp3.ResponseBody
|
|||||||
|
|
||||||
interface Repository {
|
interface Repository {
|
||||||
suspend fun addTestToDatabase(data: HemoCubeTestData?): Response<String>
|
suspend fun addTestToDatabase(data: HemoCubeTestData?): Response<String>
|
||||||
|
suspend fun addQcTestToDatabase(data: HemoCubeTestData?): Response<String>
|
||||||
suspend fun addTestToDatabasefornew(data: HemoCubeTestData?): Response<String>
|
suspend fun addTestToDatabasefornew(data: HemoCubeTestData?): Response<String>
|
||||||
|
|
||||||
suspend fun addTestToDatabase(data: UserData?): Response<String>
|
suspend fun addTestToDatabase(data: UserData?): Response<String>
|
||||||
|
|||||||
@@ -44,6 +44,11 @@ import com.zebra.scannercontrol.IDcsSdkApiDelegate
|
|||||||
import com.zebra.scannercontrol.SDKHandler
|
import com.zebra.scannercontrol.SDKHandler
|
||||||
import `in`.sminnovations.hpostesting.R
|
import `in`.sminnovations.hpostesting.R
|
||||||
import `in`.sminnovations.hpostesting.databinding.ActivityKitScanBinding
|
import `in`.sminnovations.hpostesting.databinding.ActivityKitScanBinding
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.Calendar
|
||||||
|
import java.util.Date
|
||||||
|
import java.util.Locale
|
||||||
|
import kotlin.math.max
|
||||||
|
|
||||||
class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
||||||
|
|
||||||
@@ -134,9 +139,23 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
|||||||
}else{
|
}else{
|
||||||
Constants.MAXIMUM_TEST_ALLOWED_BEFORE_REFERENCE10MM
|
Constants.MAXIMUM_TEST_ALLOWED_BEFORE_REFERENCE10MM
|
||||||
}
|
}
|
||||||
if (DataHolder.sampleReadCounter <= maxTest) {
|
val time = timeDifference(sharedPreference.getString(Constants.KIT_TIME, "").toString())
|
||||||
DataHolder.selectedTest!!.kitSerial = DataHolder.kitSerial
|
val kitNum = sharedPreference.getString(Constants.KIT_NUMBER, "").toString()
|
||||||
|
// Toast.makeText(this@KitScanActivity,"Test MAx time"+ time+"-Test count-"+kitNum,Toast.LENGTH_SHORT).show()
|
||||||
|
|
||||||
|
if (DataHolder.sampleReadCounter <= maxTest && kitNum != "" && time < Constants.MAX_KIT_TIME) {
|
||||||
moveToNext()
|
moveToNext()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this@KitScanActivity, "Limit Reached, Use New KIT for testing", Toast.LENGTH_SHORT).show()
|
||||||
|
DataHolder.sampleReadCounter = 0
|
||||||
|
DataHolder.kitSerial = ""
|
||||||
|
|
||||||
|
with(sharedPreference.edit()) {
|
||||||
|
putString(Constants.KIT_NUMBER, "")
|
||||||
|
putString(Constants.BUFFER_VALUE_1, "")
|
||||||
|
putString(Constants.BUFFER_VALUE_2, "")
|
||||||
|
apply()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (checkHemoCubeKitData()) {
|
// if (checkHemoCubeKitData()) {
|
||||||
@@ -153,31 +172,31 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
try {
|
// try {
|
||||||
if (checkHemoCubeKitData()) {
|
// if (checkHemoCubeKitData()) {
|
||||||
DataHolder.selectedTest!!.kitSerial =
|
// DataHolder.selectedTest!!.kitSerial =
|
||||||
sharedPreference.getString(Constants.KIT_NUMBER, "").toString()
|
// sharedPreference.getString(Constants.KIT_NUMBER, "").toString()
|
||||||
moveToNext()
|
// moveToNext()
|
||||||
} else {
|
// } else {
|
||||||
// Handle the case when checkHemoCubeKitData() returns false
|
// // Handle the case when checkHemoCubeKitData() returns false
|
||||||
with(sharedPreference.edit()) {
|
// with(sharedPreference.edit()) {
|
||||||
putString(Constants.KIT_NUMBER, "")
|
// putString(Constants.KIT_NUMBER, "")
|
||||||
putInt(Constants.KIT_COUNT, 0)
|
// putInt(Constants.KIT_COUNT, 0)
|
||||||
putString(Constants.BUFFER_VALUE_1, "")
|
// putString(Constants.BUFFER_VALUE_1, "")
|
||||||
putString(Constants.BUFFER_VALUE_2, "")
|
// putString(Constants.BUFFER_VALUE_2, "")
|
||||||
apply()
|
// apply()
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
} catch (e: NullPointerException) {
|
// } catch (e: NullPointerException) {
|
||||||
// Handle the NullPointerException here
|
// // Handle the NullPointerException here
|
||||||
e.printStackTrace() // You can log the exception for debugging
|
// e.printStackTrace() // You can log the exception for debugging
|
||||||
FirebaseCrashlytics.getInstance().recordException(e)
|
// FirebaseCrashlytics.getInstance().recordException(e)
|
||||||
val errorMessage = "An error occurred: ${e.message}"
|
// val errorMessage = "An error occurred: ${e.message}"
|
||||||
val rootView = findViewById<View>(android.R.id.content)
|
// val rootView = findViewById<View>(android.R.id.content)
|
||||||
Snackbar.make(rootView, errorMessage, Snackbar.LENGTH_LONG).show()
|
// Snackbar.make(rootView, errorMessage, Snackbar.LENGTH_LONG).show()
|
||||||
// Optionally, show a user-friendly error message to the user
|
// // Optionally, show a user-friendly error message to the user
|
||||||
// Toast.makeText(applicationContext, "An error occurred", Toast.LENGTH_SHORT).show()
|
// // Toast.makeText(applicationContext, "An error occurred", Toast.LENGTH_SHORT).show()
|
||||||
}
|
// }
|
||||||
setSupportActionBar(binding.toolbar)
|
setSupportActionBar(binding.toolbar)
|
||||||
|
|
||||||
binding.btnScanNow.setOnClickListener {
|
binding.btnScanNow.setOnClickListener {
|
||||||
@@ -201,20 +220,26 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
|||||||
}
|
}
|
||||||
Toast.makeText(this, "Selected cuvette size: 10mm", Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, "Selected cuvette size: 10mm", Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
|
val kitTime = SimpleDateFormat(
|
||||||
|
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||||
|
).format(Calendar.getInstance().time).toString()
|
||||||
if (DataHolder.selectedTest == null) {
|
if (DataHolder.selectedTest == null) {
|
||||||
with(sharedPreference.edit()) {
|
with(sharedPreference.edit()) {
|
||||||
putString(
|
putString(
|
||||||
Constants.KIT_NUMBER, binding.nameEditText.text.toString()
|
Constants.KIT_NUMBER, binding.nameEditText.text.toString()
|
||||||
)
|
)
|
||||||
|
putString(Constants.BUFFER_VALUE_1, "")
|
||||||
|
putString(Constants.BUFFER_VALUE_2, "")
|
||||||
|
putString(Constants.KIT_TIME, kitTime)
|
||||||
putInt(Constants.KIT_COUNT, 1)
|
putInt(Constants.KIT_COUNT, 1)
|
||||||
apply()
|
apply()
|
||||||
}
|
}
|
||||||
|
DataHolder.kitSerial = binding.nameEditText.text.toString()
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
applicationContext,
|
applicationContext,
|
||||||
R.string.kit_updated,
|
R.string.kit_updated,
|
||||||
Toast.LENGTH_SHORT
|
Toast.LENGTH_SHORT
|
||||||
).show()
|
).show()
|
||||||
|
|
||||||
val i = Intent(applicationContext, DashboardActivity::class.java)
|
val i = Intent(applicationContext, DashboardActivity::class.java)
|
||||||
startActivity(i)
|
startActivity(i)
|
||||||
finish()
|
finish()
|
||||||
@@ -222,6 +247,9 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
|||||||
DataHolder.kitSerial = binding.nameEditText.text.toString()
|
DataHolder.kitSerial = binding.nameEditText.text.toString()
|
||||||
DataHolder.selectedTest?.kitSerial = binding.nameEditText.text.toString()
|
DataHolder.selectedTest?.kitSerial = binding.nameEditText.text.toString()
|
||||||
with(sharedPreference.edit()) {
|
with(sharedPreference.edit()) {
|
||||||
|
putString(Constants.BUFFER_VALUE_1, "")
|
||||||
|
putString(Constants.BUFFER_VALUE_2, "")
|
||||||
|
putString(Constants.KIT_TIME, kitTime)
|
||||||
putString(Constants.KIT_NUMBER, binding.nameEditText.text.toString())
|
putString(Constants.KIT_NUMBER, binding.nameEditText.text.toString())
|
||||||
putInt(Constants.KIT_COUNT, 1)
|
putInt(Constants.KIT_COUNT, 1)
|
||||||
apply()
|
apply()
|
||||||
@@ -232,21 +260,21 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
|||||||
Toast.makeText(this, R.string.invalid_kit_number, Toast.LENGTH_LONG).show()
|
Toast.makeText(this, R.string.invalid_kit_number, Toast.LENGTH_LONG).show()
|
||||||
return@setOnClickListener
|
return@setOnClickListener
|
||||||
}
|
}
|
||||||
if (serialNumber.isNotEmpty() && checkDataNotNull() && isSerialValid(
|
// if (serialNumber.isNotEmpty() && checkDataNotNull() && isSerialValid(
|
||||||
serialNumber
|
// serialNumber
|
||||||
)
|
// )
|
||||||
) {
|
// ) {
|
||||||
DataHolder.kitSerial = binding.nameEditText.text.toString()
|
// DataHolder.kitSerial = binding.nameEditText.text.toString()
|
||||||
DataHolder.selectedTest?.kitSerial = binding.nameEditText.text.toString()
|
// DataHolder.selectedTest?.kitSerial = binding.nameEditText.text.toString()
|
||||||
with(sharedPreference.edit()) {
|
// with(sharedPreference.edit()) {
|
||||||
putString(Constants.KIT_NUMBER, binding.nameEditText.text.toString())
|
// putString(Constants.KIT_NUMBER, binding.nameEditText.text.toString())
|
||||||
putInt(Constants.KIT_COUNT, 1)
|
// putInt(Constants.KIT_COUNT, 1)
|
||||||
apply()
|
// apply()
|
||||||
}
|
// }
|
||||||
moveToNext()
|
// moveToNext()
|
||||||
} else {
|
// } else {
|
||||||
Toast.makeText(this, R.string.invalid_kit_number, Toast.LENGTH_LONG).show()
|
// Toast.makeText(this, R.string.invalid_kit_number, Toast.LENGTH_LONG).show()
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
//Setting up the SDK handler
|
//Setting up the SDK handler
|
||||||
@@ -310,17 +338,17 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkHemoCubeKitData(): Boolean {
|
// private fun checkHemoCubeKitData(): Boolean {
|
||||||
return sharedPreference.getString(Constants.KIT_NUMBER, "")
|
// return sharedPreference.getString(Constants.KIT_NUMBER, "")
|
||||||
?.isNotBlank() == true && sharedPreference.getInt(
|
// ?.isNotBlank() == true && sharedPreference.getInt(
|
||||||
Constants.KIT_COUNT, 0
|
// Constants.KIT_COUNT, 0
|
||||||
) > 0 && sharedPreference.getInt(Constants.KIT_COUNT, 0) < Constants.KIT_CAPACITY
|
// ) > 0 && sharedPreference.getInt(Constants.KIT_COUNT, 0) < Constants.KIT_CAPACITY
|
||||||
}
|
// }
|
||||||
|
|
||||||
private fun isSerialValid(s: String): Boolean {
|
private fun isSerialValid(s: String): Boolean {
|
||||||
if (s.contains("SMI/SC/")) {
|
if (s.contains("SMI/SC/")) {
|
||||||
if(s.length != 17){
|
if(s.length != 17){
|
||||||
binding.nameEditText.error = getString(R.string.invalid_kit)
|
binding.nameEditText.error = "Invalid Kit Serial Number, correct example SMI/SC/000/00/000"
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}else if(s.contains("SMI/SC-2-D10/")){
|
}else if(s.contains("SMI/SC-2-D10/")){
|
||||||
@@ -386,4 +414,18 @@ class KitScanActivity : AppCompatActivity(), IDcsSdkApiDelegate {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private fun timeDifference(createdAt: String): Long {
|
||||||
|
val currentTime = Calendar.getInstance().time
|
||||||
|
val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
|
||||||
|
|
||||||
|
val createdAtDate: Date = if (createdAt.isEmpty()) {
|
||||||
|
currentTime
|
||||||
|
} else {
|
||||||
|
formatter.parse(createdAt) ?: currentTime
|
||||||
|
}
|
||||||
|
|
||||||
|
val diffMillis = currentTime.time - createdAtDate.time
|
||||||
|
|
||||||
|
return diffMillis / (60 * 1000) // Convert milliseconds to minutes
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -16,6 +16,7 @@ package com.example.hpostesting.presentation.adapter
|
|||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
|
import android.provider.ContactsContract.Data
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ class DashboardActivity : AppCompatActivity(), IDataCollector {
|
|||||||
private var downloadId: Long = 0
|
private var downloadId: Long = 0
|
||||||
// TODO: Remove hemocube viewmodel
|
// TODO: Remove hemocube viewmodel
|
||||||
private val hemocubeViewModel: HemoCubeViewModel by viewModels()
|
private val hemocubeViewModel: HemoCubeViewModel by viewModels()
|
||||||
private lateinit var sharedPreference: SharedPreferences
|
|
||||||
override fun attachBaseContext(newBase: Context?) {
|
override fun attachBaseContext(newBase: Context?) {
|
||||||
val languageCode = LanguageManager.getSavedLanguage(newBase!!)
|
val languageCode = LanguageManager.getSavedLanguage(newBase!!)
|
||||||
LanguageManager.setLocale(newBase, languageCode)
|
LanguageManager.setLocale(newBase, languageCode)
|
||||||
@@ -100,6 +100,11 @@ class DashboardActivity : AppCompatActivity(), IDataCollector {
|
|||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
nats.connect()
|
nats.connect()
|
||||||
}
|
}
|
||||||
|
val savedKitSerial = sharedPreferences.getString(Constants.KIT_NUMBER, "")
|
||||||
|
|
||||||
|
Log.d("DashboardActivity", "Saved Kit Serial: $savedKitSerial")
|
||||||
|
// Toast.makeText(this, "Saved Kit Serial: $savedKitSerial", Toast.LENGTH_SHORT).show()
|
||||||
|
|
||||||
val versionName = getAppVersion(this@DashboardActivity) + " [ " + getAppEnvironment(this@DashboardActivity) + " ]"
|
val versionName = getAppVersion(this@DashboardActivity) + " [ " + getAppEnvironment(this@DashboardActivity) + " ]"
|
||||||
binding.appBarDashboard.versionName.text = versionName
|
binding.appBarDashboard.versionName.text = versionName
|
||||||
|
|
||||||
@@ -276,7 +281,7 @@ class DashboardActivity : AppCompatActivity(), IDataCollector {
|
|||||||
|
|
||||||
private fun createDeviceUpdateRequestData(): DeviceUpdateRequest {
|
private fun createDeviceUpdateRequestData(): DeviceUpdateRequest {
|
||||||
return DeviceUpdateRequest(
|
return DeviceUpdateRequest(
|
||||||
serial_no = sharedPreference.getString(Constants.DEVICE_ID, "")
|
serial_no = sharedPreferences.getString(Constants.DEVICE_ID, "")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
private fun getAppVersion(context: Context): String {
|
private fun getAppVersion(context: Context): String {
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ class GalleryFragment : Fragment() {
|
|||||||
binding.btnSubmit.visibility = View.VISIBLE
|
binding.btnSubmit.visibility = View.VISIBLE
|
||||||
binding.btnDeviceInfo.visibility = View.VISIBLE
|
binding.btnDeviceInfo.visibility = View.VISIBLE
|
||||||
binding.btnResetPassword.visibility = View.VISIBLE
|
binding.btnResetPassword.visibility = View.VISIBLE
|
||||||
|
binding.btnUpdateValues.visibility = View.VISIBLE
|
||||||
}else{
|
}else{
|
||||||
binding.btnResetPassword.visibility = View.GONE
|
binding.btnResetPassword.visibility = View.GONE
|
||||||
binding.btnDeviceProvision.visibility = View.GONE
|
binding.btnDeviceProvision.visibility = View.GONE
|
||||||
@@ -100,6 +101,7 @@ class GalleryFragment : Fragment() {
|
|||||||
binding.btnUsbTerminal.visibility = View.GONE
|
binding.btnUsbTerminal.visibility = View.GONE
|
||||||
binding.btnSubmit.visibility = View.GONE
|
binding.btnSubmit.visibility = View.GONE
|
||||||
binding.btnDeviceInfo.visibility = View.VISIBLE
|
binding.btnDeviceInfo.visibility = View.VISIBLE
|
||||||
|
binding.btnUpdateValues.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.btnResetPassword.setOnClickListener{
|
binding.btnResetPassword.setOnClickListener{
|
||||||
@@ -108,6 +110,9 @@ class GalleryFragment : Fragment() {
|
|||||||
binding.btnDeviceProvision.setOnClickListener {
|
binding.btnDeviceProvision.setOnClickListener {
|
||||||
startActivity(Intent(requireContext(), DeviceProvisionActivity::class.java))
|
startActivity(Intent(requireContext(), DeviceProvisionActivity::class.java))
|
||||||
}
|
}
|
||||||
|
binding.btnUpdateValues.setOnClickListener {
|
||||||
|
startActivity(Intent(requireContext(), UpdateValuesActivity::class.java))
|
||||||
|
}
|
||||||
binding.btnUsbTerminal.setOnClickListener {
|
binding.btnUsbTerminal.setOnClickListener {
|
||||||
startActivity(Intent(requireContext(), UsbTerminalActivity::class.java))
|
startActivity(Intent(requireContext(), UsbTerminalActivity::class.java))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -148,6 +148,10 @@ class HomeFragment : Fragment() {
|
|||||||
}else if(it.testStatus == true){
|
}else if(it.testStatus == true){
|
||||||
userList.removeAll(userData)
|
userList.removeAll(userData)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (timeDifference(it.incubationTime) >= 50){
|
||||||
|
userList.removeAll(userData)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
val bm = requireContext().getSystemService(BATTERY_SERVICE) as BatteryManager
|
val bm = requireContext().getSystemService(BATTERY_SERVICE) as BatteryManager
|
||||||
val batLevel: Int = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
|
val batLevel: Int = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
|
||||||
@@ -223,15 +227,19 @@ class HomeFragment : Fragment() {
|
|||||||
|
|
||||||
|
|
||||||
binding.btnNewKitoffline.setOnClickListener {
|
binding.btnNewKitoffline.setOnClickListener {
|
||||||
with(sharedPreference.edit()) {
|
// with(sharedPreference.edit()) {
|
||||||
putString(Constants.KIT_NUMBER, "")
|
// putString(Constants.KIT_NUMBER, "")
|
||||||
putInt(Constants.KIT_COUNT, 0)
|
// putInt(Constants.KIT_COUNT, 0)
|
||||||
apply()
|
// apply()
|
||||||
}
|
// }
|
||||||
startActivity(Intent(requireContext(), KitScanActivity::class.java))
|
startActivity(Intent(requireContext(), KitScanActivity::class.java))
|
||||||
// requireActivity().finish()
|
// requireActivity().finish()
|
||||||
}
|
}
|
||||||
binding.btnQuickCapture.setOnClickListener {
|
binding.btnQuickCapture.setOnClickListener {
|
||||||
|
with(sharedPreference.edit()) {
|
||||||
|
putBoolean(Constants.QUICK_CAPTURE, true)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
DataHolder.quickCapture = true
|
DataHolder.quickCapture = true
|
||||||
DataHolder.hemoCubeTestData = HemoCubeTestData()
|
DataHolder.hemoCubeTestData = HemoCubeTestData()
|
||||||
|
|
||||||
@@ -262,11 +270,10 @@ class HomeFragment : Fragment() {
|
|||||||
setUserId()
|
setUserId()
|
||||||
// loadUserData()
|
// loadUserData()
|
||||||
// setSearch()
|
// setSearch()
|
||||||
checkForLocalDBData()
|
//checkForLocalDBData()
|
||||||
if (Constants.MOLBIO_INTEGRATION) {
|
if (Constants.MOLBIO_INTEGRATION) {
|
||||||
checkForTokenAndUpdate()
|
checkForTokenAndUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now re-subscribe to allUserData
|
// Now re-subscribe to allUserData
|
||||||
/* hemoCubeViewModel.allLocalData.observe(viewLifecycleOwner) { originalUserDataList ->
|
/* hemoCubeViewModel.allLocalData.observe(viewLifecycleOwner) { originalUserDataList ->
|
||||||
|
|
||||||
@@ -667,7 +674,7 @@ class HomeFragment : Fragment() {
|
|||||||
val version = pInfo.versionName
|
val version = pInfo.versionName
|
||||||
var labname = sharedPreference.getString(Constants.LABNAME,"")
|
var labname = sharedPreference.getString(Constants.LABNAME,"")
|
||||||
return LoginRequest(
|
return LoginRequest(
|
||||||
latitude = DataHolder.location!!.latitude.toString(), longitude = DataHolder.location!!.longitude.toString(), location = DataHolder.ipAddress, password = password, serialNumber = userID, username = userID, version = version, lab = labname
|
location = DataHolder.ipAddress, password = password, serialNumber = userID, username = userID, version = version, lab = labname
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
private fun createCheckUpdateRequestData(): CheckUpdateRequest {
|
private fun createCheckUpdateRequestData(): CheckUpdateRequest {
|
||||||
@@ -983,11 +990,11 @@ class HomeFragment : Fragment() {
|
|||||||
// binding.uploadData.visibility = uploadDataVisibility
|
// binding.uploadData.visibility = uploadDataVisibility
|
||||||
// }
|
// }
|
||||||
|
|
||||||
hemoCubeViewModel.allKitTestData.observe(viewLifecycleOwner) { bufferData ->
|
// hemoCubeViewModel.allKitTestData.observe(viewLifecycleOwner) { bufferData ->
|
||||||
val uploadDataVisibility =
|
// val uploadDataVisibility =
|
||||||
if (bufferData.any { !it.localFlag }) View.VISIBLE else View.GONE
|
// if (bufferData.any { !it.localFlag }) View.VISIBLE else View.GONE
|
||||||
// binding.uploadData.visibility = uploadDataVisibility
|
// binding.uploadData.visibility = uploadDataVisibility
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkUnprocessedCSVData() {
|
private fun checkUnprocessedCSVData() {
|
||||||
@@ -1191,7 +1198,11 @@ class HomeFragment : Fragment() {
|
|||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
hemoCubeViewModel.networkStatusLiveData.removeObservers(viewLifecycleOwner)
|
hemoCubeViewModel.networkStatusLiveData.removeObservers(viewLifecycleOwner)
|
||||||
|
hemoCubeViewModel.allKitTestData.removeObservers(viewLifecycleOwner)
|
||||||
|
hemoCubeViewModel.allUserData.removeObservers(viewLifecycleOwner)
|
||||||
|
hemoCubeViewModel.uploadLogs.removeObservers(viewLifecycleOwner)
|
||||||
|
hemoCubeViewModel.checkUpdate.removeObservers(viewLifecycleOwner)
|
||||||
|
hemoCubeViewModel.downloadcertificate.removeObservers(viewLifecycleOwner)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun downloadCsv() {
|
private fun downloadCsv() {
|
||||||
@@ -1532,6 +1543,10 @@ class HomeFragment : Fragment() {
|
|||||||
getPublicIpAddr { ipAddress ->
|
getPublicIpAddr { ipAddress ->
|
||||||
if(ipAddress != "fail"){
|
if(ipAddress != "fail"){
|
||||||
DataHolder.ipAddress = ipAddress
|
DataHolder.ipAddress = ipAddress
|
||||||
|
with(sharedPreference.edit()) {
|
||||||
|
putString(Constants.IP_ADDRESS, ipAddress)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
hemoCubeViewModel.login(createLoginRequestData(userID, password))
|
hemoCubeViewModel.login(createLoginRequestData(userID, password))
|
||||||
}
|
}
|
||||||
@@ -1539,7 +1554,20 @@ class HomeFragment : Fragment() {
|
|||||||
hemoCubeViewModel.login(createLoginRequestData(userID, password))
|
hemoCubeViewModel.login(createLoginRequestData(userID, password))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private fun timeDifference(createdAt: String): Long {
|
||||||
|
val currentTime = Calendar.getInstance().time
|
||||||
|
val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
|
||||||
|
|
||||||
|
val createdAtDate: Date = if (createdAt.isEmpty()) {
|
||||||
|
currentTime
|
||||||
|
} else {
|
||||||
|
formatter.parse(createdAt) ?: currentTime
|
||||||
|
}
|
||||||
|
|
||||||
|
val diffMillis = currentTime.time - createdAtDate.time
|
||||||
|
|
||||||
|
return diffMillis / (60 * 1000) // Convert milliseconds to minutes
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* // Copyright (c) 2024 ShanMukha Innovations Pvt. Ltd. All rights reserved.
|
||||||
|
* // Notice: All information contained herein is, and remains
|
||||||
|
* // the property of ShanMukha Innovations Pvt. Ltd. and its suppliers,
|
||||||
|
* // if any. The intellectual and technical concepts contained
|
||||||
|
* // herein are proprietary to ShanMukha Innovations Pvt. Ltd.
|
||||||
|
* // and its suppliers and may be covered by Indian and Foreign Patents,
|
||||||
|
* // patents in process, and are protected by trade secret or copyright law.
|
||||||
|
* // Dissemination of this information or reproduction of this material
|
||||||
|
* // is strictly forbidden unless prior written permission is obtained
|
||||||
|
* // from ShanMukha Innovations Pvt. Ltd.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.example.hpostesting.presentation.dashboard
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.SharedPreferences
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.activity.enableEdgeToEdge
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.core.view.ViewCompat
|
||||||
|
import androidx.core.view.WindowInsetsCompat
|
||||||
|
import com.example.hpostesting.data.constant.Constants
|
||||||
|
import `in`.sminnovations.hpostesting.R
|
||||||
|
import `in`.sminnovations.hpostesting.databinding.ActivityDashboardBinding
|
||||||
|
import `in`.sminnovations.hpostesting.databinding.ActivityUpdateValuesBinding
|
||||||
|
|
||||||
|
class UpdateValuesActivity : AppCompatActivity() {
|
||||||
|
private lateinit var binding: ActivityUpdateValuesBinding
|
||||||
|
lateinit var sharedPreferences: SharedPreferences
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
binding = ActivityUpdateValuesBinding.inflate(layoutInflater)
|
||||||
|
sharedPreferences = this.getSharedPreferences("HEMOCUBE", Context.MODE_PRIVATE)
|
||||||
|
setContentView(binding.root)
|
||||||
|
binding.btnSubmit.setOnClickListener {
|
||||||
|
saveStringToPreferences(Constants.ABS2LED1MMLL, binding.et2mmled1Ll.text.toString())
|
||||||
|
saveStringToPreferences(Constants.ABS2LED1MMUL, binding.et2mmled1Ul.text.toString())
|
||||||
|
saveStringToPreferences(Constants.ABS2LED2MMLL, binding.et2mmled2Ll.text.toString())
|
||||||
|
saveStringToPreferences(Constants.ABS2LED2MMUL, binding.et2mmled2Ul.text.toString())
|
||||||
|
saveStringToPreferences(Constants.ABS10LED1MMLL, binding.et10mmled1Ll.text.toString())
|
||||||
|
saveStringToPreferences(Constants.ABS10LED1MMUL, binding.et10mmled1Ul.text.toString())
|
||||||
|
saveStringToPreferences(Constants.ABS10LED2MMLL, binding.et10mmled2Ll.text.toString())
|
||||||
|
saveStringToPreferences(Constants.ABS10LED2MMUL, binding.et10mmled2Ul.text.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private fun saveStringToPreferences(key: String, value: String) {
|
||||||
|
sharedPreferences.edit().putString(key, value).apply()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -181,6 +181,12 @@ class LoginFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
DataHolder.centerName = binding.centerName.text.toString()
|
DataHolder.centerName = binding.centerName.text.toString()
|
||||||
DataHolder.district = binding.etDistrict.text.toString()
|
DataHolder.district = binding.etDistrict.text.toString()
|
||||||
|
with(sharedPreference.edit()) {
|
||||||
|
putString(Constants.CENTER_NAME, binding.centerName.text.toString().lowercase().trim())
|
||||||
|
putString(Constants.DISTRICT, binding.etDistrict.text.toString())
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
|||||||
@@ -118,12 +118,7 @@ class DeviceProvisionFragment : Fragment() {
|
|||||||
)
|
)
|
||||||
apply()
|
apply()
|
||||||
}
|
}
|
||||||
startActivity(
|
|
||||||
Intent(
|
|
||||||
requireContext(),
|
|
||||||
DashboardActivity::class.java
|
|
||||||
)
|
|
||||||
)
|
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
activity, "Device registered successfully", Toast.LENGTH_LONG
|
activity, "Device registered successfully", Toast.LENGTH_LONG
|
||||||
).show()
|
).show()
|
||||||
@@ -148,7 +143,13 @@ class DeviceProvisionFragment : Fragment() {
|
|||||||
// viewModel.addDeviceId(DeviceData(deviceId = sharedPreferences.getString(Constants.DEVICE_ID, "").toString()))
|
// viewModel.addDeviceId(DeviceData(deviceId = sharedPreferences.getString(Constants.DEVICE_ID, "").toString()))
|
||||||
Log.e("idpass", response.toString())
|
Log.e("idpass", response.toString())
|
||||||
Log.e("idpass", response.data.data?.credentials?.username.toString())
|
Log.e("idpass", response.data.data?.credentials?.username.toString())
|
||||||
Log.e("idpass", deviceProvisionResponse)
|
// Log.e("idpass", deviceProvisionResponse)
|
||||||
|
startActivity(
|
||||||
|
Intent(
|
||||||
|
requireContext(),
|
||||||
|
DashboardActivity::class.java
|
||||||
|
)
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
activity,
|
activity,
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import android.content.Intent
|
|||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.text.method.ScrollingMovementMethod
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@@ -47,6 +48,7 @@ import `in`.sminnovations.hpostesting.R
|
|||||||
import `in`.sminnovations.hpostesting.databinding.FragmentHemoCubeReferenceBinding
|
import `in`.sminnovations.hpostesting.databinding.FragmentHemoCubeReferenceBinding
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
import kotlin.math.log10
|
import kotlin.math.log10
|
||||||
|
import kotlin.random.Random
|
||||||
|
|
||||||
@Suppress("MemberVisibilityCanBePrivate")
|
@Suppress("MemberVisibilityCanBePrivate")
|
||||||
class HemoCubeFragment : Fragment() {
|
class HemoCubeFragment : Fragment() {
|
||||||
@@ -88,6 +90,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
private var uploadedToCloud = false
|
private var uploadedToCloud = false
|
||||||
private var uploadedToMolbio = false
|
private var uploadedToMolbio = false
|
||||||
lateinit var testState: TestState
|
lateinit var testState: TestState
|
||||||
|
var quickCapture:Boolean = false
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?,
|
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?,
|
||||||
@@ -100,7 +103,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
testState = TestState(
|
testState = TestState(
|
||||||
testDetails = DataHolder.selectedTest?.toHemoCubeTestData(),
|
testDetails = DataHolder.selectedTest?.toHemoCubeTestData(),
|
||||||
)
|
)
|
||||||
|
quickCapture = sharedPreferences.getBoolean(Constants.QUICK_CAPTURE, false)
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +117,13 @@ class HemoCubeFragment : Fragment() {
|
|||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
private fun initViews() {
|
private fun initViews() {
|
||||||
|
binding.tvSubtitle4.movementMethod = ScrollingMovementMethod()
|
||||||
|
binding.tvDeviceMessages.movementMethod = ScrollingMovementMethod()
|
||||||
binding.btnSubmit.setOnClickListener {
|
binding.btnSubmit.setOnClickListener {
|
||||||
|
with(sharedPreferences.edit()) {
|
||||||
|
putBoolean(Constants.QUICK_CAPTURE, false)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
DataHolder.sampleReadCounter++
|
DataHolder.sampleReadCounter++
|
||||||
binding.btnSubmit.isEnabled = false
|
binding.btnSubmit.isEnabled = false
|
||||||
binding.btnSubmit.isClickable = false
|
binding.btnSubmit.isClickable = false
|
||||||
@@ -124,7 +133,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
binding.btnSubmit.visibility = View.GONE
|
binding.btnSubmit.visibility = View.GONE
|
||||||
}
|
}
|
||||||
hemoCubeViewModel.uploadHemoCubeResultToDatabase(
|
hemoCubeViewModel.uploadHemoCubeResultToDatabase(
|
||||||
isOnline, true, sharedPreferences.getString(Constants.KIT_NUMBER, "")
|
isOnline, true, sharedPreferences.getString(Constants.KIT_NUMBER, ""),quickCapture
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,6 +149,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
binding.tvSubtitle4.text = "Config"
|
binding.tvSubtitle4.text = "Config"
|
||||||
|
|
||||||
if (isBufferValueAvailable()){
|
if (isBufferValueAvailable()){
|
||||||
|
hemoCubeViewModel.messages.postValue("Ready to test")
|
||||||
binding.btnPlacebuffer.apply {
|
binding.btnPlacebuffer.apply {
|
||||||
setBackgroundColor(Color.GREEN) // Set button background color to green
|
setBackgroundColor(Color.GREEN) // Set button background color to green
|
||||||
text = "Refresh Buffer" // Change button text to "Buffer Exists"
|
text = "Refresh Buffer" // Change button text to "Buffer Exists"
|
||||||
@@ -147,9 +157,10 @@ class HemoCubeFragment : Fragment() {
|
|||||||
binding.btnSamplestart.isClickable = true
|
binding.btnSamplestart.isClickable = true
|
||||||
binding.btnSamplestart.isEnabled = true
|
binding.btnSamplestart.isEnabled = true
|
||||||
}else{
|
}else{
|
||||||
|
hemoCubeViewModel.messages.postValue("Fresh Kit - Please take Buffer Blank reading")
|
||||||
binding.btnPlacebuffer.apply {
|
binding.btnPlacebuffer.apply {
|
||||||
setBackgroundColor(Color.RED) // Set button background color to green
|
setBackgroundColor(Color.RED) // Set button background color to green
|
||||||
text = "No Buffer" // Change button text to "Buffer Exists"
|
text = "Fresh Buffer" // Change button text to "Buffer Exists"
|
||||||
}
|
}
|
||||||
binding.btnSamplestart.isClickable = false
|
binding.btnSamplestart.isClickable = false
|
||||||
binding.btnSamplestart.isEnabled = false
|
binding.btnSamplestart.isEnabled = false
|
||||||
@@ -481,7 +492,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
//#EC for v0 and v1 and #RC for v2
|
//#EC for v0 and v1 and #RC for v2
|
||||||
(resultData.contains("#EC") && this.testStatusCode < TestStatus.EPROM_ADC_RETRIEVAL_COMPLETED.code) -> {
|
(resultData.contains("#EC") && this.testStatusCode < TestStatus.EPROM_ADC_RETRIEVAL_COMPLETED.code) -> {
|
||||||
this.testStatusCode = TestStatus.EPROM_ADC_RETRIEVAL_COMPLETED.code
|
this.testStatusCode = TestStatus.EPROM_ADC_RETRIEVAL_COMPLETED.code
|
||||||
hemoCubeViewModel.messages.postValue("Ready to test")//EPROM ADC Loaded
|
//EPROM ADC Loaded
|
||||||
//checkCuvettePresence()
|
//checkCuvettePresence()
|
||||||
activity?.runOnUiThread {
|
activity?.runOnUiThread {
|
||||||
binding.btnPlacebuffer.visibility = View.VISIBLE
|
binding.btnPlacebuffer.visibility = View.VISIBLE
|
||||||
@@ -492,7 +503,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
(resultData.contains("#AC") && this.testStatusCode < TestStatus.TEMPERATURE_CHECK.code) -> {
|
(resultData.contains("#AC") && this.testStatusCode < TestStatus.TEMPERATURE_CHECK.code) -> {
|
||||||
this.testStatusCode = TestStatus.TEMPERATURE_CHECK.code
|
this.testStatusCode = TestStatus.TEMPERATURE_CHECK.code
|
||||||
temperature = resultData.substringAfter("#AS").substringBefore("#AC")
|
temperature = resultData.substringAfter("#AS").substringBefore("#AC")
|
||||||
hemoCubeViewModel.messages.postValue("Ready to test \n Temperature : $temperature")
|
//hemoCubeViewModel.messages.postValue("Ready to test \n Temperature : $temperature")
|
||||||
}
|
}
|
||||||
resultData.contains("#CIN") && sampleClick && this.testStatusCode < TestStatus.CUVETTE_PRESENTS.code -> {
|
resultData.contains("#CIN") && sampleClick && this.testStatusCode < TestStatus.CUVETTE_PRESENTS.code -> {
|
||||||
hemoCubeViewModel.messages.postValue(getString(R.string.cuvette_present))
|
hemoCubeViewModel.messages.postValue(getString(R.string.cuvette_present))
|
||||||
@@ -546,18 +557,53 @@ class HemoCubeFragment : Fragment() {
|
|||||||
resultData.contains("#BC") && this.testStatusCode < TestStatus.BUFFER_COMPLETED.code -> {
|
resultData.contains("#BC") && this.testStatusCode < TestStatus.BUFFER_COMPLETED.code -> {
|
||||||
activity?.runOnUiThread {
|
activity?.runOnUiThread {
|
||||||
resultData = ""
|
resultData = ""
|
||||||
// resultData.replace("#AIN","#BAIN",false)
|
if(Constants.FLAGS_ENABLED){
|
||||||
Log.d("resultDataBC",resultData)
|
fetchResult()
|
||||||
binding.testing.visibility = View.GONE
|
}else{
|
||||||
binding.tvSubtitle4.text = getString(R.string.buffer_completed)
|
Log.d("resultDataBC",resultData)
|
||||||
|
activity?.runOnUiThread {
|
||||||
|
binding.testing.visibility = View.GONE
|
||||||
|
binding.tvSubtitle4.text = getString(R.string.buffer_completed)
|
||||||
// binding.btnSamplestart.visibility = View.VISIBLE
|
// binding.btnSamplestart.visibility = View.VISIBLE
|
||||||
binding.btnPlacebuffer.visibility = View.GONE
|
binding.btnPlacebuffer.visibility = View.GONE
|
||||||
binding.btnSamplestart.isClickable = true
|
binding.btnSamplestart.visibility = View.VISIBLE
|
||||||
binding.btnSamplestart.isEnabled = true
|
binding.btnSamplestart.isClickable = true
|
||||||
|
binding.btnSamplestart.isEnabled = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// resultData.replace("#AIN","#BAIN",false)
|
||||||
}
|
}
|
||||||
this.testStatusCode = TestStatus.BUFFER_COMPLETED.code
|
this.testStatusCode = TestStatus.BUFFER_COMPLETED.code
|
||||||
|
|
||||||
}
|
}
|
||||||
|
resultData.contains("REND") && this.testStatusCode < TestStatus.BUFFER_PRINT_COMPLETED.code -> {
|
||||||
|
resultData = resultData.replace("REND","Buffer print complete"+ generateTwoDigitRandomNumber())
|
||||||
|
hemoCubeViewModel.deviceMessages.postValue(resultData)
|
||||||
|
if(handleBufferCompleted()){
|
||||||
|
this.testStatusCode = TestStatus.TEMPERATURE_CHECK.code
|
||||||
|
activity?.runOnUiThread {
|
||||||
|
checkCuvette = false
|
||||||
|
binding.testing.visibility = View.GONE
|
||||||
|
binding.btnRetryCheckCuvette.visibility = View.GONE
|
||||||
|
binding.btnPlacebuffer.visibility = View.VISIBLE
|
||||||
|
binding.btnSamplestart.visibility = View.VISIBLE
|
||||||
|
binding.btnSamplestart.isClickable = false
|
||||||
|
binding.btnSamplestart.isEnabled = false
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
this.testStatusCode = TestStatus.BUFFER_PRINT_COMPLETED.code
|
||||||
|
Log.d("resultDataBC",resultData)
|
||||||
|
activity?.runOnUiThread {
|
||||||
|
binding.testing.visibility = View.GONE
|
||||||
|
binding.tvSubtitle4.text = getString(R.string.buffer_completed)
|
||||||
|
// binding.btnSamplestart.visibility = View.VISIBLE
|
||||||
|
binding.btnPlacebuffer.visibility = View.GONE
|
||||||
|
binding.btnSamplestart.visibility = View.VISIBLE
|
||||||
|
binding.btnSamplestart.isClickable = true
|
||||||
|
binding.btnSamplestart.isEnabled = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
(resultData.contains("#SS") || resultData.contains("#SS1")) && this.testStatusCode < TestStatus.SAMPLE_STARTED.code -> {
|
(resultData.contains("#SS") || resultData.contains("#SS1")) && this.testStatusCode < TestStatus.SAMPLE_STARTED.code -> {
|
||||||
this.testStatusCode = TestStatus.SAMPLE_STARTED.code
|
this.testStatusCode = TestStatus.SAMPLE_STARTED.code
|
||||||
@@ -637,6 +683,8 @@ class HemoCubeFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resultData.contains("REND") && this.testStatusCode < TestStatus.SAMPLE_PRINT_COMPLETED.code -> {
|
resultData.contains("REND") && this.testStatusCode < TestStatus.SAMPLE_PRINT_COMPLETED.code -> {
|
||||||
|
resultData = resultData.replace("REND","Sample print complete"+ generateTwoDigitRandomNumber())
|
||||||
|
hemoCubeViewModel.deviceMessages.postValue(resultData)
|
||||||
handleSampleCompleted()
|
handleSampleCompleted()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -733,6 +781,34 @@ class HemoCubeFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleBufferCompleted(): Boolean {
|
||||||
|
val lb1Regex = Regex("""LB1 (\d+\.\d+)""")
|
||||||
|
val lb2Regex = Regex("""LB2 (\d+\.\d+)""")
|
||||||
|
|
||||||
|
val lb1Match = lb1Regex.find(resultData)
|
||||||
|
val lb2Match = lb2Regex.find(resultData)
|
||||||
|
|
||||||
|
val lb1Value = lb1Match!!.groupValues[1].toFloat()
|
||||||
|
val lb2Value = lb2Match!!.groupValues[1].toFloat()
|
||||||
|
|
||||||
|
val led1Min = 21000.00
|
||||||
|
val led1Max = 23000.00
|
||||||
|
|
||||||
|
val led2Min = 17000.00
|
||||||
|
val led2Max = 19000.00
|
||||||
|
|
||||||
|
val isLb1InRange = lb1Value in led1Min..led1Max
|
||||||
|
val isLb2InRange = lb2Value in led2Min..led2Max
|
||||||
|
if(!isLb1InRange || !isLb2InRange){
|
||||||
|
hemoCubeViewModel.messages.postValue("Buffer Reading Out of Range - Please Take Buffer/Blank Reading. If problem persists, Calibrate device")
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.d("HemoCube", "LB1 ($lb1Value) is in range LED1 ($led1Min-$led1Max): $isLb1InRange")
|
||||||
|
Log.d("HemoCube", "LB2 ($lb2Value) is in range LED2 ($led2Min-$led2Max): $isLb2InRange")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
private fun showRetryButtonForCuvette() {
|
private fun showRetryButtonForCuvette() {
|
||||||
activity?.runOnUiThread {
|
activity?.runOnUiThread {
|
||||||
// binding.btnPlacebuffer.visibility = View.GONE
|
// binding.btnPlacebuffer.visibility = View.GONE
|
||||||
@@ -756,7 +832,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
hemoCubeViewModel.uploadHemoCubeResultToDatabase(
|
hemoCubeViewModel.uploadHemoCubeResultToDatabase(
|
||||||
isOnline, true, sharedPreferences.getString(Constants.KIT_NUMBER, "")
|
isOnline, true, sharedPreferences.getString(Constants.KIT_NUMBER, ""),false
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -800,12 +876,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
led4SampleForDevice =
|
led4SampleForDevice =
|
||||||
resultLines[8].split(' ')[1].split('\r')[0].trim().toDoubleOrNull()!!
|
resultLines[8].split(' ')[1].split('\r')[0].trim().toDoubleOrNull()!!
|
||||||
processResult()
|
processResult()
|
||||||
if (Constants.PQ_MODE) {
|
|
||||||
finishReading()
|
|
||||||
} else {
|
|
||||||
sendFirstGainCommand()
|
|
||||||
}
|
|
||||||
currentResultData = ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun processV1HardwareId(resultData: String) {
|
fun processV1HardwareId(resultData: String) {
|
||||||
@@ -918,7 +989,7 @@ class HemoCubeFragment : Fragment() {
|
|||||||
requireActivity().packageName, 0
|
requireActivity().packageName, 0
|
||||||
)
|
)
|
||||||
val version = pInfo.versionName
|
val version = pInfo.versionName
|
||||||
|
//absorbance
|
||||||
val led1Average = log10(led1BufferForDevice.div(led1SampleForDevice))
|
val led1Average = log10(led1BufferForDevice.div(led1SampleForDevice))
|
||||||
val led2Average = log10(led2BufferForDevice.div(led2SampleForDevice))
|
val led2Average = log10(led2BufferForDevice.div(led2SampleForDevice))
|
||||||
val led3Average = log10(led3BufferForDevice.div(led3SampleForDevice))
|
val led3Average = log10(led3BufferForDevice.div(led3SampleForDevice))
|
||||||
@@ -927,6 +998,60 @@ class HemoCubeFragment : Fragment() {
|
|||||||
val deviceRatio = led2Average / led1Average
|
val deviceRatio = led2Average / led1Average
|
||||||
val borderlineMetric = (led1Average - led2Average) / deviceRatio
|
val borderlineMetric = (led1Average - led2Average) / deviceRatio
|
||||||
|
|
||||||
|
if(Constants.ABS_FLAGS_ENABLED){
|
||||||
|
val inRange2mmLed1: Boolean
|
||||||
|
val inRange2mmLed2: Boolean
|
||||||
|
val inRange10mmLed1: Boolean
|
||||||
|
val inRange10mmLed2: Boolean
|
||||||
|
val min2mmLed1 = getDoubleFromPreferences(Constants.ABS2LED1MMLL, Constants.min2mmLed1)
|
||||||
|
val max2mmLed1 = getDoubleFromPreferences(Constants.ABS2LED1MMUL, Constants.max2mmLed1)
|
||||||
|
val min2mmLed2 = getDoubleFromPreferences(Constants.ABS2LED2MMLL, Constants.min2mmLed2)
|
||||||
|
val max2mmLed2 = getDoubleFromPreferences(Constants.ABS2LED2MMUL, Constants.max2mmLed2)
|
||||||
|
val min10mmLed1 = getDoubleFromPreferences(Constants.ABS10LED1MMLL, Constants.min10mmLed1)
|
||||||
|
val max10mmLed1 = getDoubleFromPreferences(Constants.ABS10LED1MMUL, Constants.max10mmLed1)
|
||||||
|
val min10mmLed2 = getDoubleFromPreferences(Constants.ABS10LED2MMLL, Constants.min10mmLed2)
|
||||||
|
val max10mmLed2 = getDoubleFromPreferences(Constants.ABS10LED2MMUL, Constants.max10mmLed2)
|
||||||
|
if(led1Average < 0 || led2Average < 0){
|
||||||
|
hemoCubeViewModel.messages.postValue("Negative Absorbance - Repeat test with reading Buffer first and sample second")
|
||||||
|
this.testStatusCode = TestStatus.BUFFER_PRINT_COMPLETED.code
|
||||||
|
binding.testing.visibility = View.GONE
|
||||||
|
binding.btnPlacebuffer.visibility = View.GONE
|
||||||
|
binding.btnSamplestart.visibility = View.VISIBLE
|
||||||
|
binding.btnSamplestart.isClickable = true
|
||||||
|
binding.btnSamplestart.isEnabled = true
|
||||||
|
return
|
||||||
|
}else{
|
||||||
|
if(cuvetteSize == "10mm"){
|
||||||
|
inRange10mmLed1 = led1Average in min10mmLed1..max10mmLed1
|
||||||
|
inRange10mmLed2 = led2Average in min10mmLed2..max10mmLed2
|
||||||
|
if(!inRange10mmLed1 || !inRange10mmLed2){
|
||||||
|
hemoCubeViewModel.messages.postValue("Absorbance out-of-Range - Repeat test with adequate blood volume and Incubation time")
|
||||||
|
this.testStatusCode = TestStatus.BUFFER_PRINT_COMPLETED.code
|
||||||
|
binding.testing.visibility = View.GONE
|
||||||
|
binding.btnPlacebuffer.visibility = View.GONE
|
||||||
|
binding.btnSamplestart.visibility = View.VISIBLE
|
||||||
|
binding.btnSamplestart.isClickable = true
|
||||||
|
binding.btnSamplestart.isEnabled = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}else if(cuvetteSize == "2mm"){
|
||||||
|
inRange2mmLed1 = led1Average in min2mmLed1..max2mmLed1
|
||||||
|
inRange2mmLed2 = led2Average in min2mmLed2..max2mmLed2
|
||||||
|
if(!inRange2mmLed1 || !inRange2mmLed2){
|
||||||
|
hemoCubeViewModel.messages.postValue("Absorbance out-of-Range - Repeat test with adequate blood volume and Incubation time")
|
||||||
|
this.testStatusCode = TestStatus.BUFFER_PRINT_COMPLETED.code
|
||||||
|
binding.testing.visibility = View.GONE
|
||||||
|
binding.btnPlacebuffer.visibility = View.GONE
|
||||||
|
binding.btnSamplestart.visibility = View.VISIBLE
|
||||||
|
binding.btnSamplestart.isClickable = true
|
||||||
|
binding.btnSamplestart.isEnabled = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (led1BufferForDevice < Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(0)
|
if (led1BufferForDevice < Constants.BUFFER_INTENSITY_THRESHOLDS[deviceHardwareId]?.get(0)
|
||||||
?.get(0)!!
|
?.get(0)!!
|
||||||
@@ -1119,6 +1244,13 @@ class HemoCubeFragment : Fragment() {
|
|||||||
).show()
|
).show()
|
||||||
Firebase.crashlytics.recordException(e)
|
Firebase.crashlytics.recordException(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Constants.PQ_MODE) {
|
||||||
|
finishReading()
|
||||||
|
} else {
|
||||||
|
sendFirstGainCommand()
|
||||||
|
}
|
||||||
|
currentResultData = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
fun reclassifyWithBorderlineMethod2(deviceRatio: Double?, deviceRatioClass: String?, led2Average: Double?): String {
|
fun reclassifyWithBorderlineMethod2(deviceRatio: Double?, deviceRatioClass: String?, led2Average: Double?): String {
|
||||||
@@ -1477,4 +1609,10 @@ class HemoCubeFragment : Fragment() {
|
|||||||
val coefficient2 = currentDeviceData?.coefficients?.get(1) ?: 0.0
|
val coefficient2 = currentDeviceData?.coefficients?.get(1) ?: 0.0
|
||||||
return coefficient1 * ratio + coefficient2
|
return coefficient1 * ratio + coefficient2
|
||||||
}
|
}
|
||||||
|
fun getDoubleFromPreferences(key: String, defaultValue: Double): Double {
|
||||||
|
return sharedPreferences.getString(key, defaultValue.toString())?.toDouble() ?: defaultValue
|
||||||
|
}
|
||||||
|
private fun generateTwoDigitRandomNumber(): Int {
|
||||||
|
return Random.nextInt(10, 100)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ class HemoCubeViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun uploadHemoCubeResultToDatabase(
|
fun uploadHemoCubeResultToDatabase(
|
||||||
isOnline: Boolean, testStatus: Boolean, kitSerial: String?,
|
isOnline: Boolean, testStatus: Boolean, kitSerial: String?,quickCapture:Boolean
|
||||||
) = viewModelScope.launch {
|
) = viewModelScope.launch {
|
||||||
if (kitSerial != null) {
|
if (kitSerial != null) {
|
||||||
testDetails?.kitSerial = kitSerial
|
testDetails?.kitSerial = kitSerial
|
||||||
@@ -132,9 +132,10 @@ class HemoCubeViewModel @Inject constructor(
|
|||||||
try {
|
try {
|
||||||
if (isOnline) {
|
if (isOnline) {
|
||||||
parseData()
|
parseData()
|
||||||
addResultTestToDb()
|
addResultTestToDb(quickCapture)
|
||||||
} else {
|
} else {
|
||||||
parseData()
|
parseData()
|
||||||
|
addResultTestToDb(quickCapture)
|
||||||
testDetails?.testTime = SimpleDateFormat(
|
testDetails?.testTime = SimpleDateFormat(
|
||||||
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||||
).format(Calendar.getInstance().time)
|
).format(Calendar.getInstance().time)
|
||||||
@@ -417,66 +418,93 @@ class HemoCubeViewModel @Inject constructor(
|
|||||||
testDetails?.volume = DataHolder.hemoCubeTestData?.volume
|
testDetails?.volume = DataHolder.hemoCubeTestData?.volume
|
||||||
testDetails?.filter = DataHolder.hemoCubeTestData?.filter
|
testDetails?.filter = DataHolder.hemoCubeTestData?.filter
|
||||||
testDetails?.labName = DataHolder.hemoCubeTestData?.labName
|
testDetails?.labName = DataHolder.hemoCubeTestData?.labName
|
||||||
testDetails?.cuvetteSize = DataHolder.hemoCubeTestData?.cuvetteSize
|
testDetails?.cuvetteSize = sharedPreference.getString(Constants.CUVETTE_SIZE, "").toString()
|
||||||
testDetails?.centerName = DataHolder.centerName
|
testDetails?.centerName = sharedPreference.getString(Constants.CENTER_NAME, "").toString()
|
||||||
testDetails?.district = DataHolder.district
|
testDetails?.district = sharedPreference.getString(Constants.DISTRICT, "").toString()
|
||||||
|
testDetails?.ipAddress = sharedPreference.getString(Constants.IP_ADDRESS, "").toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addResultTestToDb() {
|
private fun addResultTestToDb(quickCapture: Boolean) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
try {
|
try {
|
||||||
testDetails!!.reportUploadTime = SimpleDateFormat(
|
testDetails!!.quickCapture = quickCapture
|
||||||
|
testDetails.reportUploadTime = SimpleDateFormat(
|
||||||
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||||
).format(Calendar.getInstance().time)
|
).format(Calendar.getInstance().time)
|
||||||
val currentTimeFormatted = SimpleDateFormat(
|
val currentTimeFormatted = SimpleDateFormat(
|
||||||
"yyyy-MM-dd'T'HH:mm:ssZZZZZ",
|
"yyyy-MM-dd'T'HH:mm:ssZZZZZ",
|
||||||
Locale.getDefault()
|
Locale.getDefault()
|
||||||
).format(Calendar.getInstance().time)
|
).format(Calendar.getInstance().time)
|
||||||
when (val response = repository.addTestToDatabase(testDetails)) {
|
if(quickCapture){
|
||||||
is Response.Success -> {
|
when (val response = repository.addQcTestToDatabase(testDetails)) {
|
||||||
val kitCount = sharedPreference.getInt(Constants.KIT_COUNT, 0)
|
is Response.Success -> {
|
||||||
with(sharedPreference.edit()) {
|
val kitCount = sharedPreference.getInt(Constants.KIT_COUNT, 0)
|
||||||
putInt(Constants.KIT_COUNT, kitCount.plus(1))
|
with(sharedPreference.edit()) {
|
||||||
apply()
|
putInt(Constants.KIT_COUNT, kitCount.plus(1))
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
Log.i("Testdb", "Data uploaded to Firestore successfully")
|
||||||
|
fireBaseUpload.postValue("Success")
|
||||||
|
testDetails.localFlag = true
|
||||||
|
hemoCubeDao.updateTest(testDetails)
|
||||||
}
|
}
|
||||||
Log.i("Testdb", "Data uploaded to Firestore successfully")
|
|
||||||
fireBaseUpload.postValue("Success")
|
|
||||||
testDetails.localFlag = true
|
|
||||||
if (Constants.MOLBIO_INTEGRATION) {
|
|
||||||
// Sanitize testDetails before using it in the API call
|
|
||||||
val sanitizedTestDetails = sanitizeDoubleValues(testDetails)
|
|
||||||
|
|
||||||
// Now, use sanitizedTestDetails for the API call
|
is Response.Error -> {
|
||||||
uploadResult(
|
Log.e("Testdb", "Error uploading data to Firestore: $response")
|
||||||
MolbioV2ResultRequest(
|
fireBaseUpload.postValue("Error")
|
||||||
mutableListOf(
|
hemoCubeDao.updateTest(testDetails)
|
||||||
MolbioV2Result(
|
}
|
||||||
rawData = sanitizedTestDetails,
|
|
||||||
analysisId = sanitizedTestDetails._id,
|
else -> {}
|
||||||
analysisDate = currentTimeFormatted,
|
}
|
||||||
analysisStatus = sanitizedTestDetails.classificationResult,
|
}else{
|
||||||
thresholds = Constants.BUFFER_INTENSITY_THRESHOLDS[sanitizedTestDetails.deviceId]?.toString(),
|
when (val response = repository.addTestToDatabase(testDetails)) {
|
||||||
interpretation = sanitizedTestDetails.classificationResult,
|
is Response.Success -> {
|
||||||
testId = sanitizedTestDetails._id,
|
val kitCount = sharedPreference.getInt(Constants.KIT_COUNT, 0)
|
||||||
testTime = currentTimeFormatted,
|
with(sharedPreference.edit()) {
|
||||||
collectionTime = currentTimeFormatted,
|
putInt(Constants.KIT_COUNT, kitCount.plus(1))
|
||||||
expiryTime = currentTimeFormatted,
|
apply()
|
||||||
|
}
|
||||||
|
Log.i("Testdb", "Data uploaded to Firestore successfully")
|
||||||
|
fireBaseUpload.postValue("Success")
|
||||||
|
testDetails.localFlag = true
|
||||||
|
if (Constants.MOLBIO_INTEGRATION) {
|
||||||
|
// Sanitize testDetails before using it in the API call
|
||||||
|
val sanitizedTestDetails = sanitizeDoubleValues(testDetails)
|
||||||
|
|
||||||
|
// Now, use sanitizedTestDetails for the API call
|
||||||
|
uploadResult(
|
||||||
|
MolbioV2ResultRequest(
|
||||||
|
mutableListOf(
|
||||||
|
MolbioV2Result(
|
||||||
|
rawData = sanitizedTestDetails,
|
||||||
|
analysisId = sanitizedTestDetails._id,
|
||||||
|
analysisDate = currentTimeFormatted,
|
||||||
|
analysisStatus = sanitizedTestDetails.classificationResult,
|
||||||
|
thresholds = Constants.BUFFER_INTENSITY_THRESHOLDS[sanitizedTestDetails.deviceId]?.toString(),
|
||||||
|
interpretation = sanitizedTestDetails.classificationResult,
|
||||||
|
testId = sanitizedTestDetails._id,
|
||||||
|
testTime = currentTimeFormatted,
|
||||||
|
collectionTime = currentTimeFormatted,
|
||||||
|
expiryTime = currentTimeFormatted,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
}
|
||||||
|
hemoCubeDao.updateTest(testDetails)
|
||||||
}
|
}
|
||||||
hemoCubeDao.updateTest(testDetails)
|
|
||||||
}
|
|
||||||
|
|
||||||
is Response.Error -> {
|
is Response.Error -> {
|
||||||
Log.e("Testdb", "Error uploading data to Firestore: $response")
|
Log.e("Testdb", "Error uploading data to Firestore: $response")
|
||||||
fireBaseUpload.postValue("Error")
|
fireBaseUpload.postValue("Error")
|
||||||
hemoCubeDao.updateTest(testDetails)
|
hemoCubeDao.updateTest(testDetails)
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {}
|
else -> {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e("Testdb", "Exception during data upload: ${e.message}")
|
Log.e("Testdb", "Exception during data upload: ${e.message}")
|
||||||
fireBaseUpload.postValue("Error")
|
fireBaseUpload.postValue("Error")
|
||||||
|
|||||||
136
app/src/main/res/layout/activity_update_values.xml
Normal file
136
app/src/main/res/layout/activity_update_values.xml
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ // Copyright (c) 2024 ShanMukha Innovations Pvt. Ltd. All rights reserved.
|
||||||
|
~ // Notice: All information contained herein is, and remains
|
||||||
|
~ // the property of ShanMukha Innovations Pvt. Ltd. and its suppliers,
|
||||||
|
~ // if any. The intellectual and technical concepts contained
|
||||||
|
~ // herein are proprietary to ShanMukha Innovations Pvt. Ltd.
|
||||||
|
~ // and its suppliers and may be covered by Indian and Foreign Patents,
|
||||||
|
~ // patents in process, and are protected by trade secret or copyright law.
|
||||||
|
~ // Dissemination of this information or reproduction of this material
|
||||||
|
~ // is strictly forbidden unless prior written permission is obtained
|
||||||
|
~ // from ShanMukha Innovations Pvt. Ltd.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context="com.example.hpostesting.presentation.diagnostics.DiagnosticsFragment">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tv_subtitle2"
|
||||||
|
style="@style/title2"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="24dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:textColor="@color/black"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:text="Update values of ABS Limits"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/main_ll"
|
||||||
|
style="@style/title1_1"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="24dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/tv_subtitle2">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/et_2mmled1_ll"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:hint="2mm Led 1 lower limit"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/et_2mmled1_ul"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:hint="2mm Led 1 upper limit"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/et_2mmled2_ll"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:hint="2mm Led 2 lower limit"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/et_2mmled2_ul"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:hint="2mm Led 2 upper limit"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/et_10mmled1_ll"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:hint="10mm Led 1 lower limit"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/et_10mmled1_ul"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:hint="10mm Led 1 upper limit"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/et_10mmled2_ll"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:hint="10mm Led 2 lower limit"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/et_10mmled2_ul"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:hint="10mm Led 2 upper limit"
|
||||||
|
android:inputType="numberDecimal" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btn_submit"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="16dp"
|
||||||
|
android:layout_marginTop="24dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/submit"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/main_ll" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progressBar"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:elevation="12dp"
|
||||||
|
android:indeterminate="true"
|
||||||
|
android:indeterminateDrawable="@drawable/progressbar_drawable"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -153,6 +153,19 @@
|
|||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/btn_deviceProvision" />
|
app:layout_constraintTop_toBottomOf="@id/btn_deviceProvision" />
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btn_update_values"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="16dp"
|
||||||
|
android:layout_marginTop="24dp"
|
||||||
|
android:clickable="false"
|
||||||
|
android:text="Update values"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
app:cornerRadius="16dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/btn_deviceProvision" />
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/btn_firefox"
|
android:id="@+id/btn_firefox"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -16,75 +16,62 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
tools:context="com.example.hpostesting.presentation.hemocube.HemoCubeFragment">
|
tools:context="com.example.hpostesting.presentation.hemocube.HemoCubeFragment">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/cl_parent"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<TextView
|
||||||
android:id="@+id/cl_parent"
|
android:id="@+id/tv_title"
|
||||||
android:layout_width="match_parent"
|
style="@style/title1"
|
||||||
android:layout_height="match_parent">
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginHorizontal="24dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:text="@string/Instructions"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_title"
|
android:id="@+id/tv_subtitle2"
|
||||||
style="@style/title1"
|
style="@style/title2"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="24dp"
|
android:layout_marginHorizontal="24dp"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="16dp"
|
||||||
android:text="@string/Instructions"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toBottomOf="@id/tv_title" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tv_subtitle2"
|
android:id="@+id/tv_name"
|
||||||
style="@style/title2"
|
style="@style/title2"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginHorizontal="24dp"
|
android:layout_marginHorizontal="24dp"
|
||||||
android:layout_marginTop="16dp"
|
android:gravity="center"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
android:padding="12dp"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
android:layout_marginTop="26dp"
|
||||||
app:layout_constraintTop_toBottomOf="@id/tv_title" />
|
android:textSize="14sp"
|
||||||
|
android:textFontWeight="700"
|
||||||
|
android:text="Name: SMI\n ID: 1672282828"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
tools:ignore="MissingConstraints" />
|
||||||
|
|
||||||
<!-- <TextView-->
|
<TextView
|
||||||
<!-- android:id="@+id/tv_subtitle3"-->
|
android:id="@+id/tv_subtitle4"
|
||||||
<!-- style="@style/title2"-->
|
style="@style/title1_1"
|
||||||
<!-- android:layout_width="0dp"-->
|
android:layout_width="0dp"
|
||||||
<!-- android:layout_height="wrap_content"-->
|
android:layout_height="wrap_content"
|
||||||
<!-- android:layout_marginHorizontal="24dp"-->
|
android:layout_marginHorizontal="24dp"
|
||||||
<!-- android:layout_marginTop="16dp"-->
|
android:layout_marginTop="72dp"
|
||||||
<!-- android:text="@string/step5"-->
|
android:gravity="center"
|
||||||
<!-- app:layout_constraintEnd_toEndOf="parent"-->
|
android:textColor="@color/red"
|
||||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
android:textSize="16sp"
|
||||||
<!-- app:layout_constraintTop_toBottomOf="@id/tv_subtitle2" />-->
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
<TextView
|
app:layout_constraintTop_toBottomOf="@id/et_abha_id" />
|
||||||
android:id="@+id/tv_name"
|
|
||||||
style="@style/title2"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginHorizontal="24dp"
|
|
||||||
android:gravity="center"
|
|
||||||
android:padding="12dp"
|
|
||||||
android:layout_marginTop="26dp"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:textFontWeight="700"
|
|
||||||
android:text="Name: SMI\n ID: 1672282828"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
tools:ignore="MissingConstraints" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tv_subtitle4"
|
|
||||||
style="@style/title1_1"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginHorizontal="24dp"
|
|
||||||
android:layout_marginTop="92dp"
|
|
||||||
android:gravity="center"
|
|
||||||
android:textColor="@color/red"
|
|
||||||
android:textSize="18sp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/et_abha_id" />
|
|
||||||
|
|
||||||
|
|
||||||
<!-- <Button-->
|
<!-- <Button-->
|
||||||
@@ -247,6 +234,7 @@
|
|||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="no device message"
|
android:text="no device message"
|
||||||
android:textColor="@color/black"
|
android:textColor="@color/black"
|
||||||
|
android:scrollbars="vertical"
|
||||||
android:textSize="11sp"
|
android:textSize="11sp"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
|||||||
@@ -16,5 +16,6 @@
|
|||||||
<item>Mysuru</item>
|
<item>Mysuru</item>
|
||||||
<item>Kodagu</item>
|
<item>Kodagu</item>
|
||||||
<item>Chamarajanagar</item>
|
<item>Chamarajanagar</item>
|
||||||
|
<item>Other</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -195,7 +195,7 @@
|
|||||||
<string name="set_baseline_reference_again">क्या फिर से आधार लाइन सेट करना है?</string>
|
<string name="set_baseline_reference_again">क्या फिर से आधार लाइन सेट करना है?</string>
|
||||||
<string name="baseline_instruction">आधार निर्देश</string>
|
<string name="baseline_instruction">आधार निर्देश</string>
|
||||||
<string name="to_be_launched_in_next_version_of_the_app">अगले संस्करण में लॉन्च किया जाएगा</string>
|
<string name="to_be_launched_in_next_version_of_the_app">अगले संस्करण में लॉन्च किया जाएगा</string>
|
||||||
<string name="invalid_kit">अमान्य किट सीरियल नंबर, सही उदाहरण, SMI/SC/019/01/001</string>
|
<string name="invalid_kit">अमान्य किट सीरियल नंबर</string>
|
||||||
<string name="user_list">उपयोगकर्ता सूची</string>
|
<string name="user_list">उपयोगकर्ता सूची</string>
|
||||||
<string name="user_id">उपयोगकर्ता आईडी</string>
|
<string name="user_id">उपयोगकर्ता आईडी</string>
|
||||||
<string name="aadhar_id">आधार आईडी</string>
|
<string name="aadhar_id">आधार आईडी</string>
|
||||||
|
|||||||
@@ -16,5 +16,6 @@
|
|||||||
<item>Mysuru</item>
|
<item>Mysuru</item>
|
||||||
<item>Kodagu</item>
|
<item>Kodagu</item>
|
||||||
<item>Chamarajanagar</item>
|
<item>Chamarajanagar</item>
|
||||||
|
<item>Other</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -194,7 +194,7 @@
|
|||||||
<string name="set_baseline_reference_again">ಬೇಸ್ಲೈನ್ ಉಲ್ಲೇಖವನ್ನು ಮತ್ತೆ ಸೆಟ್ ಮಾಡಿ </string>
|
<string name="set_baseline_reference_again">ಬೇಸ್ಲೈನ್ ಉಲ್ಲೇಖವನ್ನು ಮತ್ತೆ ಸೆಟ್ ಮಾಡಿ </string>
|
||||||
<string name="baseline_instruction">ಬೇಸ್ಲೈನ್ ನಿರ್ದೇಶನ</string>
|
<string name="baseline_instruction">ಬೇಸ್ಲೈನ್ ನಿರ್ದೇಶನ</string>
|
||||||
<string name="to_be_launched_in_next_version_of_the_app">ಮುಂದಿನ ಆಪ್ ಆವೃತ್ತಿಯಲ್ಲಿ ಪ್ರಕಟಿಸಲಾಗಿದೆ</string>
|
<string name="to_be_launched_in_next_version_of_the_app">ಮುಂದಿನ ಆಪ್ ಆವೃತ್ತಿಯಲ್ಲಿ ಪ್ರಕಟಿಸಲಾಗಿದೆ</string>
|
||||||
<string name="invalid_kit">ಅಮಾನ್ಯ ಕಿಟ್ ಸೀರಿಯಲ್ ಸಂಖ್ಯೆ, ಸರಿಯಾದ ಉದಾಹರಣೆ, SMI/SC/019/01/001</string>
|
<string name="invalid_kit">ಅಮಾನ್ಯ ಕಿಟ್ ಸೀರಿಯಲ್ ಸಂಖ್ಯೆ</string>
|
||||||
<string name="user_list">ಬಳಕೆದಾರ ಪಟ್ಟಿ</string>
|
<string name="user_list">ಬಳಕೆದಾರ ಪಟ್ಟಿ</string>
|
||||||
<string name="user_id">ಬಳಕೆದಾರ ಐಡಿ</string>
|
<string name="user_id">ಬಳಕೆದಾರ ಐಡಿ</string>
|
||||||
<string name="aadhar_id">ಆಧಾರ್ ಐಡಿ</string>
|
<string name="aadhar_id">ಆಧಾರ್ ಐಡಿ</string>
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
<item>Mysuru</item>
|
<item>Mysuru</item>
|
||||||
<item>Kodagu</item>
|
<item>Kodagu</item>
|
||||||
<item>Chamarajanagar</item>
|
<item>Chamarajanagar</item>
|
||||||
|
<item>Other</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -199,7 +199,7 @@
|
|||||||
<string name="set_baseline_reference_again">Set Baseline/Reference again?</string>
|
<string name="set_baseline_reference_again">Set Baseline/Reference again?</string>
|
||||||
<string name="baseline_instruction">Baseline Instruction</string>
|
<string name="baseline_instruction">Baseline Instruction</string>
|
||||||
<string name="to_be_launched_in_next_version_of_the_app">To be launched in next version of the app</string>
|
<string name="to_be_launched_in_next_version_of_the_app">To be launched in next version of the app</string>
|
||||||
<string name="invalid_kit">Invalid Kit Serial Number, correct example, SMI/SC/019/01/001</string>
|
<string name="invalid_kit">Invalid Kit Serial Number</string>
|
||||||
<string name="user_list">User List</string>
|
<string name="user_list">User List</string>
|
||||||
<string name="user_id">User ID</string>
|
<string name="user_id">User ID</string>
|
||||||
<string name="aadhar_id">Aadhar ID</string>
|
<string name="aadhar_id">Aadhar ID</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user