Added code for Device Diagnostics
This commit is contained in:
@@ -36,4 +36,10 @@ interface MolbioResultApi {
|
||||
suspend fun uploadLogs(
|
||||
@Part logFile: MultipartBody.Part
|
||||
): UploadLogsResponse
|
||||
|
||||
|
||||
@POST("deviceService/device/uploadDeviceDiagnostics")
|
||||
suspend fun deviceDiagnostics(
|
||||
@Body deviceDiagnosticsRequest: DeviceDiagnosticsRequest
|
||||
): DeviceDiagnosticsResponse
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.example.hpostesting.data.model.devicediagnostics
|
||||
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
data class AdditionalDetails(
|
||||
@SerializedName("Data")
|
||||
val data: DeviceDiagnosticsData?,
|
||||
@SerializedName("Message")
|
||||
val message: String? = "",
|
||||
@SerializedName("Result")
|
||||
val result: String? = ""
|
||||
)
|
||||
data class DeviceDiagnosticsRequest(
|
||||
@SerializedName("additionalDetails") val additionalDetails: AdditionalDetails1
|
||||
)
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.example.hpostesting.data.model.devicediagnostics
|
||||
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
data class DeviceDiagnosticsResponse(
|
||||
@SerializedName("Data")
|
||||
val data: DeviceDiagnosticsData?,
|
||||
@SerializedName("Message")
|
||||
val message: String? = "",
|
||||
@SerializedName("Result")
|
||||
val result: String? = ""
|
||||
)
|
||||
@@ -77,6 +77,10 @@ class DatabaseRepository @Inject constructor(
|
||||
return safeApiCall { molbioResultApi.deviceUpdate(deviceUpdateRequest) }
|
||||
}
|
||||
|
||||
override suspend fun deviceDiagnostics(deviceDiagnosticsRequest: DeviceDiagnosticsRequest): Result<DeviceDiagnosticsResponse> {
|
||||
return safeApiCall { molbioAuthApi.deviceDiagnostics(deviceDiagnosticsRequest) }
|
||||
}
|
||||
|
||||
override suspend fun uploadLogs(logFile: MultipartBody.Part): Result<UploadLogsResponse> {
|
||||
return safeApiCall { molbioResultApi.uploadLogs(logFile) }
|
||||
}
|
||||
|
||||
@@ -44,6 +44,6 @@ interface Repository {
|
||||
suspend fun checkUpdate(checkUpdateRequest: CheckUpdateRequest): Result<CheckUpdateResponse>
|
||||
|
||||
suspend fun deviceUpdate(deviceUpdateRequest: DeviceUpdateRequest): Result<ResponseBody>
|
||||
|
||||
suspend fun deviceDiagnostics(deviceDiagnosticsRequest: DeviceDiagnosticsRequest): Result<DeviceDiagnosticsResponse>
|
||||
suspend fun uploadLogs(logFile: MultipartBody.Part): Result<UploadLogsResponse>
|
||||
}
|
||||
@@ -13,6 +13,8 @@ import androidx.fragment.app.activityViewModels
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.example.hpostesting.data.constant.Constants
|
||||
import com.example.hpostesting.data.constant.HemoCubeCommands
|
||||
import com.example.hpostesting.data.model.devicediagnostics.AdditionalDetails1
|
||||
import com.example.hpostesting.data.model.devicediagnostics.DeviceDiagnosticsRequest
|
||||
import com.example.hpostesting.data.model.diagnostics.DiagnosticsData
|
||||
import com.example.hpostesting.data.model.patient.DeviceData
|
||||
import com.example.hpostesting.presentation.UsbServiceListener
|
||||
@@ -56,6 +58,22 @@ class DiagnosticsFragment : Fragment() {
|
||||
binding.btnSubmit.setOnClickListener {
|
||||
binding.btnSubmit.visibility = View.GONE
|
||||
runDeviceDiagnostics()
|
||||
val batteryLevel = diagnosticsViewModel.getBatteryLevel().toString()
|
||||
val batteryCapacity = context?.let { diagnosticsViewModel.getBatteryCapacity(it).toString() }
|
||||
val batteryMaxCapacity = context?.let { diagnosticsViewModel.getBatteryMaxCapacity(it).toString() }
|
||||
val batteryTemperature = diagnosticsViewModel.getBatteryTemperature().toString()
|
||||
val batteryVoltage = context?.let { diagnosticsViewModel.getBatteryVoltage(it).toString() }
|
||||
|
||||
val additionalDetails = AdditionalDetails1(
|
||||
batteryLevel = batteryLevel,
|
||||
batteryCapacity = batteryCapacity!!,
|
||||
batteryMaxCapacity = batteryMaxCapacity!!,
|
||||
batteryTemperature = batteryTemperature,
|
||||
batteryVoltage = batteryVoltage!!
|
||||
)
|
||||
diagnosticsViewModel.deviceDiagnostics(
|
||||
DeviceDiagnosticsRequest(additionalDetails = additionalDetails)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,9 +98,49 @@ class DiagnosticsFragment : Fragment() {
|
||||
}
|
||||
|
||||
binding.progressBar.visibility = View.GONE
|
||||
|
||||
}
|
||||
|
||||
diagnosticsViewModel.deviceDiagnosticsResponse.observe(viewLifecycleOwner) { response ->
|
||||
when (response) {
|
||||
is Result.Success-> {
|
||||
|
||||
val result = response.data?.result
|
||||
if (result == "Success") {
|
||||
Toast.makeText(
|
||||
activity, response.data?.message ?: "Device diagnostics uploaded successfully", Toast.LENGTH_LONG
|
||||
).show()
|
||||
|
||||
response.data?.data?.let { diagnosticsData ->
|
||||
|
||||
val batteryLevel = diagnosticsData.additionalDetails.batteryLevel
|
||||
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(
|
||||
activity,
|
||||
"Received success response but the result is not successful: ${response.data?.message}",
|
||||
Toast.LENGTH_LONG
|
||||
).show()
|
||||
}
|
||||
}
|
||||
is Result.Error -> {
|
||||
// Handle the error scenario
|
||||
Toast.makeText(
|
||||
activity,
|
||||
"An error occurred: ${response.exception.message}",
|
||||
Toast.LENGTH_LONG
|
||||
).show()
|
||||
}
|
||||
is Result.Loading -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private fun getDeviceId() {
|
||||
diagnosticsViewModel.progressBar.postValue(true)
|
||||
(activity as DiagnosticsActivity).mService.sendAndListenToHemoCube(
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package com.example.hpostesting.presentation.diagnostics
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.os.BatteryManager
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
@@ -12,7 +16,8 @@ import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
@HiltViewModel
|
||||
class DiagnosticsViewModel @Inject constructor(
|
||||
private val repository: Repository
|
||||
private val repository: Repository,
|
||||
context: Context,
|
||||
) : ViewModel() {
|
||||
var isServiceConnected = false
|
||||
val progressBar = MutableLiveData(false)
|
||||
@@ -20,6 +25,11 @@ class DiagnosticsViewModel @Inject constructor(
|
||||
|
||||
val deviceData = MutableLiveData<DeviceData?>()
|
||||
val fireBaseUpload = MutableLiveData<String>()
|
||||
val deviceDiagnosticsResponse = MutableLiveData<Result<DeviceDiagnosticsResponse>>()
|
||||
private val batteryStatus: Intent? =
|
||||
IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
|
||||
context.registerReceiver(null, ifilter)
|
||||
}
|
||||
|
||||
fun addDiagnosticsDataToDb(data: DiagnosticsData) {
|
||||
viewModelScope.launch {
|
||||
@@ -43,4 +53,83 @@ class DiagnosticsViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
fun deviceDiagnostics(deviceDiagnosticsRequest: DeviceDiagnosticsRequest) = viewModelScope.launch {
|
||||
deviceDiagnosticsResponse.postValue(Result.Loading())
|
||||
repository.deviceDiagnostics(deviceDiagnosticsRequest).let {
|
||||
deviceDiagnosticsResponse.postValue(it)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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
|
||||
)
|
||||
level * 100 / scale.toFloat()
|
||||
}
|
||||
|
||||
return batteryPct
|
||||
}
|
||||
|
||||
fun getBatteryTemperature(): Float? {
|
||||
val batteryTemp: Float? = batteryStatus?.let { intent ->
|
||||
val temperature = intent.getIntExtra(
|
||||
BatteryManager.EXTRA_TEMPERATURE,
|
||||
0
|
||||
)
|
||||
temperature.toFloat() / 10
|
||||
}
|
||||
|
||||
return batteryTemp
|
||||
}
|
||||
|
||||
fun getBatteryVoltage(context: Context): Float {
|
||||
val batteryIntent =
|
||||
context.registerReceiver(
|
||||
null,
|
||||
IntentFilter(Intent.ACTION_BATTERY_CHANGED)
|
||||
)
|
||||
val voltage = batteryIntent?.getIntExtra(
|
||||
BatteryManager.EXTRA_VOLTAGE,
|
||||
0
|
||||
) ?: 0
|
||||
|
||||
// milli-volts to volts
|
||||
return voltage.toFloat() / 1000
|
||||
}
|
||||
|
||||
|
||||
fun getBatteryCapacity(context: Context): Int {
|
||||
val batteryManager =
|
||||
context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
|
||||
val currentCapacity =
|
||||
batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)
|
||||
|
||||
return currentCapacity
|
||||
}
|
||||
|
||||
fun getBatteryMaxCapacity(context: Context): Float {
|
||||
val batteryManager = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
|
||||
val designCapacity =
|
||||
batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
|
||||
val currentCapacity =
|
||||
batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)
|
||||
|
||||
// Calculate the estimated maximum battery capacity in mAh
|
||||
val maxCapacity = currentCapacity.toFloat() / designCapacity.toFloat() * 100
|
||||
|
||||
return maxCapacity
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user