From 312e2da79a052f13cd40c53b47d0b67517f9bd18 Mon Sep 17 00:00:00 2001 From: sathwikcs <85106054+sathwikcs@users.noreply.github.com> Date: Tue, 28 Jan 2025 16:09:27 +0530 Subject: [PATCH] TrueHemeViewmodel to fit new network Checker --- .../trueheme/TrueHemeViewModel.kt | 128 ++++++++---------- 1 file changed, 57 insertions(+), 71 deletions(-) diff --git a/app/src/main/java/com/example/hpostesting/presentation/trueheme/TrueHemeViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/trueheme/TrueHemeViewModel.kt index 90e924e..ded64f7 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/trueheme/TrueHemeViewModel.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/trueheme/TrueHemeViewModel.kt @@ -25,11 +25,8 @@ import androidx.lifecycle.viewModelScope import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.PeriodicWorkRequestBuilder 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.DataHolder import com.example.hpostesting.data.dao.HemoCubeBufferDao import com.example.hpostesting.data.dao.HemoCubeDao 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.updates.CheckUpdateRequest 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.domain.CheckUpdateWorker 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 kotlinx.coroutines.launch import okhttp3.MediaType.Companion.toMediaTypeOrNull @@ -70,20 +69,22 @@ class TrueHemeViewModel @Inject constructor( private val repository: Repository, private val logFileManager: LogFileManager, private val localFileDataSource: LocalFileDataSource, + networkMonitor: NetworkMonitor, context: Context, ) : ViewModel() { var isServiceConnected = false val progressBar = MutableLiveData(false) private val testDetails = DataHolder.selectedTest?.toHemoCubeTestData() val messages = MutableLiveData() - private val sharedPreference = - context.getSharedPreferences("HEMOCUBE", Context.MODE_PRIVATE) + private val sharedPreference = context.getSharedPreferences("HEMOCUBE", Context.MODE_PRIVATE) private val workManager = WorkManager.getInstance(context) - -// init { -// startPeriodicCheckUpdate() -// } + // init { + // startPeriodicCheckUpdate() + // } + init { + networkMonitor.startMonitoring() + } val loginResponse = MutableLiveData>() @@ -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) - private val _networkStatusLiveData = NetworkStatusLiveData(context) + private val _networkStatusLiveData = networkMonitor.isConnected val allUserData = hemoCubeDao.getAll() val allKitTestData = hemoCubeBufferDao.getAll() val deviceData = MutableLiveData() @@ -181,7 +182,7 @@ class TrueHemeViewModel @Inject constructor( val logFile = logFileManager.createLogFile().let { file -> val requestBody = file?.asRequestBody("multipart/form-data".toMediaTypeOrNull()) val multipartFile = - requestBody?.let { MultipartBody.Part.createFormData("logFile", file?.name, it) } + requestBody?.let { MultipartBody.Part.createFormData("logFile", file.name, it) } multipartFile?.let { partFile -> repository.uploadLogs(partFile).let { result -> uploadLogs.postValue(result) @@ -193,37 +194,35 @@ class TrueHemeViewModel @Inject constructor( fun uploadHemoCubeResultToDatabaseForBufferCheck( isOnline: Boolean, bufferCheckData: BufferCheckData, - ) = - viewModelScope.launch { - if (isOnline) { - try { - when (val response = - repository.addTestToDatabaseforBufferCheck(bufferCheckData)) { - is Response.Success -> { - Log.i("Testdb", "Data uploaded to Firestore successfully") - fireBaseUpload.postValue("Success") - 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 -> {} + ) = viewModelScope.launch { + if (isOnline) { + try { + when (val response = repository.addTestToDatabaseforBufferCheck(bufferCheckData)) { + is Response.Success -> { + Log.i("Testdb", "Data uploaded to Firestore successfully") + fireBaseUpload.postValue("Success") + bufferCheckData.localFlag = true + hemoCubeBufferDao.insertAll(bufferCheckData) } - } catch (e: Exception) { - Log.e("Testdb", "Exception during data upload: ${e.message}") - fireBaseUpload.postValue("Error") + + is Response.Error -> { + Log.e("Testdb", "Error uploading data to Firestore: $response") + fireBaseUpload.postValue("Error") + bufferCheckData.localFlag = true + hemoCubeBufferDao.insertAll(bufferCheckData) + } + + else -> {} } - } else { - hemoCubeBufferDao.insertAll(bufferCheckData) - fireBaseUpload.postValue("Local") + } catch (e: Exception) { + Log.e("Testdb", "Exception during data upload: ${e.message}") + fireBaseUpload.postValue("Error") } + } else { + hemoCubeBufferDao.insertAll(bufferCheckData) + fireBaseUpload.postValue("Local") } + } fun bulkAddResultKitTestToDb(bufferCheckData: BufferCheckData) { viewModelScope.launch { @@ -396,8 +395,7 @@ class TrueHemeViewModel @Inject constructor( viewModelScope.launch { try { - when (val response = - repository.addTestToDatabaseforBufferCheck(bufferCheckData)) { + when (val response = repository.addTestToDatabaseforBufferCheck(bufferCheckData)) { is Response.Success -> { Log.i("Testdb", "Data uploaded to Firestore successfully") fireBaseUpload.postValue("Success") @@ -415,10 +413,9 @@ class TrueHemeViewModel @Inject constructor( } } - private fun updateBufferLocalFlag(bufferId: String) = - viewModelScope.launch { - hemoCubeBufferDao.updateFieldById(id = bufferId, true) - } + private fun updateBufferLocalFlag(bufferId: String) = viewModelScope.launch { + hemoCubeBufferDao.updateFieldById(id = bufferId, true) + } fun getLocalUserDataForCsv(context: Context): Boolean { val localUserDataLiveData: LiveData> = hemoCubeDao.getAll() @@ -455,16 +452,12 @@ class TrueHemeViewModel @Inject constructor( fun getBatteryLevel(): Float? { val batteryPct: Float? = batteryStatus?.let { intent -> - val level: Int = - intent.getIntExtra( - BatteryManager.EXTRA_LEVEL, - -1 - ) - val scale: Int = - intent.getIntExtra( - BatteryManager.EXTRA_SCALE, - -1 - ) + val level: Int = intent.getIntExtra( + BatteryManager.EXTRA_LEVEL, -1 + ) + val scale: Int = intent.getIntExtra( + BatteryManager.EXTRA_SCALE, -1 + ) level * 100 / scale.toFloat() } @@ -474,8 +467,7 @@ class TrueHemeViewModel @Inject constructor( fun getBatteryTemperature(): Float? { val batteryTemp: Float? = batteryStatus?.let { intent -> val temperature = intent.getIntExtra( - BatteryManager.EXTRA_TEMPERATURE, - 0 + BatteryManager.EXTRA_TEMPERATURE, 0 ) temperature.toFloat() / 10 } @@ -484,14 +476,11 @@ class TrueHemeViewModel @Inject constructor( } fun getBatteryVoltage(context: Context): Float { - val batteryIntent = - context.registerReceiver( - null, - IntentFilter(Intent.ACTION_BATTERY_CHANGED) - ) + val batteryIntent = context.registerReceiver( + null, IntentFilter(Intent.ACTION_BATTERY_CHANGED) + ) val voltage = batteryIntent?.getIntExtra( - BatteryManager.EXTRA_VOLTAGE, - 0 + BatteryManager.EXTRA_VOLTAGE, 0 ) ?: 0 // milli-volts to volts @@ -500,8 +489,7 @@ class TrueHemeViewModel @Inject constructor( fun getBatteryCapacity(context: Context): Int { - val batteryManager = - context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager + val batteryManager = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager val currentCapacity = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER) @@ -510,8 +498,7 @@ class TrueHemeViewModel @Inject constructor( fun getBatteryMaxCapacity(context: Context): Float { val batteryManager = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager - val designCapacity = - batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) + val designCapacity = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY) val currentCapacity = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER) @@ -528,8 +515,7 @@ class TrueHemeViewModel @Inject constructor( hemoCubeTestData.forEach { data -> data.localFlag = true hemoCubeDao.updateCSVFieldById( - data._id, - true + data._id, true ) } }