API call for DeviceProvision and Login is completed and tested
This commit is contained in:
1
app/src/main/assets/app.properties
Normal file
1
app/src/main/assets/app.properties
Normal file
@@ -0,0 +1 @@
|
||||
BASE_URL= https://datacollection.micropcr.com/api/
|
||||
@@ -1,46 +0,0 @@
|
||||
package com.example.hpostesting.data
|
||||
|
||||
import android.util.Log
|
||||
import com.example.hpostesting.data.model.Response
|
||||
import com.example.hpostesting.data.repository.DatabaseRepository
|
||||
import com.example.hpostesting.util.MyUtils
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class FileUploader {
|
||||
|
||||
private val TAG = "FileUploader"
|
||||
val repository = DatabaseRepository()
|
||||
|
||||
suspend fun start() {
|
||||
|
||||
val listOfFiles = repository.getAllFromPendingQueue()
|
||||
|
||||
for (each in listOfFiles){
|
||||
// Checking internet connectivity & mobile as same or not
|
||||
if (MyUtils.isInternetConnected() && each.mobileId == DataHolder.mobileUniqueId) {
|
||||
|
||||
Log.d(TAG, "uploading file ${each.pendingId}")
|
||||
GlobalScope.launch {
|
||||
val response = repository.uploadFileToStorage(each.patientId, each.filePath)
|
||||
|
||||
when (response) {
|
||||
is Response.Success -> {
|
||||
Log.d(TAG, "File Uploaded ${each.pendingId}")
|
||||
repository.removeFromPendingQueue(each.pendingId)
|
||||
}
|
||||
|
||||
is Response.Error -> {
|
||||
Log.d(TAG, response.exception.toString())
|
||||
}
|
||||
}
|
||||
}.join()
|
||||
|
||||
} else {
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
7
app/src/main/java/com/example/hpostesting/data/Result.kt
Normal file
7
app/src/main/java/com/example/hpostesting/data/Result.kt
Normal file
@@ -0,0 +1,7 @@
|
||||
package com.example.hpostesting.data
|
||||
|
||||
sealed class Result<out T : Any> {
|
||||
data class Success<out T : Any>(val data: T) : Result<T>()
|
||||
data class Error(val exception: Exception) : Result<Nothing>()
|
||||
class Loading<T : Any> : Result<T>()
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.example.hpostesting.data.api
|
||||
|
||||
import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionRequest
|
||||
import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionResponse
|
||||
import com.example.hpostesting.data.model.hpostest.HPOSV2TestResult
|
||||
import com.example.hpostesting.data.model.login.LoginRequest
|
||||
import com.example.hpostesting.data.model.login.LoginResponse
|
||||
import com.example.hpostesting.data.model.patient.HemoCubeTestData
|
||||
import retrofit2.Response
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.Header
|
||||
import retrofit2.http.POST
|
||||
|
||||
interface HPOSApi {
|
||||
|
||||
@POST("uploadResults/")
|
||||
suspend fun uploadResults(
|
||||
@Header("Authorization") accessToken: String,
|
||||
@Body entry: HPOSV2TestResult
|
||||
): Response<Any>
|
||||
|
||||
@POST("deviceManagement/device/provision")
|
||||
suspend fun deviceProvision(
|
||||
@Body deviceProvisionRequest: DeviceProvisionRequest
|
||||
): DeviceProvisionResponse
|
||||
|
||||
@POST("deviceService/device/login")
|
||||
suspend fun login(
|
||||
@Body loginRequest: LoginRequest
|
||||
): LoginResponse
|
||||
|
||||
@POST("CheckUpdate/")
|
||||
suspend fun checkUpdate(
|
||||
@Body entry: HemoCubeTestData
|
||||
): Response<Any>
|
||||
|
||||
@POST("uploadLogs/")
|
||||
suspend fun uploadLogs(
|
||||
@Body entry: HemoCubeTestData
|
||||
): Response<Any>
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.example.hpostesting.data.api
|
||||
|
||||
interface PropertyProvider {
|
||||
|
||||
fun getProperty(key: String): String
|
||||
}
|
||||
@@ -4,8 +4,21 @@ object Constants {
|
||||
const val ACTION_USB_PERMISSION = "shanmukha.in.sickle_cell.USB_PERMISSION"
|
||||
const val HOMOCUBE_USB_PERMISSION = "shanmukha.in.sickle_cell_homocube.USB_PERMISSION"
|
||||
|
||||
const val BASE_URL = "www.google.com"
|
||||
|
||||
const val ABHA_APP_PACKAGE = "in.ndhm.phr"
|
||||
|
||||
const val serialNumber = "NKH5555AH"
|
||||
const val deviceTypeName = "HPOS"
|
||||
const val uid = "NKH5555AH"
|
||||
const val deviceProvisionEmail = "HPOS_provisioner@bigtec.co.in"
|
||||
const val deviceProvisionPassword = "f2ab0e7f9d69"
|
||||
const val deviceID = "HCV-000-3001"
|
||||
const val devicePassword = "810516d8f4c7"
|
||||
|
||||
const val ACCESS_TOKEN = "accessToken"
|
||||
const val NATS_TOKEN = "natsToken"
|
||||
|
||||
const val WRITE_TIMEOUT_MILLIS = 30000 // 30 sec
|
||||
const val READ_TIMEOUT_MILLIS = 60000 // 1 min
|
||||
const val DELAY_BETWEEN_COMMANDS: Long = 1000
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.example.hpostesting.data.model.deviceprovision
|
||||
|
||||
data class Credentials(
|
||||
val password: String? = "",
|
||||
val username: String? = ""
|
||||
)
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.example.hpostesting.data.model.deviceprovision
|
||||
|
||||
data class Device(
|
||||
val assigned: Boolean? = false,
|
||||
val createdAt: String? = "",
|
||||
val createdBy: Int? = 0,
|
||||
val deviceType: DeviceType? = DeviceType(),
|
||||
val deviceTypeId: Int? = 0,
|
||||
val deviceUser: DeviceUser? = DeviceUser(),
|
||||
val enabled: Boolean? = false,
|
||||
val id: Int? = 0,
|
||||
val name: String? = "",
|
||||
val serialNumber: String? = "",
|
||||
val uid: String? = "",
|
||||
val updatedAt: String? = "",
|
||||
val updatedBy: Int? = 0
|
||||
)
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.example.hpostesting.data.model.deviceprovision
|
||||
|
||||
data class DeviceProvisionData(
|
||||
val credentials: Credentials? = Credentials(),
|
||||
val device: Device? = Device()
|
||||
)
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.example.hpostesting.data.model.deviceprovision
|
||||
|
||||
data class DeviceProvisionRequest(
|
||||
val deviceTypeName: String? = "",
|
||||
val email: String? = "",
|
||||
val password: String? = "",
|
||||
val serialNumber: String? = "",
|
||||
val uid: String? = ""
|
||||
)
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.example.hpostesting.data.model.deviceprovision
|
||||
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
data class DeviceProvisionResponse(
|
||||
@SerializedName("Data")
|
||||
val data: DeviceProvisionData? = DeviceProvisionData(),
|
||||
@SerializedName("Message")
|
||||
val message: String? = "",
|
||||
@SerializedName("Result")
|
||||
val result: String? = ""
|
||||
)
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.example.hpostesting.data.model.deviceprovision
|
||||
|
||||
data class DeviceType(
|
||||
val createdAt: String? = "",
|
||||
val createdBy: Int? = 0,
|
||||
val description: String? = "",
|
||||
val enabled: Boolean? = false,
|
||||
val id: Int? = 0,
|
||||
val name: String? = "",
|
||||
val updatedAt: String? = "",
|
||||
val updatedBy: Int? = 0
|
||||
)
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.example.hpostesting.data.model.deviceprovision
|
||||
|
||||
data class DeviceUser(
|
||||
val createdAt: String? = "",
|
||||
val createdBy: Int? = 0,
|
||||
val deviceId: Int? = 0,
|
||||
val enabled: Boolean? = false,
|
||||
val id: Int? = 0,
|
||||
val lastLogin: Any? = Any(),
|
||||
val natsToken: String? = "",
|
||||
val natsTokenExpiry: String? = "",
|
||||
val updatedAt: String? = "",
|
||||
val updatedBy: Int? = 0,
|
||||
val username: String? = ""
|
||||
)
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.example.hpostesting.data.model.hpostest
|
||||
|
||||
data class HPOSV2TestResult(
|
||||
val device_id: String? = "",
|
||||
val results: List<Result?>? = listOf()
|
||||
)
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.example.hpostesting.data.model.hpostest
|
||||
|
||||
import com.example.hpostesting.data.model.patient.UserData
|
||||
|
||||
data class RawData(
|
||||
var _id: String = "",
|
||||
var name: String = "",
|
||||
var incubationTime: String = "",
|
||||
var bloodGroup: String = "",
|
||||
var birthYear: String = "",
|
||||
var state: String = "",
|
||||
var abhaId: String = "",
|
||||
var userImageURL: String = "",
|
||||
var location: UserData.Location? = null,
|
||||
var reportUploadTime: String? = "",
|
||||
var testType: String? = "HEMOCUBE",
|
||||
var testTime: String? = "",
|
||||
var testStatus: Boolean? = false,
|
||||
var gender: String = "",
|
||||
var localFlag: Boolean = false,
|
||||
var deviceId: String? = "",
|
||||
var appVersion:String? = "",
|
||||
var deviceSerialNumber: String = "",
|
||||
var deviceType: String = "HEMOCUBE",
|
||||
var kitSerial: String = "",
|
||||
var resultData: String = "",
|
||||
var led1Buffer: Double? = null,
|
||||
var led2Buffer: Double? = null,
|
||||
var led3Buffer: Double? = null,
|
||||
var led4Buffer: Double? = null,
|
||||
var led1Sample: Double? = null,
|
||||
var led2Sample: Double? = null,
|
||||
var led3Sample: Double? = null,
|
||||
var led4Sample: Double? = null,
|
||||
var led1Average: Double? = null,
|
||||
var led2Average: Double? = null,
|
||||
var led3Average: Double? = null,
|
||||
var led4Average: Double? = null,
|
||||
var abs1: Double? = null,
|
||||
var abs2: Double? = null,
|
||||
var abs3: Double? = null,
|
||||
var abs4: Double? = null,
|
||||
var deviceRatio: Double? = null,
|
||||
var calculatedRatio: Double? = null,
|
||||
var predictedDenovixRatio: Double? = null,
|
||||
var coefficients: String? = "",
|
||||
var classificationResult: String = "",
|
||||
var prdClassification: String = "",
|
||||
var errorMessages: String = "",
|
||||
var batteryLevel: String = "",
|
||||
var batteryCapacity: String = "",
|
||||
var batteryMaxCapacity: String = "",
|
||||
var batteryTemperature: String = "",
|
||||
var batteryVoltage: String = "",
|
||||
)
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.example.hpostesting.data.model.hpostest
|
||||
|
||||
data class Result(
|
||||
val age: String? = "",
|
||||
val analysis_date: String? = "",
|
||||
val analysis_id: String? = "",
|
||||
val analysis_status: String? = "",
|
||||
val analysis_type: String? = "",
|
||||
val analysis_type_method: String? = "",
|
||||
val blood_group: String? = "",
|
||||
val coefficients: List<Any?>? = listOf(),
|
||||
val collection_location: List<Any?>? = listOf(),
|
||||
val collection_time: String? = "",
|
||||
val collector: String? = "",
|
||||
val curve_fitting: String? = "",
|
||||
val device_id: String? = "",
|
||||
val device_name: String? = "",
|
||||
val expiry_time: String? = "",
|
||||
val gender: String? = "",
|
||||
val interpretation: String? = "",
|
||||
val patient_id: String? = "",
|
||||
val pregnancy: Boolean? = false,
|
||||
val raw_data: RawData? = RawData(),
|
||||
val recommendation: String? = "",
|
||||
val sample_id: String? = "",
|
||||
val sample_type: String? = "",
|
||||
val sickle_cell_history: Boolean? = false,
|
||||
val test_id: String? = "",
|
||||
val test_result: String? = "",
|
||||
val test_status: String? = "",
|
||||
val test_time: String? = "",
|
||||
val test_type: String? = "",
|
||||
val thresholds: String? = "",
|
||||
val under_medication: Boolean? = false,
|
||||
val volume: String? = ""
|
||||
)
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.example.hpostesting.data.model.login
|
||||
|
||||
data class Device(
|
||||
val assigned: Boolean? = false,
|
||||
val createdAt: String? = "",
|
||||
val createdBy: Int? = 0,
|
||||
val deviceType: DeviceType? = DeviceType(),
|
||||
val deviceTypeId: Int? = 0,
|
||||
val enabled: Boolean? = false,
|
||||
val id: Int? = 0,
|
||||
val name: String? = "",
|
||||
val serialNumber: String? = "",
|
||||
val uid: String? = "",
|
||||
val updatedAt: String? = "",
|
||||
val updatedBy: Int? = 0
|
||||
)
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.example.hpostesting.data.model.login
|
||||
|
||||
data class DeviceType(
|
||||
val createdAt: String? = "",
|
||||
val createdBy: Int? = 0,
|
||||
val description: String? = "",
|
||||
val enabled: Boolean? = false,
|
||||
val id: Int? = 0,
|
||||
val name: String? = "",
|
||||
val updatedAt: String? = "",
|
||||
val updatedBy: Int? = 0
|
||||
)
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.example.hpostesting.data.model.login
|
||||
|
||||
data class DeviceUser(
|
||||
val createdAt: String? = "",
|
||||
val createdBy: Int? = 0,
|
||||
val device: Device? = Device(),
|
||||
val deviceId: Int? = 0,
|
||||
val enabled: Boolean? = false,
|
||||
val id: Int? = 0,
|
||||
val lastLogin: String? = "",
|
||||
val natsToken: String? = "",
|
||||
val natsTokenExpiry: String? = "",
|
||||
val updatedAt: String? = "",
|
||||
val updatedBy: Int? = 0,
|
||||
val username: String? = ""
|
||||
)
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.example.hpostesting.data.model.login
|
||||
|
||||
data class LoginData(
|
||||
val accessToken: String? = "",
|
||||
val deviceUser: DeviceUser? = DeviceUser()
|
||||
)
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.example.hpostesting.data.model.login
|
||||
|
||||
data class LoginRequest(
|
||||
val lab: String? = "",
|
||||
val latitude: String? = "",
|
||||
val location: String? = "",
|
||||
val longitude: String? = "",
|
||||
val mode: String? = "",
|
||||
val password: String? = "",
|
||||
val serialNumber: String? = "",
|
||||
val username: String? = ""
|
||||
)
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.example.hpostesting.data.model.login
|
||||
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
data class LoginResponse(
|
||||
@SerializedName("Data")
|
||||
val data: LoginData? = LoginData(),
|
||||
@SerializedName("Message")
|
||||
val message: String? = "",
|
||||
@SerializedName("Result")
|
||||
val result: String? = ""
|
||||
)
|
||||
@@ -1,55 +0,0 @@
|
||||
package com.example.hpostesting.data.model.test
|
||||
|
||||
import com.example.hpostesting.data.model.Location
|
||||
import java.util.Date
|
||||
|
||||
data class TestDetails(
|
||||
val testID: String,
|
||||
var testStatus: Status,
|
||||
val patientID: String,
|
||||
val patientName: String,
|
||||
val patientAge: Int?,
|
||||
|
||||
var resultRatio: Double?,
|
||||
var result: TestRightResultType?,
|
||||
|
||||
val reportPath: String?,
|
||||
val csvPath: String?,
|
||||
val logPath: String?,
|
||||
|
||||
// Meta Data
|
||||
var deviceId: String?,
|
||||
val mobileId: String,
|
||||
var kitSerial: String?,
|
||||
val location: Location?,
|
||||
val appVersion: String,
|
||||
|
||||
val registeredTime: Date?,
|
||||
var uploadTime: Date?
|
||||
) {
|
||||
constructor() : this(
|
||||
"",
|
||||
Status.PENDING,
|
||||
"",
|
||||
"",
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
"",
|
||||
null,
|
||||
null,
|
||||
"",
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
|
||||
enum class Status {
|
||||
COMPLETED,
|
||||
PENDING,
|
||||
INPROGRESS
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
package com.example.hpostesting.data.model.test
|
||||
|
||||
data class TestInfo(
|
||||
val value: String,
|
||||
val number1: String,
|
||||
val number2: String,
|
||||
val result: String,
|
||||
val resultConfirmatory: String,
|
||||
val directoryPath: String,
|
||||
val fullPath: String
|
||||
)
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.example.hpostesting.data.repository
|
||||
|
||||
import android.net.Uri
|
||||
import com.example.hpostesting.data.api.HPOSApi
|
||||
import com.example.hpostesting.data.model.PendingUploads
|
||||
import com.example.hpostesting.data.model.Response
|
||||
import com.example.hpostesting.data.model.diagnostics.DiagnosticsData
|
||||
@@ -15,13 +16,42 @@ import com.google.firebase.ktx.Firebase
|
||||
import com.google.firebase.storage.ktx.storage
|
||||
import kotlinx.coroutines.tasks.await
|
||||
import java.io.File
|
||||
import com.example.hpostesting.data.Result
|
||||
import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionRequest
|
||||
import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionResponse
|
||||
import com.example.hpostesting.data.model.login.LoginRequest
|
||||
import com.example.hpostesting.data.model.login.LoginResponse
|
||||
import java.net.ConnectException
|
||||
import java.net.SocketTimeoutException
|
||||
import javax.inject.Inject
|
||||
|
||||
class DatabaseRepository @Inject constructor() : Repository {
|
||||
class NetworkException(message: String, cause: Throwable) : Exception(message, cause)
|
||||
class DatabaseRepository @Inject constructor(private val hposApi: HPOSApi) : Repository {
|
||||
|
||||
private val db: FirebaseFirestore = Firebase.firestore
|
||||
private val storage = Firebase.storage
|
||||
|
||||
private suspend fun <T : Any> safeApiCall(apiCall: suspend () -> T): Result<T> {
|
||||
return try {
|
||||
val response = apiCall.invoke()
|
||||
Result.Success(response)
|
||||
} catch (e: SocketTimeoutException) {
|
||||
Result.Error(NetworkException("Network timeout", e))
|
||||
} catch (e: ConnectException) {
|
||||
Result.Error(NetworkException("Network connection failed", e))
|
||||
} catch (e: Exception) {
|
||||
Result.Error(e)
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun deviceProvision(deviceProvisionRequest: DeviceProvisionRequest): Result<DeviceProvisionResponse> {
|
||||
return safeApiCall { hposApi.deviceProvision(deviceProvisionRequest) }
|
||||
}
|
||||
|
||||
suspend fun login(loginRequest: LoginRequest): Result<LoginResponse> {
|
||||
return safeApiCall { hposApi.login(loginRequest) }
|
||||
}
|
||||
|
||||
override suspend fun addTestToDatabase(data: HemoCubeTestData?): Response<String> {
|
||||
return try {
|
||||
val userdata = db.collection("patientData").whereEqualTo("_id", data!!._id).get().await()
|
||||
|
||||
@@ -2,7 +2,11 @@ package com.example.hpostesting.domain.di
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import android.content.res.AssetManager
|
||||
import androidx.room.Room
|
||||
import com.example.hpostesting.data.api.HPOSApi
|
||||
import com.example.hpostesting.data.api.PropertyProvider
|
||||
import com.example.hpostesting.data.constant.Constants.BASE_URL
|
||||
import com.example.hpostesting.data.dao.HemoCubeDao
|
||||
import com.example.hpostesting.data.dao.MyDatabase
|
||||
import com.example.hpostesting.data.dao.UserDao
|
||||
@@ -12,11 +16,15 @@ import com.example.hpostesting.data.repository.LocalFileRepository
|
||||
import com.example.hpostesting.data.repository.Repository
|
||||
import com.example.hpostesting.domain.SaveRawData
|
||||
import com.example.hpostesting.domain.SaveRawDataTest
|
||||
import com.example.hpostesting.util.PropertyProviderImpl
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import okhttp3.OkHttpClient
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.converter.gson.GsonConverterFactory
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@@ -67,13 +75,47 @@ object AppModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideDatabaseRepository(): DatabaseRepository {
|
||||
return DatabaseRepository()
|
||||
fun provideDatabaseRepository(hposApi: HPOSApi): DatabaseRepository {
|
||||
return DatabaseRepository(hposApi = hposApi)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideRepository(): Repository {
|
||||
return DatabaseRepository()
|
||||
fun provideRepository(hposApi: HPOSApi): Repository {
|
||||
return DatabaseRepository(hposApi)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideAssetManager(@ApplicationContext context: Context): AssetManager {
|
||||
return context.assets
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun providePropertyProvider(assetManager: AssetManager): PropertyProvider {
|
||||
return PropertyProviderImpl(assetManager)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideOkHttpClient(): OkHttpClient {
|
||||
return OkHttpClient.Builder()
|
||||
.build()
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideRetrofit(propertyProvider: PropertyProvider, client: OkHttpClient): Retrofit {
|
||||
return Retrofit.Builder()
|
||||
.baseUrl(propertyProvider.getProperty("BASE_URL"))
|
||||
.client(client)
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.build()
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideEntryApi(retrofit: Retrofit): HPOSApi =
|
||||
retrofit.create(HPOSApi::class.java)
|
||||
}
|
||||
@@ -16,7 +16,10 @@ import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
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.login.LoginRequest
|
||||
import com.example.hpostesting.data.model.login.LoginResponse
|
||||
import com.example.hpostesting.data.model.patient.HemoCubeTestData
|
||||
import com.example.hpostesting.data.model.patient.UserData
|
||||
import com.example.hpostesting.presentation.KitScanActivity
|
||||
@@ -98,6 +101,7 @@ class HomeFragment : Fragment() {
|
||||
loadUserData()
|
||||
setSearch()
|
||||
checkForLocalDBData()
|
||||
checkForToken()
|
||||
} else {
|
||||
binding.internetAvailableCL.visibility = View.GONE
|
||||
binding.internetNotAvailableCL.visibility = View.VISIBLE
|
||||
@@ -134,6 +138,51 @@ class HomeFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkForToken() {
|
||||
if (sharedPreference.getString(Constants.ACCESS_TOKEN, "").toString()
|
||||
.isEmpty() && sharedPreference.getString(Constants.NATS_TOKEN, "").toString()
|
||||
.isEmpty()
|
||||
) {
|
||||
hemoCubeViewModel.login(createLoginRequestData())
|
||||
}
|
||||
hemoCubeViewModel.loginResponse.observe(viewLifecycleOwner) { response ->
|
||||
when (response) {
|
||||
is Result.Success -> {
|
||||
updateTokens(response)
|
||||
}
|
||||
|
||||
is Result.Error -> {
|
||||
response.exception.let { message ->
|
||||
Toast.makeText(activity, "An error occurred: $message", Toast.LENGTH_LONG)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
||||
is Result.Loading -> {
|
||||
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateTokens(response: Result.Success<LoginResponse>) {
|
||||
with(sharedPreference.edit()) {
|
||||
putString(Constants.ACCESS_TOKEN, response.data.data?.accessToken)
|
||||
putString(Constants.NATS_TOKEN, response.data.data?.deviceUser?.natsToken)
|
||||
apply()
|
||||
}
|
||||
}
|
||||
|
||||
private fun createLoginRequestData(): LoginRequest {
|
||||
return LoginRequest(
|
||||
password = Constants.devicePassword,
|
||||
serialNumber = Constants.deviceID,
|
||||
username = Constants.deviceID
|
||||
)
|
||||
}
|
||||
|
||||
private fun setUserId() {
|
||||
binding.btnSubmit.setOnClickListener {
|
||||
val userId = binding.userId.text.toString()
|
||||
@@ -141,7 +190,9 @@ class HomeFragment : Fragment() {
|
||||
if (userId.length >= 18 && !bloodGroup.equals("Select Blood Group") || !bloodGroup.isNullOrBlank()) {
|
||||
hemoCubeViewModel.addUser(
|
||||
HemoCubeTestData(
|
||||
_id = userId, bloodGroup = bloodGroup.toString(), incubationTime = SimpleDateFormat(
|
||||
_id = userId,
|
||||
bloodGroup = bloodGroup.toString(),
|
||||
incubationTime = SimpleDateFormat(
|
||||
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||
).format(Calendar.getInstance().time).toString()
|
||||
)
|
||||
@@ -308,7 +359,7 @@ class HomeFragment : Fragment() {
|
||||
|
||||
hemoCubeViewModel.allUserData.observe(viewLifecycleOwner) { userDataList ->
|
||||
val uploadDataVisibility =
|
||||
if (userDataList.any { !it.localFlag && it.testStatus == true}) View.VISIBLE else View.GONE
|
||||
if (userDataList.any { !it.localFlag && it.testStatus == true }) View.VISIBLE else View.GONE
|
||||
binding.uploadData.visibility = uploadDataVisibility
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ class LoginFragment : Fragment() {
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
_binding = FragmentLoginBinding.inflate(inflater, container, false)
|
||||
sharedPreference = requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
|
||||
sharedPreference =
|
||||
requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
|
||||
return binding.root
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
package com.example.hpostesting.presentation.hemocube
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.content.SharedPreferences
|
||||
import android.os.BatteryManager
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
@@ -17,14 +15,18 @@ import com.example.hpostesting.data.NetworkStatusLiveData
|
||||
import com.example.hpostesting.data.constant.Constants
|
||||
import com.example.hpostesting.data.dao.HemoCubeDao
|
||||
import com.example.hpostesting.data.model.Response
|
||||
import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionRequest
|
||||
import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionResponse
|
||||
import com.example.hpostesting.data.model.patient.BufferCheckData
|
||||
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.patient.toHemoCubeTestData
|
||||
import com.example.hpostesting.data.repository.DatabaseRepository
|
||||
import com.example.hpostesting.data.repository.Repository
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import com.example.hpostesting.data.Result
|
||||
import com.example.hpostesting.data.model.login.LoginRequest
|
||||
import com.example.hpostesting.data.model.login.LoginResponse
|
||||
import com.example.hpostesting.data.repository.DatabaseRepository
|
||||
import kotlinx.coroutines.launch
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Calendar
|
||||
@@ -35,246 +37,252 @@ import javax.inject.Inject
|
||||
class HemoCubeViewModel @Inject constructor(
|
||||
private val hemoCubeDao: HemoCubeDao,
|
||||
private val repository: Repository,
|
||||
context: Context,
|
||||
private val databaseRepository: DatabaseRepository,
|
||||
context: Context
|
||||
) : ViewModel() {
|
||||
var isServiceConnected = false
|
||||
val progressBar = MutableLiveData(false)
|
||||
val testDetails = DataHolder.selectedTest?.toHemoCubeTestData()
|
||||
val messages = MutableLiveData<String>()
|
||||
private val sharedPreference: SharedPreferences =
|
||||
context.getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
|
||||
private val testDetails = DataHolder.selectedTest?.toHemoCubeTestData()
|
||||
val messages = MutableLiveData<String>()
|
||||
private val sharedPreference: SharedPreferences =
|
||||
context.getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
|
||||
|
||||
// Get the device ID of the device you want to retrieve data for (e.g., the first device in the list)
|
||||
val deviceProvisionResponse = MutableLiveData<Result<DeviceProvisionResponse>>()
|
||||
|
||||
private val _networkStatusLiveData = NetworkStatusLiveData(context)
|
||||
val allUserData = hemoCubeDao.getAll()
|
||||
val deviceData = MutableLiveData<DeviceData?>()
|
||||
val networkStatusLiveData: LiveData<Boolean>
|
||||
get() = _networkStatusLiveData
|
||||
val deviceMessages = MutableLiveData<String?>()
|
||||
val fireBaseUpload = MutableLiveData<String>()
|
||||
val fireBaseBulkUpload = MutableLiveData<String>()
|
||||
val loginResponse = MutableLiveData<Result<LoginResponse>>()
|
||||
|
||||
private val batteryStatus: Intent? =
|
||||
IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
|
||||
context.registerReceiver(null, ifilter)
|
||||
}
|
||||
// Get the device ID of the device you want to retrieve data for (e.g., the first device in the list)
|
||||
|
||||
fun uploadHemoCubeResultToDatabase(
|
||||
isOnline: Boolean,
|
||||
testStatus: Boolean,
|
||||
kitSerial: String?
|
||||
) =
|
||||
viewModelScope.launch {
|
||||
if (kitSerial != null) {
|
||||
testDetails?.kitSerial = kitSerial
|
||||
}
|
||||
testDetails?.testStatus = testStatus
|
||||
private val _networkStatusLiveData = NetworkStatusLiveData(context)
|
||||
val allUserData = hemoCubeDao.getAll()
|
||||
val deviceData = MutableLiveData<DeviceData?>()
|
||||
val networkStatusLiveData: LiveData<Boolean>
|
||||
get() = _networkStatusLiveData
|
||||
val deviceMessages = MutableLiveData<String?>()
|
||||
val fireBaseUpload = MutableLiveData<String>()
|
||||
val fireBaseBulkUpload = MutableLiveData<String>()
|
||||
|
||||
try {
|
||||
if (isOnline) {
|
||||
parseData()
|
||||
addResultTestToDb()
|
||||
} else {
|
||||
parseData()
|
||||
testDetails?.testTime = SimpleDateFormat(
|
||||
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||
).format(Calendar.getInstance().time)
|
||||
hemoCubeDao.insertAll(testDetails!!)
|
||||
fireBaseUpload.postValue("Local")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("Testdb", "Upload failed: ${e.message}")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun uploadHemoCubeResultToDatabaseforbuffercheckN(bufferCheckData: BufferCheckData) =
|
||||
viewModelScope.launch {
|
||||
addResultTestToDbforbuffercheck(bufferCheckData)
|
||||
}
|
||||
|
||||
fun getDeviceData(deviceId: String?) = viewModelScope.launch {
|
||||
deviceData.postValue(deviceId?.let { repository.getDeviceDataById(it) })
|
||||
private val batteryStatus: Intent? =
|
||||
IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
|
||||
context.registerReceiver(null, ifilter)
|
||||
}
|
||||
|
||||
private fun parseData() {
|
||||
testDetails?.deviceRatio = DataHolder.hemocubeResult
|
||||
testDetails?.resultData = DataHolder.hemoCubeTestData?.resultData.toString()
|
||||
testDetails?.location = DataHolder.location
|
||||
testDetails?.testTime = SimpleDateFormat(
|
||||
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||
).format(Calendar.getInstance().time)
|
||||
testDetails?.appVersion = DataHolder.hemoCubeTestData?.appVersion
|
||||
testDetails?.deviceId = DataHolder.hemoCubeTestData?.deviceId
|
||||
testDetails?.deviceSerialNumber =
|
||||
sharedPreference.getString(Constants.USER_ID, "").toString()
|
||||
testDetails?.kitSerial = sharedPreference.getString(Constants.KIT_NUMBER, "").toString()
|
||||
testDetails?.led1Buffer = DataHolder.hemoCubeTestData?.led1Buffer
|
||||
testDetails?.led2Buffer = DataHolder.hemoCubeTestData?.led2Buffer
|
||||
testDetails?.led3Buffer = DataHolder.hemoCubeTestData?.led3Buffer
|
||||
testDetails?.led4Buffer = DataHolder.hemoCubeTestData?.led4Buffer
|
||||
testDetails?.led1Sample = DataHolder.hemoCubeTestData?.led1Sample
|
||||
testDetails?.led2Sample = DataHolder.hemoCubeTestData?.led2Sample
|
||||
testDetails?.led3Sample = DataHolder.hemoCubeTestData?.led3Sample
|
||||
testDetails?.led4Sample = DataHolder.hemoCubeTestData?.led4Sample
|
||||
testDetails?.led1Average = DataHolder.hemoCubeTestData?.led1Average
|
||||
testDetails?.led2Average = DataHolder.hemoCubeTestData?.led2Average
|
||||
testDetails?.led3Average = DataHolder.hemoCubeTestData?.led3Average
|
||||
testDetails?.led4Average = DataHolder.hemoCubeTestData?.led4Average
|
||||
testDetails?.abs1 = DataHolder.hemoCubeTestData?.abs1
|
||||
testDetails?.abs2 = DataHolder.hemoCubeTestData?.abs2
|
||||
testDetails?.abs3 = DataHolder.hemoCubeTestData?.abs3
|
||||
testDetails?.abs4 = DataHolder.hemoCubeTestData?.abs4
|
||||
testDetails?.deviceRatio = DataHolder.hemoCubeTestData?.deviceRatio
|
||||
testDetails?.predictedDenovixRatio = DataHolder.hemoCubeTestData?.predictedDenovixRatio
|
||||
testDetails?.calculatedRatio = DataHolder.hemoCubeTestData?.calculatedRatio
|
||||
testDetails?.coefficients = DataHolder.hemoCubeTestData?.coefficients
|
||||
testDetails?.classificationResult = DataHolder.hemoCubeTestData?.classificationResult!!
|
||||
testDetails?.prdClassification =
|
||||
DataHolder.hemoCubeTestData?.prdClassification.toString()
|
||||
testDetails?.batteryLevel = DataHolder.hemoCubeTestData?.batteryLevel.toString()
|
||||
testDetails?.batteryCapacity = DataHolder.hemoCubeTestData?.batteryCapacity.toString()
|
||||
testDetails?.batteryMaxCapacity =
|
||||
DataHolder.hemoCubeTestData?.batteryMaxCapacity.toString()
|
||||
testDetails?.batteryTemperature =
|
||||
DataHolder.hemoCubeTestData?.batteryTemperature.toString()
|
||||
testDetails?.batteryVoltage = DataHolder.hemoCubeTestData?.batteryVoltage.toString()
|
||||
fun uploadHemoCubeResultToDatabase(
|
||||
isOnline: Boolean, testStatus: Boolean, kitSerial: String?
|
||||
) = viewModelScope.launch {
|
||||
if (kitSerial != null) {
|
||||
testDetails?.kitSerial = kitSerial
|
||||
}
|
||||
testDetails?.testStatus = testStatus
|
||||
|
||||
private fun addResultTestToDb() {
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
testDetails!!.reportUploadTime = SimpleDateFormat(
|
||||
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||
).format(Calendar.getInstance().time)
|
||||
|
||||
when (val response = repository.addTestToDatabase(testDetails)) {
|
||||
is Response.Success -> {
|
||||
val kitCount = sharedPreference.getInt(Constants.KIT_COUNT, 0)
|
||||
with(sharedPreference.edit()) {
|
||||
putInt(Constants.KIT_COUNT, kitCount.plus(1))
|
||||
apply()
|
||||
}
|
||||
Log.i("Testdb", "Data uploaded to Firestore successfully")
|
||||
fireBaseUpload.postValue("Success")
|
||||
testDetails.localFlag = true
|
||||
hemoCubeDao.insertAll(testDetails)
|
||||
}
|
||||
|
||||
is Response.Error -> {
|
||||
Log.e("Testdb", "Error uploading data to Firestore: $response")
|
||||
fireBaseUpload.postValue("Error")
|
||||
hemoCubeDao.insertAll(testDetails)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("Testdb", "Exception during data upload: ${e.message}")
|
||||
fireBaseUpload.postValue("Error")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun addResultTestToDbforbuffercheck(bufferCheckData: BufferCheckData) {
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
|
||||
when (val response =
|
||||
repository.addTestToDatabaseforBufferCheck(bufferCheckData)) {
|
||||
is Response.Success -> {
|
||||
Log.i("Testdb", "Data uploaded to Firestore successfully")
|
||||
fireBaseUpload.postValue("Success")
|
||||
}
|
||||
|
||||
is Response.Error -> {
|
||||
Log.e("Testdb", "Error uploading data to Firestore: $response")
|
||||
fireBaseUpload.postValue("Error")
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("Testdb", "Exception during data upload: ${e.message}")
|
||||
fireBaseUpload.postValue("Error")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun bulkAddResultTestToDb(userData: HemoCubeTestData) {
|
||||
viewModelScope.launch {
|
||||
userData.reportUploadTime = SimpleDateFormat(
|
||||
try {
|
||||
if (isOnline) {
|
||||
parseData()
|
||||
addResultTestToDb()
|
||||
} else {
|
||||
parseData()
|
||||
testDetails?.testTime = SimpleDateFormat(
|
||||
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||
).format(Calendar.getInstance().time)
|
||||
when (repository.addTestToDatabase(userData)) {
|
||||
hemoCubeDao.insertAll(testDetails!!)
|
||||
fireBaseUpload.postValue("Local")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("Testdb", "Upload failed: ${e.message}")
|
||||
}
|
||||
}
|
||||
|
||||
fun deviceProvision(deviceProvisionRequest: DeviceProvisionRequest) = viewModelScope.launch {
|
||||
deviceProvisionResponse.postValue(Result.Loading())
|
||||
databaseRepository.deviceProvision(deviceProvisionRequest).let {
|
||||
deviceProvisionResponse.postValue(it)
|
||||
}
|
||||
}
|
||||
|
||||
fun login(loginRequest: LoginRequest) = viewModelScope.launch {
|
||||
loginResponse.postValue(Result.Loading())
|
||||
databaseRepository.login(loginRequest).let {
|
||||
loginResponse.postValue(it)
|
||||
}
|
||||
}
|
||||
|
||||
fun uploadHemoCubeResultToDatabaseforbuffercheckN(bufferCheckData: BufferCheckData) =
|
||||
viewModelScope.launch {
|
||||
addResultTestToDbforbuffercheck(bufferCheckData)
|
||||
}
|
||||
|
||||
fun getDeviceData(deviceId: String?) = viewModelScope.launch {
|
||||
deviceData.postValue(deviceId?.let { repository.getDeviceDataById(it) })
|
||||
}
|
||||
|
||||
private fun parseData() {
|
||||
testDetails?.deviceRatio = DataHolder.hemocubeResult
|
||||
testDetails?.resultData = DataHolder.hemoCubeTestData?.resultData.toString()
|
||||
testDetails?.location = DataHolder.location
|
||||
testDetails?.testTime = SimpleDateFormat(
|
||||
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||
).format(Calendar.getInstance().time)
|
||||
testDetails?.appVersion = DataHolder.hemoCubeTestData?.appVersion
|
||||
testDetails?.deviceId = DataHolder.hemoCubeTestData?.deviceId
|
||||
testDetails?.deviceSerialNumber =
|
||||
sharedPreference.getString(Constants.USER_ID, "").toString()
|
||||
testDetails?.kitSerial = sharedPreference.getString(Constants.KIT_NUMBER, "").toString()
|
||||
testDetails?.led1Buffer = DataHolder.hemoCubeTestData?.led1Buffer
|
||||
testDetails?.led2Buffer = DataHolder.hemoCubeTestData?.led2Buffer
|
||||
testDetails?.led3Buffer = DataHolder.hemoCubeTestData?.led3Buffer
|
||||
testDetails?.led4Buffer = DataHolder.hemoCubeTestData?.led4Buffer
|
||||
testDetails?.led1Sample = DataHolder.hemoCubeTestData?.led1Sample
|
||||
testDetails?.led2Sample = DataHolder.hemoCubeTestData?.led2Sample
|
||||
testDetails?.led3Sample = DataHolder.hemoCubeTestData?.led3Sample
|
||||
testDetails?.led4Sample = DataHolder.hemoCubeTestData?.led4Sample
|
||||
testDetails?.led1Average = DataHolder.hemoCubeTestData?.led1Average
|
||||
testDetails?.led2Average = DataHolder.hemoCubeTestData?.led2Average
|
||||
testDetails?.led3Average = DataHolder.hemoCubeTestData?.led3Average
|
||||
testDetails?.led4Average = DataHolder.hemoCubeTestData?.led4Average
|
||||
testDetails?.abs1 = DataHolder.hemoCubeTestData?.abs1
|
||||
testDetails?.abs2 = DataHolder.hemoCubeTestData?.abs2
|
||||
testDetails?.abs3 = DataHolder.hemoCubeTestData?.abs3
|
||||
testDetails?.abs4 = DataHolder.hemoCubeTestData?.abs4
|
||||
testDetails?.deviceRatio = DataHolder.hemoCubeTestData?.deviceRatio
|
||||
testDetails?.predictedDenovixRatio = DataHolder.hemoCubeTestData?.predictedDenovixRatio
|
||||
testDetails?.calculatedRatio = DataHolder.hemoCubeTestData?.calculatedRatio
|
||||
testDetails?.coefficients = DataHolder.hemoCubeTestData?.coefficients
|
||||
testDetails?.classificationResult = DataHolder.hemoCubeTestData?.classificationResult!!
|
||||
testDetails?.prdClassification = DataHolder.hemoCubeTestData?.prdClassification.toString()
|
||||
testDetails?.batteryLevel = DataHolder.hemoCubeTestData?.batteryLevel.toString()
|
||||
testDetails?.batteryCapacity = DataHolder.hemoCubeTestData?.batteryCapacity.toString()
|
||||
testDetails?.batteryMaxCapacity = DataHolder.hemoCubeTestData?.batteryMaxCapacity.toString()
|
||||
testDetails?.batteryTemperature = DataHolder.hemoCubeTestData?.batteryTemperature.toString()
|
||||
testDetails?.batteryVoltage = DataHolder.hemoCubeTestData?.batteryVoltage.toString()
|
||||
}
|
||||
|
||||
private fun addResultTestToDb() {
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
testDetails!!.reportUploadTime = SimpleDateFormat(
|
||||
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||
).format(Calendar.getInstance().time)
|
||||
|
||||
when (val response = repository.addTestToDatabase(testDetails)) {
|
||||
is Response.Success -> {
|
||||
fireBaseBulkUpload.postValue("Success")
|
||||
updateLocalFlag(userData._id)
|
||||
val kitCount = sharedPreference.getInt(Constants.KIT_COUNT, 0)
|
||||
with(sharedPreference.edit()) {
|
||||
putInt(Constants.KIT_COUNT, kitCount.plus(1))
|
||||
apply()
|
||||
}
|
||||
Log.i("Testdb", "Data uploaded to Firestore successfully")
|
||||
fireBaseUpload.postValue("Success")
|
||||
testDetails.localFlag = true
|
||||
hemoCubeDao.insertAll(testDetails)
|
||||
}
|
||||
|
||||
else -> {
|
||||
fireBaseBulkUpload.postValue("Error")
|
||||
is Response.Error -> {
|
||||
Log.e("Testdb", "Error uploading data to Firestore: $response")
|
||||
fireBaseUpload.postValue("Error")
|
||||
hemoCubeDao.insertAll(testDetails)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("Testdb", "Exception during data upload: ${e.message}")
|
||||
fireBaseUpload.postValue("Error")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun addResultTestToDbforbuffercheck(bufferCheckData: BufferCheckData) {
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
|
||||
when (val response = repository.addTestToDatabaseforBufferCheck(bufferCheckData)) {
|
||||
is Response.Success -> {
|
||||
Log.i("Testdb", "Data uploaded to Firestore successfully")
|
||||
fireBaseUpload.postValue("Success")
|
||||
}
|
||||
|
||||
is Response.Error -> {
|
||||
Log.e("Testdb", "Error uploading data to Firestore: $response")
|
||||
fireBaseUpload.postValue("Error")
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("Testdb", "Exception during data upload: ${e.message}")
|
||||
fireBaseUpload.postValue("Error")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun bulkAddResultTestToDb(userData: HemoCubeTestData) {
|
||||
viewModelScope.launch {
|
||||
userData.reportUploadTime = SimpleDateFormat(
|
||||
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||
).format(Calendar.getInstance().time)
|
||||
when (repository.addTestToDatabase(userData)) {
|
||||
is Response.Success -> {
|
||||
fireBaseBulkUpload.postValue("Success")
|
||||
updateLocalFlag(userData._id)
|
||||
}
|
||||
|
||||
else -> {
|
||||
fireBaseBulkUpload.postValue("Error")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateLocalFlag(userId: String) = viewModelScope.launch {
|
||||
hemoCubeDao.updateFieldById(id = userId, true)
|
||||
}
|
||||
|
||||
fun addUser(userData: HemoCubeTestData) = viewModelScope.launch {
|
||||
hemoCubeDao.insertAll(userData)
|
||||
}
|
||||
|
||||
fun deleteById(userId: String) = viewModelScope.launch {
|
||||
hemoCubeDao.deleteById(id = userId)
|
||||
}
|
||||
|
||||
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) ?: 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
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateLocalFlag(userId: String) = viewModelScope.launch {
|
||||
hemoCubeDao.updateFieldById(id = userId, true)
|
||||
}
|
||||
|
||||
fun addUser(userData: HemoCubeTestData) = viewModelScope.launch {
|
||||
hemoCubeDao.insertAll(userData)
|
||||
}
|
||||
|
||||
fun deleteById(userId: String) = viewModelScope.launch {
|
||||
hemoCubeDao.deleteById(id = userId)
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
return currentCapacity.toFloat() / designCapacity.toFloat() * 100
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.example.hpostesting.util
|
||||
|
||||
import android.content.res.AssetManager
|
||||
import com.example.hpostesting.data.api.PropertyProvider
|
||||
import java.io.InputStream
|
||||
import java.util.Properties
|
||||
|
||||
class PropertyProviderImpl (private val assetManager: AssetManager) : PropertyProvider {
|
||||
override fun getProperty(key: String): String {
|
||||
val inputStream: InputStream = assetManager.open("app.properties")
|
||||
val properties = Properties()
|
||||
properties.load(inputStream)
|
||||
return properties.getProperty(key)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user