TrueHemeViewmodel to fit new network Checker

This commit is contained in:
sathwikcs
2025-01-28 16:09:27 +05:30
parent 9768a0a835
commit 312e2da79a

View File

@@ -25,11 +25,8 @@ import androidx.lifecycle.viewModelScope
import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.PeriodicWorkRequestBuilder import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager import androidx.work.WorkManager
import com.example.hpostesting.util.CsvWriter
import com.example.hpostesting.data.constant.DataHolder
import com.example.hpostesting.util.NetworkStatusLiveData
import com.example.hpostesting.util.Result
import com.example.hpostesting.data.constant.Constants import com.example.hpostesting.data.constant.Constants
import com.example.hpostesting.data.constant.DataHolder
import com.example.hpostesting.data.dao.HemoCubeBufferDao import com.example.hpostesting.data.dao.HemoCubeBufferDao
import com.example.hpostesting.data.dao.HemoCubeDao import com.example.hpostesting.data.dao.HemoCubeDao
import com.example.hpostesting.data.datasource.LocalFileDataSource import com.example.hpostesting.data.datasource.LocalFileDataSource
@@ -46,10 +43,12 @@ import com.example.hpostesting.data.model.patient.HemoCubeTestData
import com.example.hpostesting.data.model.patient.toHemoCubeTestData import com.example.hpostesting.data.model.patient.toHemoCubeTestData
import com.example.hpostesting.data.model.updates.CheckUpdateRequest import com.example.hpostesting.data.model.updates.CheckUpdateRequest
import com.example.hpostesting.data.model.updates.CheckUpdateResponse import com.example.hpostesting.data.model.updates.CheckUpdateResponse
import com.example.hpostesting.data.model.updates.DeviceUpdateRequest
import com.example.hpostesting.data.repository.Repository import com.example.hpostesting.data.repository.Repository
import com.example.hpostesting.domain.CheckUpdateWorker import com.example.hpostesting.domain.CheckUpdateWorker
import com.example.hpostesting.domain.LogFileManager import com.example.hpostesting.domain.LogFileManager
import com.example.hpostesting.util.CsvWriter
import com.example.hpostesting.util.NetworkMonitor
import com.example.hpostesting.util.Result
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MediaType.Companion.toMediaTypeOrNull
@@ -70,20 +69,22 @@ class TrueHemeViewModel @Inject constructor(
private val repository: Repository, private val repository: Repository,
private val logFileManager: LogFileManager, private val logFileManager: LogFileManager,
private val localFileDataSource: LocalFileDataSource, private val localFileDataSource: LocalFileDataSource,
networkMonitor: NetworkMonitor,
context: Context, context: Context,
) : ViewModel() { ) : ViewModel() {
var isServiceConnected = false var isServiceConnected = false
val progressBar = MutableLiveData(false) val progressBar = MutableLiveData(false)
private val testDetails = DataHolder.selectedTest?.toHemoCubeTestData() private val testDetails = DataHolder.selectedTest?.toHemoCubeTestData()
val messages = MutableLiveData<String>() val messages = MutableLiveData<String>()
private val sharedPreference = private val sharedPreference = context.getSharedPreferences("HEMOCUBE", Context.MODE_PRIVATE)
context.getSharedPreferences("HEMOCUBE", Context.MODE_PRIVATE)
private val workManager = WorkManager.getInstance(context) private val workManager = WorkManager.getInstance(context)
// init {
// init { // startPeriodicCheckUpdate()
// startPeriodicCheckUpdate() // }
// } init {
networkMonitor.startMonitoring()
}
val loginResponse = MutableLiveData<Result<LoginResponse>>() val loginResponse = MutableLiveData<Result<LoginResponse>>()
@@ -97,7 +98,7 @@ class TrueHemeViewModel @Inject constructor(
// Get the device ID of the device you want to retrieve data for (e.g., the first device in the list) // Get the device ID of the device you want to retrieve data for (e.g., the first device in the list)
private val _networkStatusLiveData = NetworkStatusLiveData(context) private val _networkStatusLiveData = networkMonitor.isConnected
val allUserData = hemoCubeDao.getAll() val allUserData = hemoCubeDao.getAll()
val allKitTestData = hemoCubeBufferDao.getAll() val allKitTestData = hemoCubeBufferDao.getAll()
val deviceData = MutableLiveData<DeviceData?>() val deviceData = MutableLiveData<DeviceData?>()
@@ -181,7 +182,7 @@ class TrueHemeViewModel @Inject constructor(
val logFile = logFileManager.createLogFile().let { file -> val logFile = logFileManager.createLogFile().let { file ->
val requestBody = file?.asRequestBody("multipart/form-data".toMediaTypeOrNull()) val requestBody = file?.asRequestBody("multipart/form-data".toMediaTypeOrNull())
val multipartFile = val multipartFile =
requestBody?.let { MultipartBody.Part.createFormData("logFile", file?.name, it) } requestBody?.let { MultipartBody.Part.createFormData("logFile", file.name, it) }
multipartFile?.let { partFile -> multipartFile?.let { partFile ->
repository.uploadLogs(partFile).let { result -> repository.uploadLogs(partFile).let { result ->
uploadLogs.postValue(result) uploadLogs.postValue(result)
@@ -193,37 +194,35 @@ class TrueHemeViewModel @Inject constructor(
fun uploadHemoCubeResultToDatabaseForBufferCheck( fun uploadHemoCubeResultToDatabaseForBufferCheck(
isOnline: Boolean, isOnline: Boolean,
bufferCheckData: BufferCheckData, bufferCheckData: BufferCheckData,
) = ) = viewModelScope.launch {
viewModelScope.launch { if (isOnline) {
if (isOnline) { try {
try { when (val response = repository.addTestToDatabaseforBufferCheck(bufferCheckData)) {
when (val response = is Response.Success -> {
repository.addTestToDatabaseforBufferCheck(bufferCheckData)) { Log.i("Testdb", "Data uploaded to Firestore successfully")
is Response.Success -> { fireBaseUpload.postValue("Success")
Log.i("Testdb", "Data uploaded to Firestore successfully") bufferCheckData.localFlag = true
fireBaseUpload.postValue("Success") hemoCubeBufferDao.insertAll(bufferCheckData)
bufferCheckData.localFlag = true
hemoCubeBufferDao.insertAll(bufferCheckData)
}
is Response.Error -> {
Log.e("Testdb", "Error uploading data to Firestore: $response")
fireBaseUpload.postValue("Error")
bufferCheckData.localFlag = true
hemoCubeBufferDao.insertAll(bufferCheckData)
}
else -> {}
} }
} catch (e: Exception) {
Log.e("Testdb", "Exception during data upload: ${e.message}") is Response.Error -> {
fireBaseUpload.postValue("Error") Log.e("Testdb", "Error uploading data to Firestore: $response")
fireBaseUpload.postValue("Error")
bufferCheckData.localFlag = true
hemoCubeBufferDao.insertAll(bufferCheckData)
}
else -> {}
} }
} else { } catch (e: Exception) {
hemoCubeBufferDao.insertAll(bufferCheckData) Log.e("Testdb", "Exception during data upload: ${e.message}")
fireBaseUpload.postValue("Local") fireBaseUpload.postValue("Error")
} }
} else {
hemoCubeBufferDao.insertAll(bufferCheckData)
fireBaseUpload.postValue("Local")
} }
}
fun bulkAddResultKitTestToDb(bufferCheckData: BufferCheckData) { fun bulkAddResultKitTestToDb(bufferCheckData: BufferCheckData) {
viewModelScope.launch { viewModelScope.launch {
@@ -396,8 +395,7 @@ class TrueHemeViewModel @Inject constructor(
viewModelScope.launch { viewModelScope.launch {
try { try {
when (val response = when (val response = repository.addTestToDatabaseforBufferCheck(bufferCheckData)) {
repository.addTestToDatabaseforBufferCheck(bufferCheckData)) {
is Response.Success -> { is Response.Success -> {
Log.i("Testdb", "Data uploaded to Firestore successfully") Log.i("Testdb", "Data uploaded to Firestore successfully")
fireBaseUpload.postValue("Success") fireBaseUpload.postValue("Success")
@@ -415,10 +413,9 @@ class TrueHemeViewModel @Inject constructor(
} }
} }
private fun updateBufferLocalFlag(bufferId: String) = private fun updateBufferLocalFlag(bufferId: String) = viewModelScope.launch {
viewModelScope.launch { hemoCubeBufferDao.updateFieldById(id = bufferId, true)
hemoCubeBufferDao.updateFieldById(id = bufferId, true) }
}
fun getLocalUserDataForCsv(context: Context): Boolean { fun getLocalUserDataForCsv(context: Context): Boolean {
val localUserDataLiveData: LiveData<List<HemoCubeTestData>> = hemoCubeDao.getAll() val localUserDataLiveData: LiveData<List<HemoCubeTestData>> = hemoCubeDao.getAll()
@@ -455,16 +452,12 @@ class TrueHemeViewModel @Inject constructor(
fun getBatteryLevel(): Float? { fun getBatteryLevel(): Float? {
val batteryPct: Float? = batteryStatus?.let { intent -> val batteryPct: Float? = batteryStatus?.let { intent ->
val level: Int = val level: Int = intent.getIntExtra(
intent.getIntExtra( BatteryManager.EXTRA_LEVEL, -1
BatteryManager.EXTRA_LEVEL, )
-1 val scale: Int = intent.getIntExtra(
) BatteryManager.EXTRA_SCALE, -1
val scale: Int = )
intent.getIntExtra(
BatteryManager.EXTRA_SCALE,
-1
)
level * 100 / scale.toFloat() level * 100 / scale.toFloat()
} }
@@ -474,8 +467,7 @@ class TrueHemeViewModel @Inject constructor(
fun getBatteryTemperature(): Float? { fun getBatteryTemperature(): Float? {
val batteryTemp: Float? = batteryStatus?.let { intent -> val batteryTemp: Float? = batteryStatus?.let { intent ->
val temperature = intent.getIntExtra( val temperature = intent.getIntExtra(
BatteryManager.EXTRA_TEMPERATURE, BatteryManager.EXTRA_TEMPERATURE, 0
0
) )
temperature.toFloat() / 10 temperature.toFloat() / 10
} }
@@ -484,14 +476,11 @@ class TrueHemeViewModel @Inject constructor(
} }
fun getBatteryVoltage(context: Context): Float { fun getBatteryVoltage(context: Context): Float {
val batteryIntent = val batteryIntent = context.registerReceiver(
context.registerReceiver( null, IntentFilter(Intent.ACTION_BATTERY_CHANGED)
null, )
IntentFilter(Intent.ACTION_BATTERY_CHANGED)
)
val voltage = batteryIntent?.getIntExtra( val voltage = batteryIntent?.getIntExtra(
BatteryManager.EXTRA_VOLTAGE, BatteryManager.EXTRA_VOLTAGE, 0
0
) ?: 0 ) ?: 0
// milli-volts to volts // milli-volts to volts
@@ -500,8 +489,7 @@ class TrueHemeViewModel @Inject constructor(
fun getBatteryCapacity(context: Context): Int { fun getBatteryCapacity(context: Context): Int {
val batteryManager = val batteryManager = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
val currentCapacity = val currentCapacity =
batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER) batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)
@@ -510,8 +498,7 @@ class TrueHemeViewModel @Inject constructor(
fun getBatteryMaxCapacity(context: Context): Float { fun getBatteryMaxCapacity(context: Context): Float {
val batteryManager = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager val batteryManager = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
val designCapacity = val designCapacity = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
val currentCapacity = val currentCapacity =
batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER) batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)
@@ -528,8 +515,7 @@ class TrueHemeViewModel @Inject constructor(
hemoCubeTestData.forEach { data -> hemoCubeTestData.forEach { data ->
data.localFlag = true data.localFlag = true
hemoCubeDao.updateCSVFieldById( hemoCubeDao.updateCSVFieldById(
data._id, data._id, true
true
) )
} }
} }