diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8b755b0..c4d08b5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -118,11 +118,8 @@
android:noHistory="true"
android:theme="@style/AppTheme.NoActionBar">
-
-
-
-
-
+
+
= emptyList(),
@get:PropertyName("calibratedAt") @set:PropertyName("calibratedAt")
- var calibratedAt: String = ""
+ var calibratedAt: String = "" ,
+ @get:PropertyName("deviceProvisionResponse") @set:PropertyName("deviceProvisionResponse")
+ var deviceProvisionResponse: String = ""
+
)
\ No newline at end of file
diff --git a/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt b/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt
index bffe71e..0812cd6 100644
--- a/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt
+++ b/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt
@@ -203,6 +203,16 @@ class DatabaseRepository @Inject constructor(
return allDeviceDataList.find { it.deviceId == deviceId }
}
+
+ override suspend fun getDeviceResponse(data: DeviceData): Response? {
+ return try {
+ db.collection("devices").add(data!!).await()
+ Response.Success(data.deviceProvisionResponse)
+ } catch (e: Exception) {
+ Firebase.crashlytics.recordException(e)
+ Response.Error(e)
+ }
+ }
override fun addTestToDatabase(testDetails: UserData): Any {
TODO("Not yet implemented")
}
diff --git a/app/src/main/java/com/example/hpostesting/data/repository/Repository.kt b/app/src/main/java/com/example/hpostesting/data/repository/Repository.kt
index cd3e9b5..ecdad95 100644
--- a/app/src/main/java/com/example/hpostesting/data/repository/Repository.kt
+++ b/app/src/main/java/com/example/hpostesting/data/repository/Repository.kt
@@ -32,6 +32,7 @@ interface Repository {
suspend fun uploadFileToStorage(patientID: String, filePath: String): Response
suspend fun getDeviceDataById(deviceId: String): DeviceData?
+ suspend fun getDeviceResponse(data: DeviceData): Response?
abstract fun addTestToDatabase(testDetails: UserData): Any
// suspend fun addToDatabase(data: PatientDetails)
diff --git a/app/src/main/java/com/example/hpostesting/presentation/deviceinfo/DeviceViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/deviceinfo/DeviceViewModel.kt
index 4f43ca8..0d2e5d8 100644
--- a/app/src/main/java/com/example/hpostesting/presentation/deviceinfo/DeviceViewModel.kt
+++ b/app/src/main/java/com/example/hpostesting/presentation/deviceinfo/DeviceViewModel.kt
@@ -20,6 +20,7 @@ class DeviceViewModel @Inject constructor(
val deviceData = MutableLiveData()
// val networkStatusLiveData: LiveData
// get() = _networkStatusLiveData
- val fireBaseUpload = MutableLiveData()
+val fireBaseUpload = MutableLiveData()
+ val fireBaseBulkUpload = MutableLiveData()
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionFragment.kt
index 5ebc428..4a6b6ee 100644
--- a/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionFragment.kt
+++ b/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionFragment.kt
@@ -10,15 +10,24 @@ import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import com.example.hpostesting.data.DataHolder
import com.example.hpostesting.data.Result
import com.example.hpostesting.data.constant.Constants
import com.example.hpostesting.data.constant.HemoCubeCommands
import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionRequest
+import com.example.hpostesting.data.model.diagnostics.DiagnosticsData
+import com.example.hpostesting.data.model.patient.DeviceData
import com.example.hpostesting.presentation.UsbServiceListener
import com.example.hpostesting.presentation.dashboard.DashboardActivity
import com.google.firebase.crashlytics.ktx.crashlytics
import com.google.firebase.ktx.Firebase
+import `in`.sminnovations.hpostesting.R
import `in`.sminnovations.hpostesting.databinding.FragmentDeviceProvisionBinding
+import java.text.SimpleDateFormat
+import java.util.Calendar
+import java.util.Locale
class DeviceProvisionFragment : Fragment() {
@@ -26,6 +35,10 @@ class DeviceProvisionFragment : Fragment() {
private lateinit var binding: FragmentDeviceProvisionBinding
private val viewModel: DeviceProvisionViewModel by activityViewModels()
private lateinit var sharedPreferences: SharedPreferences
+ private lateinit var deviceProvisionResponse: String
+ private var currentDeviceData: DeviceData? = null
+ private var isOnline = false
+ val deviceData = MutableLiveData()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
@@ -53,65 +66,87 @@ class DeviceProvisionFragment : Fragment() {
)
)
}
- }
+
+
+
+
+ viewModel.deviceData.observe(viewLifecycleOwner) {
+ currentDeviceData = it
+ }
+
+ }
+
private fun observeViewModel() {
- viewModel.deviceProvisionResponse.observe(viewLifecycleOwner) { response ->
- when (response) {
- is Result.Success -> {
- if (response.data.result == "Success") {
- with(sharedPreferences.edit()) {
- putString(
- Constants.DEVICE_ID_API,
- response.data.data?.credentials?.username
- )
- putString(
- Constants.DEVICE_PASSWORD_API,
- response.data.data?.credentials?.password
- )
- putString(
- Constants.NATS_TOKEN,
- response.data.data?.device?.deviceUser?.natsToken
- )
- putString(
- Constants.NATS_TOKEN_EXPIRE_DATE,
- response.data.data?.device?.deviceUser?.natsTokenExpiry
- )
- apply()
+ viewModel.deviceProvisionResponse.observe(viewLifecycleOwner) { response ->
+ when (response) {
+ is Result.Success -> {
+ if (response.data.result == "Success") {
+ with(sharedPreferences.edit()) {
+ putString(
+ Constants.DEVICE_ID_API,
+ response.data.data?.credentials?.username
+ )
+ putString(
+ Constants.DEVICE_PASSWORD_API,
+ response.data.data?.credentials?.password
+ )
+ putString(
+ Constants.NATS_TOKEN,
+ response.data.data?.device?.deviceUser?.natsToken
+ )
+ putString(
+ Constants.NATS_TOKEN_EXPIRE_DATE,
+ response.data.data?.device?.deviceUser?.natsTokenExpiry
+ )
+ apply()
+ }
+ startActivity(
+ Intent(
+ requireContext(),
+ DashboardActivity::class.java
+ )
+ )
+ Toast.makeText(
+ activity, "Device registered successfully", Toast.LENGTH_LONG
+ ).show()
+
+ viewModel.addDeviceProvisionDataToDb(
+ DeviceData(
+ deviceProvisionResponse = response.toString()
+ )
+ )
+
+ } else {
+ Toast.makeText(
+ activity,
+ "An error in device provision: ${response.data.message}",
+ Toast.LENGTH_LONG
+ ).show()
+ binding.btnSubmit.visibility = View.VISIBLE
+ }
+
}
- startActivity(Intent(requireContext(), DashboardActivity::class.java))
- Toast.makeText(
- activity, "Device registered successfully", Toast.LENGTH_LONG
- ).show()
- } else {
- Toast.makeText(
- activity,
- "An error occurred in device provision: ${response.data.message}",
- Toast.LENGTH_LONG
- ).show()
- binding.btnSubmit.visibility = View.VISIBLE
- }
- }
+ is Result.Error -> {
+ response.exception.let { message ->
+ Toast.makeText(
+ activity,
+ "An error occurred in device provision: $message",
+ Toast.LENGTH_LONG
+ ).show()
+ }
+ }
- is Result.Error -> {
- response.exception.let { message ->
- Toast.makeText(
- activity,
- "An error occurred in device provision: $message",
- Toast.LENGTH_LONG
- ).show()
+ is Result.Loading -> {
+ binding.btnSubmit.visibility = View.GONE
+ }
+
+ else -> {}
}
}
- is Result.Loading -> {
- binding.btnSubmit.visibility = View.GONE
- }
-
- else -> {}
- }
- }
}
diff --git a/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionViewModel.kt
index b64a2a9..aa0be0c 100644
--- a/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionViewModel.kt
+++ b/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionViewModel.kt
@@ -1,11 +1,17 @@
package com.example.hpostesting.presentation.deviceprovision
+import android.content.Context
+import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import com.example.hpostesting.data.NetworkStatusLiveData
import com.example.hpostesting.data.Result
+import com.example.hpostesting.data.model.Response
import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionRequest
import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionResponse
+import com.example.hpostesting.data.model.diagnostics.DiagnosticsData
+import com.example.hpostesting.data.model.patient.DeviceData
import com.example.hpostesting.data.repository.Repository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
@@ -13,17 +19,45 @@ import javax.inject.Inject
@HiltViewModel
class DeviceProvisionViewModel @Inject constructor(
- private val databaseRepository: Repository
+ private val databaseRepository: Repository,
+ private val repository: Repository,
+ context: Context,
) : ViewModel() {
+ private val _networkStatusLiveData = NetworkStatusLiveData(context)
var isServiceConnected = false
-
+ val networkStatusLiveData: LiveData get() = _networkStatusLiveData
val deviceProvisionResponse = MutableLiveData>()
-
+ val fireBaseUpload = MutableLiveData()
+ val fireBaseBulkUpload = MutableLiveData()
+ val deviceData = MutableLiveData()
fun deviceProvision(deviceProvisionRequest: DeviceProvisionRequest) = viewModelScope.launch {
deviceProvisionResponse.postValue(Result.Loading())
databaseRepository.deviceProvision(deviceProvisionRequest).let {
deviceProvisionResponse.postValue(it)
}
}
+
+ fun addDeviceProvisionDataToDb(data: DeviceData) {
+ viewModelScope.launch {
+ try {
+ when (val response = repository.getDeviceResponse(data)) {
+ is Response.Success -> {
+// Log.i("Testdb", "Data uploaded to Firestore successfully")
+ fireBaseUpload.postValue("Success")
+ }
+
+ is Response.Error -> {
+// Log.e("Testdb", "Error uploading data to Firestore: $response")
+ fireBaseUpload.postValue("Error")
+ }
+
+ else -> {}
+ }
+ } catch (e: Exception) {
+// Log.e("Testdb", "Exception during data upload: ${e.message}")
+ fireBaseUpload.postValue("Error")
+ }
+ }
+ }
}
\ No newline at end of file