From ab1208d9ee5953e0b5a45a54585ad40da362408f Mon Sep 17 00:00:00 2001 From: Mariya Date: Wed, 14 Feb 2024 15:53:38 +0530 Subject: [PATCH] Device Diagnostics Api structure done successfully --- app/build.gradle | 2 +- app/google-services.json | 186 ++++++++++++++++-- .../hpostesting/data/api/MolbioAuthApi.kt | 3 + .../hpostesting/data/api/MolbioResultApi.kt | 2 +- .../devicediagnostics/AdditionalDetails.kt | 21 +- .../DeviceDiagnosticsData.kt | 12 ++ .../DeviceDiagnosticsRequest.kt | 5 + .../DeviceDiagnosticsResponse.kt | 5 +- .../data/repository/DatabaseRepository.kt | 2 +- .../diagnostics/DiagnosticsFragment.kt | 89 +++++---- .../diagnostics/DiagnosticsViewModel.kt | 24 +-- 11 files changed, 267 insertions(+), 84 deletions(-) create mode 100644 app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsData.kt create mode 100644 app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsRequest.kt diff --git a/app/build.gradle b/app/build.gradle index c881eb0..def0375 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,7 +16,7 @@ android { // dev - development, quality - qc, uat - User Acceptance Test, preprod - preproduction, prod - production defaultConfig { - applicationId "in.sminnovations.hpostesting.quality" + applicationId "in.sminnovations.hpostesting.dev" minSdk 21 targetSdk 34 versionCode 101 diff --git a/app/google-services.json b/app/google-services.json index 7f4a67b..a73fe1e 100644 --- a/app/google-services.json +++ b/app/google-services.json @@ -1,45 +1,205 @@ { "project_info": { - "project_number": "1004619739289", - "project_id": "hpos-qa", - "storage_bucket": "hpos-qa.appspot.com" + "project_number": "650071678820", + "project_id": "hpos-af3cc", + "storage_bucket": "hpos-af3cc.appspot.com" }, "client": [ { "client_info": { - "mobilesdk_app_id": "1:1004619739289:android:f669b47552748433e5c808", + "mobilesdk_app_id": "1:650071678820:android:f1435a1c07f710036c6471", "android_client_info": { - "package_name": "in.sminnovations.hposregistration.quality" + "package_name": "com.example.hposconsentform" } }, - "oauth_client": [], + "oauth_client": [ + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ], "api_key": [ { - "current_key": "AIzaSyC4d4GhWHr_NMJAeBvnztQ_yQ3Qe9MAnLs" + "current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I" } ], "services": { "appinvite_service": { - "other_platform_oauth_client": [] + "other_platform_oauth_client": [ + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ] } } }, { "client_info": { - "mobilesdk_app_id": "1:1004619739289:android:8397cd1f0357bd89e5c808", + "mobilesdk_app_id": "1:650071678820:android:7865bef608cdee6f6c6471", "android_client_info": { - "package_name": "in.sminnovations.hpostesting.quality" + "package_name": "com.smi.counselling" } }, - "oauth_client": [], + "oauth_client": [ + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ], "api_key": [ { - "current_key": "AIzaSyC4d4GhWHr_NMJAeBvnztQ_yQ3Qe9MAnLs" + "current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I" } ], "services": { "appinvite_service": { - "other_platform_oauth_client": [] + "other_platform_oauth_client": [ + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:650071678820:android:2925e9ce3417d2386c6471", + "android_client_info": { + "package_name": "in.sminnovations.hemocube" + } + }, + "oauth_client": [ + { + "client_id": "650071678820-srhm9spm9hjn4frcd3r6o02gdhdbtd15.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "in.sminnovations.hemocube", + "certificate_hash": "7714b9268a81d0cf0fb178b0af8dbb630f8fc70a" + } + }, + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:650071678820:android:7569c1cad4fc99916c6471", + "android_client_info": { + "package_name": "in.sminnovations.hposregistration" + } + }, + "oauth_client": [ + { + "client_id": "650071678820-70kp5jvjda4r5diqch2kn4lc40p4f42g.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "in.sminnovations.hposregistration", + "certificate_hash": "7714b9268a81d0cf0fb178b0af8dbb630f8fc70a" + } + }, + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:650071678820:android:f96be19e5d43102b6c6471", + "android_client_info": { + "package_name": "in.sminnovations.hpostesting" + } + }, + "oauth_client": [ + { + "client_id": "650071678820-l87dnr0bdj95get0khgnvfv2an1k6ogq.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "in.sminnovations.hpostesting", + "certificate_hash": "7714b9268a81d0cf0fb178b0af8dbb630f8fc70a" + } + }, + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:650071678820:android:a53292637abb7c0d6c6471", + "android_client_info": { + "package_name": "in.sminnovations.hpostesting.dev" + } + }, + "oauth_client": [ + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com", + "client_type": 3 + } + ] } } } diff --git a/app/src/main/java/com/example/hpostesting/data/api/MolbioAuthApi.kt b/app/src/main/java/com/example/hpostesting/data/api/MolbioAuthApi.kt index 1165024..50a76f0 100644 --- a/app/src/main/java/com/example/hpostesting/data/api/MolbioAuthApi.kt +++ b/app/src/main/java/com/example/hpostesting/data/api/MolbioAuthApi.kt @@ -1,5 +1,7 @@ package com.example.hpostesting.data.api +import com.example.hpostesting.data.model.devicediagnostics.DeviceDiagnosticsRequest +import com.example.hpostesting.data.model.devicediagnostics.DeviceDiagnosticsResponse import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionRequest import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionResponse import com.example.hpostesting.data.model.login.LoginRequest @@ -18,4 +20,5 @@ interface MolbioAuthApi { suspend fun login( @Body loginRequest: LoginRequest ): LoginResponse + } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/data/api/MolbioResultApi.kt b/app/src/main/java/com/example/hpostesting/data/api/MolbioResultApi.kt index 189ddaf..45d89f7 100644 --- a/app/src/main/java/com/example/hpostesting/data/api/MolbioResultApi.kt +++ b/app/src/main/java/com/example/hpostesting/data/api/MolbioResultApi.kt @@ -40,7 +40,7 @@ interface MolbioResultApi { ): UploadLogsResponse - @POST("deviceService/device/uploadDeviceDiagnostics") + @PUT("deviceService/device/uploadDeviceDiagnostics") suspend fun deviceDiagnostics( @Body deviceDiagnosticsRequest: DeviceDiagnosticsRequest ): DeviceDiagnosticsResponse diff --git a/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/AdditionalDetails.kt b/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/AdditionalDetails.kt index 7bf8d31..e72029c 100644 --- a/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/AdditionalDetails.kt +++ b/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/AdditionalDetails.kt @@ -1,15 +1,14 @@ 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 + val batteryLevel: String? = "", + val batteryCapacity: String? = "", + val batteryMaxCapacity: String? = "", + val batteryTemperature: String? = "", + val batteryVoltage: String? = "", ) + + + + + diff --git a/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsData.kt b/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsData.kt new file mode 100644 index 0000000..6effb6a --- /dev/null +++ b/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsData.kt @@ -0,0 +1,12 @@ +package com.example.hpostesting.data.model.devicediagnostics + +data class DeviceDiagnosticsData( + val id: String? = "", + val deviceId: String? = "", + val additionalDetails: AdditionalDetails?= AdditionalDetails(), + val createdBy: String? = "", + val updatedBy: String? = "", + val updatedAt: String? = "", + val createdAt: String? = "", +) + diff --git a/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsRequest.kt b/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsRequest.kt new file mode 100644 index 0000000..27218ae --- /dev/null +++ b/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsRequest.kt @@ -0,0 +1,5 @@ +package com.example.hpostesting.data.model.devicediagnostics + +data class DeviceDiagnosticsRequest( + val additionalDetails: AdditionalDetails?= AdditionalDetails() +) diff --git a/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsResponse.kt b/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsResponse.kt index 1c86153..55b66c8 100644 --- a/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsResponse.kt +++ b/app/src/main/java/com/example/hpostesting/data/model/devicediagnostics/DeviceDiagnosticsResponse.kt @@ -2,11 +2,10 @@ package com.example.hpostesting.data.model.devicediagnostics import com.google.gson.annotations.SerializedName + data class DeviceDiagnosticsResponse( @SerializedName("Data") - val data: DeviceDiagnosticsData?, - @SerializedName("Message") + val data: DeviceDiagnosticsData? = DeviceDiagnosticsData(), val message: String? = "", - @SerializedName("Result") val result: String? = "" ) diff --git a/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt b/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt index 3c85e1a..cb279fd 100644 --- a/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt +++ b/app/src/main/java/com/example/hpostesting/data/repository/DatabaseRepository.kt @@ -80,7 +80,7 @@ class DatabaseRepository @Inject constructor( } override suspend fun deviceDiagnostics(deviceDiagnosticsRequest: DeviceDiagnosticsRequest): Result { - return safeApiCall { molbioResultApi.deviceDiagnostics(deviceDiagnosticsRequest) } + return safeApiCall { molbioResultApi.deviceDiagnostics(deviceDiagnosticsRequest) } } override suspend fun uploadLogs(logFile: MultipartBody.Part): Result { diff --git a/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt index 7fb411f..ced0a6a 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsFragment.kt @@ -1,6 +1,8 @@ package com.example.hpostesting.presentation.diagnostics import android.content.Context +import android.content.Intent +import android.content.IntentFilter import android.content.SharedPreferences import android.os.Bundle import android.util.Log @@ -12,9 +14,10 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.lifecycle.MutableLiveData import com.example.hpostesting.data.Result +import com.example.hpostesting.data.Result.Success 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.AdditionalDetails import com.example.hpostesting.data.model.devicediagnostics.DeviceDiagnosticsRequest import com.example.hpostesting.data.model.diagnostics.DiagnosticsData import com.example.hpostesting.data.model.patient.DeviceData @@ -35,7 +38,10 @@ class DiagnosticsFragment : Fragment() { private var resultData: String = "" private val messages = MutableLiveData() private var startListening = MutableLiveData(false) - + private val batteryStatus: Intent? = + IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter -> + context?.registerReceiver(null, ifilter) + } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, ): View { @@ -65,7 +71,7 @@ class DiagnosticsFragment : Fragment() { val batteryTemperature = diagnosticsViewModel.getBatteryTemperature().toString() val batteryVoltage = context?.let { diagnosticsViewModel.getBatteryVoltage(it).toString() } - val additionalDetails = AdditionalDetails1( + val additionalDetails = AdditionalDetails( batteryLevel = batteryLevel, batteryCapacity = batteryCapacity!!, batteryMaxCapacity = batteryMaxCapacity!!, @@ -76,6 +82,8 @@ class DiagnosticsFragment : Fragment() { DeviceDiagnosticsRequest(additionalDetails = additionalDetails) ) } + + } @@ -99,49 +107,45 @@ 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 -> { -// } -// } -// } + diagnosticsViewModel.deviceDiagnosticsResponse.observe(viewLifecycleOwner) { response -> + when (response) { + is Success -> { + if (response.data.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( @@ -175,6 +179,7 @@ class DiagnosticsFragment : Fragment() { }) } + private fun listenToHemoCube() { val fullReadOutput = StringBuilder() diff --git a/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsViewModel.kt index 031324c..a31f62b 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsViewModel.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/diagnostics/DiagnosticsViewModel.kt @@ -7,9 +7,12 @@ import android.os.BatteryManager import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.example.hpostesting.data.Result import com.example.hpostesting.data.model.Response import com.example.hpostesting.data.model.devicediagnostics.DeviceDiagnosticsRequest import com.example.hpostesting.data.model.devicediagnostics.DeviceDiagnosticsResponse +import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionRequest +import com.example.hpostesting.data.model.deviceprovision.DeviceProvisionResponse import com.example.hpostesting.data.model.diagnostics.DiagnosticsData import com.example.hpostesting.data.model.patient.DeviceData import com.example.hpostesting.data.repository.Repository @@ -18,7 +21,7 @@ import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class DiagnosticsViewModel @Inject constructor( - private val repository: Repository, + private val respository: Repository, context: Context, ) : ViewModel() { var isServiceConnected = false @@ -27,16 +30,15 @@ class DiagnosticsViewModel @Inject constructor( val deviceData = MutableLiveData() val fireBaseUpload = MutableLiveData() - val deviceDiagnosticsResponse = MutableLiveData>() + val deviceDiagnosticsResponse = MutableLiveData>() private val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter -> context.registerReceiver(null, ifilter) } - fun addDiagnosticsDataToDb(data: DiagnosticsData) { viewModelScope.launch { try { - when (val response = repository.addDiagnostics(data)) { + when (val response = respository.addDiagnostics(data)) { is Response.Success -> { // Log.i("Testdb", "Data uploaded to Firestore successfully") fireBaseUpload.postValue("Success") @@ -57,13 +59,12 @@ class DiagnosticsViewModel @Inject constructor( } - -// fun deviceDiagnostics(deviceDiagnosticsRequest: DeviceDiagnosticsRequest) = viewModelScope.launch { -// deviceDiagnosticsResponse.postValue(Result.Loading()) -// repository.deviceDiagnostics(deviceDiagnosticsRequest).let { -// deviceDiagnosticsResponse.postValue(it) -// } -// } + fun deviceDiagnostics(deviceDiagnosticsRequest: DeviceDiagnosticsRequest) = viewModelScope.launch { + deviceDiagnosticsResponse.postValue(Result.Loading()) + respository.deviceDiagnostics(deviceDiagnosticsRequest).let { + deviceDiagnosticsResponse.postValue(it) + } + } fun getBatteryLevel(): Float? { @@ -133,5 +134,4 @@ class DiagnosticsViewModel @Inject constructor( return maxCapacity } - } \ No newline at end of file