From c5c0467e421cf098891d440ce1174a6f4ad47f2d Mon Sep 17 00:00:00 2001 From: Mariya Date: Thu, 8 Feb 2024 11:48:35 +0530 Subject: [PATCH] code added to store device provision response --- app/src/main/AndroidManifest.xml | 7 +- .../data/model/patient/DeviceData.kt | 6 +- .../data/repository/DatabaseRepository.kt | 10 ++ .../hpostesting/data/repository/Repository.kt | 1 + .../deviceinfo/DeviceViewModel.kt | 3 +- .../DeviceProvisionFragment.kt | 135 +++++++++++------- .../DeviceProvisionViewModel.kt | 40 +++++- 7 files changed, 142 insertions(+), 60 deletions(-) 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