Added code for fetching response of device provision api from firebase

This commit is contained in:
Mariya
2024-02-08 14:24:34 +05:30
parent 6ddb491bc8
commit c5cb8a0983
2 changed files with 82 additions and 2 deletions

View File

@@ -0,0 +1,8 @@
package com.example.hpostesting.data.model.deviceprovision
data class ProvisionData(
val username: String?,
val password: String?,
val natsToken: String?
)

View File

@@ -1,6 +1,7 @@
package com.example.hpostesting.presentation.dashboard
import android.app.AlertDialog
import android.content.ContentValues.TAG
import android.content.Context
import android.content.Context.BATTERY_SERVICE
import android.content.DialogInterface
@@ -20,10 +21,12 @@ import androidx.navigation.fragment.findNavController
import com.example.hpostesting.data.DataHolder
import com.example.hpostesting.data.Result
import com.example.hpostesting.data.constant.Constants
import com.example.hpostesting.data.model.deviceprovision.ProvisionData
import com.example.hpostesting.data.model.login.LoginRequest
import com.example.hpostesting.data.model.login.LoginResponse
import com.example.hpostesting.data.model.molbioresult.MolbioV2Result
import com.example.hpostesting.data.model.molbioresult.MolbioV2ResultRequest
import com.example.hpostesting.data.model.patient.DeviceData
import com.example.hpostesting.data.model.patient.HemoCubeTestData
import com.example.hpostesting.data.model.patient.UserData
import com.example.hpostesting.data.model.updates.CheckUpdateRequest
@@ -35,11 +38,14 @@ import com.example.hpostesting.presentation.assurance.AssuranceControlsActivity
import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel
import com.example.hpostesting.presentation.testRight.TestRightViewModel
import com.firebase.ui.firestore.FirestoreRecyclerOptions
import com.google.common.reflect.TypeToken
import com.google.firebase.crashlytics.ktx.crashlytics
import com.google.firebase.firestore.Query
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase
import com.google.firebase.perf.ktx.performance
import com.google.gson.Gson
import com.google.gson.JsonSyntaxException
import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hpostesting.R
import `in`.sminnovations.hpostesting.databinding.FragmentHomeBinding
@@ -62,6 +68,10 @@ class HomeFragment : Fragment() {
private val homeViewModel: HemoCubeViewModel by activityViewModels()
private var isTokenAvailable = false
private var username:String =""
private var passworD:String =""
private var natsToken:String =""
private lateinit var sharedPreference: SharedPreferences
override fun onCreateView(
@@ -186,12 +196,16 @@ class HomeFragment : Fragment() {
binding.downloadCSV.setOnClickListener {
showDownloadDialog(requireContext())
}
}
private fun checkForTokenAndUpdate() {
val accessToken = sharedPreference.getString(Constants.ACCESS_TOKEN, "").toString()
val password = sharedPreference.getString(Constants.DEVICE_PASSWORD_API, "").toString()
val userID = sharedPreference.getString(Constants.DEVICE_ID_API, "").toString()
var userID = sharedPreference.getString(Constants.DEVICE_ID_API, "").toString()
fetchDeviceProvisionResponse(deviceId = Constants.DEVICE_ID)
val devuserid = username
val devpassword = passworD
if (userID.isNotEmpty() && password.isNotEmpty()) {
if (accessToken.isEmpty()) {
hemoCubeViewModel.login(createLoginRequestData(userID, password))
@@ -205,7 +219,21 @@ class HomeFragment : Fragment() {
hemoCubeViewModel.startPeriodicCheckUpdate()
}
}
} else {
} else if(devuserid.isNotEmpty() && devpassword.isNotEmpty()){
hemoCubeViewModel.login(createLoginRequestData(devuserid, devpassword))
if (accessToken.isEmpty()) {
hemoCubeViewModel.login(createLoginRequestData(devuserid, devpassword))
} else {
if (isTokenExpired(accessToken)) {
hemoCubeViewModel.login(createLoginRequestData(devuserid, devpassword))
} else {
isTokenAvailable = true
hemoCubeViewModel.deviceUpdate(createDeviceUpdateRequestData())
hemoCubeViewModel.uploadLogs()
hemoCubeViewModel.startPeriodicCheckUpdate()
}
}
}else{
Toast.makeText(
requireContext(),
"Contact Help and get your device provision done",
@@ -366,6 +394,50 @@ class HomeFragment : Fragment() {
}
}
private fun fetchDeviceProvisionResponse(deviceId: String) {
val db = Firebase.firestore
val deviceRef = db.collection("devices").document(deviceId)
deviceRef.get()
.addOnSuccessListener { document ->
if (document.exists()) {
val deviceData = document.toObject(DeviceData::class.java)
val deviceProvisionResponse = deviceData?.deviceProvisionResponse
// Parse the deviceProvisionResponse to extract username, password, natsToken
val provisionData = deviceProvisionResponse?.let {
parseDeviceProvisionResponse(
it
)
}
provisionData?.let { data ->
username = data.username.toString()
passworD = data.password.toString()
natsToken = data.natsToken.toString()
}
} else {
// Handle the case where the device document doesn't exist
}
}
.addOnFailureListener { exception ->
// Handle any errors
Log.e(TAG, "Error fetching device data: $exception")
}
}
fun parseDeviceProvisionResponse(responseString: String): ProvisionData? {
return try {
val gson = Gson()
val type = object : TypeToken<ProvisionData>() {}.type
gson.fromJson(responseString, type)
} catch (e: JsonSyntaxException) {
null
}
}
private fun loadUserData() {
try {
val dateFormat = SimpleDateFormat("yyyy-MM-dd")