diff --git a/app/src/main/java/com/example/hpostesting/data/model/deviceprovision/ProvisionData.kt b/app/src/main/java/com/example/hpostesting/data/model/deviceprovision/ProvisionData.kt new file mode 100644 index 0000000..179ea33 --- /dev/null +++ b/app/src/main/java/com/example/hpostesting/data/model/deviceprovision/ProvisionData.kt @@ -0,0 +1,8 @@ +package com.example.hpostesting.data.model.deviceprovision + +data class ProvisionData( +val username: String?, +val password: String?, +val natsToken: String? +) + diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt index 97d6094..b994f75 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt @@ -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() {}.type + gson.fromJson(responseString, type) + } catch (e: JsonSyntaxException) { + null + } + } + + + private fun loadUserData() { try { val dateFormat = SimpleDateFormat("yyyy-MM-dd")