Device provision fetching code is added
This commit is contained in:
@@ -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.HemoCubeTestData
|
||||||
import com.example.hpostesting.data.model.patient.UserData
|
import com.example.hpostesting.data.model.patient.UserData
|
||||||
|
|
||||||
@Database(entities = [UserData::class, HemoCubeTestData::class, DeviceData::class, BufferCheckData::class], version = 24, exportSchema = false)
|
@Database(entities = [UserData::class, HemoCubeTestData::class, DeviceData::class, BufferCheckData::class], version = 25, exportSchema = false)
|
||||||
@TypeConverters(Converters::class)
|
@TypeConverters(Converters::class)
|
||||||
abstract class MyDatabase : RoomDatabase() {
|
abstract class MyDatabase : RoomDatabase() {
|
||||||
abstract fun userDao(): UserDao
|
abstract fun userDao(): UserDao
|
||||||
|
|||||||
@@ -19,9 +19,13 @@ import androidx.navigation.ui.navigateUp
|
|||||||
import androidx.navigation.ui.setupActionBarWithNavController
|
import androidx.navigation.ui.setupActionBarWithNavController
|
||||||
import androidx.navigation.ui.setupWithNavController
|
import androidx.navigation.ui.setupWithNavController
|
||||||
import com.example.hpostesting.data.Result
|
import com.example.hpostesting.data.Result
|
||||||
|
import com.example.hpostesting.data.api.DeviceCommunicationHandler
|
||||||
|
import com.example.hpostesting.data.constant.HemoCubeCommands
|
||||||
import com.example.hpostesting.data.constant.LanguageManager
|
import com.example.hpostesting.data.constant.LanguageManager
|
||||||
import com.example.hpostesting.presentation.NatsManager
|
import com.example.hpostesting.presentation.NatsManager
|
||||||
|
import com.example.hpostesting.presentation.UsbServiceListener
|
||||||
import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel
|
import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel
|
||||||
|
import com.example.hpostesting.presentation.testRight.UsbService
|
||||||
import com.google.android.material.navigation.NavigationView
|
import com.google.android.material.navigation.NavigationView
|
||||||
import com.google.firebase.appdistribution.FirebaseAppDistribution
|
import com.google.firebase.appdistribution.FirebaseAppDistribution
|
||||||
import com.google.firebase.appdistribution.FirebaseAppDistributionException
|
import com.google.firebase.appdistribution.FirebaseAppDistributionException
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.example.hpostesting.presentation.dashboard
|
package com.example.hpostesting.presentation.dashboard
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.ContentValues.TAG
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Context.BATTERY_SERVICE
|
import android.content.Context.BATTERY_SERVICE
|
||||||
import android.content.DialogInterface
|
import android.content.DialogInterface
|
||||||
@@ -23,7 +22,6 @@ import com.example.hpostesting.data.Result
|
|||||||
import com.example.hpostesting.data.api.DeviceCommunicationHandler
|
import com.example.hpostesting.data.api.DeviceCommunicationHandler
|
||||||
import com.example.hpostesting.data.constant.Constants
|
import com.example.hpostesting.data.constant.Constants
|
||||||
import com.example.hpostesting.data.constant.HemoCubeCommands
|
import com.example.hpostesting.data.constant.HemoCubeCommands
|
||||||
import com.example.hpostesting.data.model.deviceprovision.ProvisionData
|
|
||||||
import com.example.hpostesting.data.model.login.LoginRequest
|
import com.example.hpostesting.data.model.login.LoginRequest
|
||||||
import com.example.hpostesting.data.model.login.LoginResponse
|
import com.example.hpostesting.data.model.login.LoginResponse
|
||||||
import com.example.hpostesting.data.model.molbioresult.MolbioV2Result
|
import com.example.hpostesting.data.model.molbioresult.MolbioV2Result
|
||||||
@@ -41,18 +39,14 @@ import com.example.hpostesting.presentation.assurance.AssuranceControlsActivity
|
|||||||
import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel
|
import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel
|
||||||
import com.example.hpostesting.presentation.testRight.TestRightViewModel
|
import com.example.hpostesting.presentation.testRight.TestRightViewModel
|
||||||
import com.firebase.ui.firestore.FirestoreRecyclerOptions
|
import com.firebase.ui.firestore.FirestoreRecyclerOptions
|
||||||
import com.google.common.reflect.TypeToken
|
|
||||||
import com.google.firebase.crashlytics.ktx.crashlytics
|
import com.google.firebase.crashlytics.ktx.crashlytics
|
||||||
import com.google.firebase.firestore.Query
|
import com.google.firebase.firestore.Query
|
||||||
import com.google.firebase.firestore.ktx.firestore
|
import com.google.firebase.firestore.ktx.firestore
|
||||||
import com.google.firebase.ktx.Firebase
|
import com.google.firebase.ktx.Firebase
|
||||||
import com.google.firebase.perf.ktx.performance
|
import com.google.firebase.perf.ktx.performance
|
||||||
import com.google.gson.Gson
|
|
||||||
import com.google.gson.JsonSyntaxException
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import `in`.sminnovations.hpostesting.R
|
import `in`.sminnovations.hpostesting.R
|
||||||
import `in`.sminnovations.hpostesting.databinding.FragmentHomeBinding
|
import `in`.sminnovations.hpostesting.databinding.FragmentHomeBinding
|
||||||
import org.json.JSONException
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.nio.charset.Charset
|
import java.nio.charset.Charset
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
@@ -73,8 +67,6 @@ class HomeFragment : Fragment() {
|
|||||||
private val homeViewModel: HemoCubeViewModel by activityViewModels()
|
private val homeViewModel: HemoCubeViewModel by activityViewModels()
|
||||||
|
|
||||||
private var isTokenAvailable = false
|
private var isTokenAvailable = false
|
||||||
private var username: String = ""
|
|
||||||
private var passworD: String = ""
|
|
||||||
private var natsToken: String = ""
|
private var natsToken: String = ""
|
||||||
private var deviceId: String = ""
|
private var deviceId: String = ""
|
||||||
|
|
||||||
@@ -105,7 +97,7 @@ class HomeFragment : Fragment() {
|
|||||||
binding.labelQuickCapture.visibility = View.VISIBLE
|
binding.labelQuickCapture.visibility = View.VISIBLE
|
||||||
binding.btnQuickCapture.visibility = View.VISIBLE
|
binding.btnQuickCapture.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
|
getDeviceId()
|
||||||
checkUnprocessedCSVData()
|
checkUnprocessedCSVData()
|
||||||
viewModel.allUserData.observe(viewLifecycleOwner) { userData ->
|
viewModel.allUserData.observe(viewLifecycleOwner) { userData ->
|
||||||
deleteIncompleteRegistrations(userData)
|
deleteIncompleteRegistrations(userData)
|
||||||
@@ -140,7 +132,6 @@ class HomeFragment : Fragment() {
|
|||||||
loadUserData()
|
loadUserData()
|
||||||
setSearch()
|
setSearch()
|
||||||
checkForLocalDBData()
|
checkForLocalDBData()
|
||||||
getDeviceId()
|
|
||||||
checkForTokenAndUpdate()
|
checkForTokenAndUpdate()
|
||||||
} else {
|
} else {
|
||||||
binding.internetAvailableCL.visibility = View.GONE
|
binding.internetAvailableCL.visibility = View.GONE
|
||||||
@@ -234,11 +225,21 @@ class HomeFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else if (deviceId.isNotEmpty()) {
|
}else if (deviceId.isNotEmpty()) {
|
||||||
fetchDeviceProvisionResponse()
|
fetchDeviceCredentials()
|
||||||
userID = username
|
// This code will execute after credentials have been successfully fetched and stored.
|
||||||
password = passworD
|
userID = sharedPreference.getString("username", "").toString()
|
||||||
hemoCubeViewModel.login(createLoginRequestData(userID, password))
|
password = sharedPreference.getString("password", "").toString()
|
||||||
} else {
|
accessToken = sharedPreference.getString(Constants.ACCESS_TOKEN, "").toString()
|
||||||
|
if (accessToken.isEmpty()) {
|
||||||
|
hemoCubeViewModel.login(createLoginRequestData(userID, password))
|
||||||
|
} else {
|
||||||
|
// Continue with your existing logic if the token is not empty.
|
||||||
|
isTokenAvailable = true
|
||||||
|
hemoCubeViewModel.deviceUpdate(createDeviceUpdateRequestData())
|
||||||
|
hemoCubeViewModel.uploadLogs()
|
||||||
|
hemoCubeViewModel.startPeriodicCheckUpdate()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
requireContext(),
|
requireContext(),
|
||||||
"Contact Help and get your device provision done",
|
"Contact Help and get your device provision done",
|
||||||
@@ -400,75 +401,45 @@ class HomeFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun fetchDeviceProvisionResponse() {
|
private fun fetchDeviceCredentials() {
|
||||||
val db = Firebase.firestore
|
try {
|
||||||
val deviceId = sharedPreference.getString(Constants.DEVICE_ID, "").toString()
|
val db = Firebase.firestore
|
||||||
val deviceRef = db.collection("devices").document(deviceId)
|
// Ensure deviceId is not null or empty
|
||||||
|
val deviceId = sharedPreference.getString(Constants.DEVICE_ID, "").takeIf { it!!.isNotBlank() }
|
||||||
|
?: throw IllegalStateException("Device ID is missing or blank.")
|
||||||
|
|
||||||
|
val deviceRef = db.collection("devices").whereEqualTo("deviceId", deviceId)
|
||||||
|
|
||||||
deviceRef.get()
|
deviceRef.get()
|
||||||
.addOnSuccessListener { document ->
|
.addOnSuccessListener { documentSnapshot ->
|
||||||
if (document.exists()) {
|
if (!documentSnapshot.isEmpty) {
|
||||||
val deviceData = document.toObject(DeviceData::class.java)
|
val deviceData = documentSnapshot.documents[0].toObject(DeviceData::class.java)
|
||||||
val deviceProvisionResponse = deviceData?.deviceProvisionResponse
|
deviceData?.let { data ->
|
||||||
|
val username = data.username
|
||||||
// Parse the deviceProvisionResponse to extract username, password, natsToken
|
val password = data.password
|
||||||
val provisionData = deviceProvisionResponse?.let {
|
// Log for debugging
|
||||||
parseDeviceProvisionResponse(
|
Log.d("fetchDeviceCredentials", "Username: $username, Password: $password")
|
||||||
it
|
// Save credentials in SharedPreferences
|
||||||
)
|
with(sharedPreference.edit()) {
|
||||||
|
putString("username", username)
|
||||||
|
putString("password", password)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
hemoCubeViewModel.login(createLoginRequestData(username, password))
|
||||||
|
} ?: Log.e("fetchDeviceCredentials", "Failed to parse device data.")
|
||||||
|
} else {
|
||||||
|
Log.e("fetchDeviceCredentials", "Document does not exist.")
|
||||||
}
|
}
|
||||||
provisionData?.let { data ->
|
|
||||||
// Assuming 'data' has the fields 'username', 'password', and 'natsToken'
|
|
||||||
username = data.username.toString()
|
|
||||||
passworD = data.password.toString()
|
|
||||||
natsToken = data.natsToken.toString()
|
|
||||||
|
|
||||||
// Assuming 'sharedPreference' is correctly initialized SharedPreferences instance
|
|
||||||
with(sharedPreference.edit()) {
|
|
||||||
putString(
|
|
||||||
"username",
|
|
||||||
username
|
|
||||||
) // Replace "username_key" with your actual key for username
|
|
||||||
putString(
|
|
||||||
"password",
|
|
||||||
passworD
|
|
||||||
) // Replace "password_key" with your actual key for password
|
|
||||||
putString(
|
|
||||||
"natsToken",
|
|
||||||
natsToken
|
|
||||||
) // Replace "natsToken_key" with your actual key for NATS token
|
|
||||||
apply() // Don't forget to call apply() to save the changes
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// Handle the case where the device document doesn't exist
|
|
||||||
}
|
}
|
||||||
}
|
.addOnFailureListener { exception ->
|
||||||
.addOnFailureListener { exception ->
|
Log.e("fetchDeviceCredentials", "Error fetching device data", exception)
|
||||||
// Handle any errors
|
}
|
||||||
Log.e(TAG, "Error fetching device data: $exception")
|
} catch (e: Exception) {
|
||||||
}
|
Log.e("fetchDeviceCredentials", "Error in fetchDeviceCredentials", e)
|
||||||
}
|
|
||||||
|
|
||||||
private fun parseDeviceProvisionResponse(responseString: String): ProvisionData? {
|
|
||||||
return try {
|
|
||||||
val jsonObject = JSONObject(responseString)
|
|
||||||
|
|
||||||
val credentials = jsonObject.getJSONObject("credentials")
|
|
||||||
val username = credentials.getString("username")
|
|
||||||
val password = credentials.getString("password")
|
|
||||||
|
|
||||||
val deviceUser = jsonObject.getJSONObject("device").getJSONObject("deviceUser")
|
|
||||||
val natsToken = deviceUser.getString("natsToken")
|
|
||||||
|
|
||||||
ProvisionData(username, password, natsToken)
|
|
||||||
} catch (e: JSONException) {
|
|
||||||
null
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun loadUserData() {
|
private fun loadUserData() {
|
||||||
try {
|
try {
|
||||||
val dateFormat = SimpleDateFormat("yyyy-MM-dd")
|
val dateFormat = SimpleDateFormat("yyyy-MM-dd")
|
||||||
|
|||||||
@@ -22,8 +22,11 @@ import androidx.activity.viewModels
|
|||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.view.get
|
import androidx.core.view.get
|
||||||
import com.example.hpostesting.data.DataHolder
|
import com.example.hpostesting.data.DataHolder
|
||||||
|
import com.example.hpostesting.data.api.DeviceCommunicationHandler
|
||||||
import com.example.hpostesting.data.constant.Constants
|
import com.example.hpostesting.data.constant.Constants
|
||||||
|
import com.example.hpostesting.data.constant.HemoCubeCommands
|
||||||
import com.example.hpostesting.data.constant.LanguageManager
|
import com.example.hpostesting.data.constant.LanguageManager
|
||||||
|
import com.example.hpostesting.presentation.UsbServiceListener
|
||||||
import com.example.hpostesting.presentation.testRight.UsbService
|
import com.example.hpostesting.presentation.testRight.UsbService
|
||||||
import com.hoho.android.usbserial.driver.UsbSerialDriver
|
import com.hoho.android.usbserial.driver.UsbSerialDriver
|
||||||
import com.hoho.android.usbserial.driver.UsbSerialProber
|
import com.hoho.android.usbserial.driver.UsbSerialProber
|
||||||
@@ -33,7 +36,7 @@ import `in`.sminnovations.hpostesting.databinding.ActivityDeviceBinding
|
|||||||
|
|
||||||
@Suppress("MemberVisibilityCanBePrivate")
|
@Suppress("MemberVisibilityCanBePrivate")
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class DeviceActivity : AppCompatActivity() {
|
class DeviceActivity : AppCompatActivity(), DeviceCommunicationHandler {
|
||||||
private lateinit var binding: ActivityDeviceBinding
|
private lateinit var binding: ActivityDeviceBinding
|
||||||
private val deviceViewModel by viewModels<DeviceViewModel>()
|
private val deviceViewModel by viewModels<DeviceViewModel>()
|
||||||
private var myMenu: Menu? = null
|
private var myMenu: Menu? = null
|
||||||
@@ -177,4 +180,8 @@ class DeviceActivity : AppCompatActivity() {
|
|||||||
deviceViewModel.isServiceConnected = false
|
deviceViewModel.isServiceConnected = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun sendAndListenToDevice(command: HemoCubeCommands, listener: UsbServiceListener) {
|
||||||
|
mService.sendAndListenToHemoCube(command = HemoCubeCommands.DEVICE_CONFIGURATION_COMMAND, listener)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user