From d5553d9a23ea54395bc27b0bf476be6dc6257810 Mon Sep 17 00:00:00 2001 From: mohamedkaif356 Date: Fri, 15 Sep 2023 12:44:54 +0530 Subject: [PATCH] Error resolved --- .../hpostesting/data/dao/HemoCubeDao.kt | 6 +-- .../data/model/patient/HemoCubeTestData.kt | 2 +- .../hpostesting/presentation/MainActivity.kt | 5 ++ .../presentation/dashboard/HomeFragment.kt | 2 +- .../presentation/hemocube/HemoCubeFragment.kt | 44 ++++++++++------ .../hemocube/HemoCubeViewModel.kt | 23 ++++---- .../presentation/hemocube/HemocubeActivity.kt | 52 +++++++++---------- 7 files changed, 73 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/com/example/hpostesting/data/dao/HemoCubeDao.kt b/app/src/main/java/com/example/hpostesting/data/dao/HemoCubeDao.kt index ebcf0de..0449e6f 100644 --- a/app/src/main/java/com/example/hpostesting/data/dao/HemoCubeDao.kt +++ b/app/src/main/java/com/example/hpostesting/data/dao/HemoCubeDao.kt @@ -9,15 +9,15 @@ import com.example.hpostesting.data.model.patient.HemoCubeTestData import com.example.hpostesting.data.model.patient.UserData @Dao interface HemoCubeDao { - @Query("SELECT * from HemocubeTest_table") + @Query("SELECT * from hemo_cube_test_table") fun getAll(): LiveData> @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertAll(hemoCubeTestData: HemoCubeTestData) - @Query("SELECT * FROM hemocubetest_table WHERE _id = :id") + @Query("SELECT * FROM hemo_cube_test_table WHERE _id = :id") suspend fun getUserByID(id: String): HemoCubeTestData - @Query("DELETE FROM hemocubetest_table WHERE _id = :id") + @Query("DELETE FROM hemo_cube_test_table WHERE _id = :id") suspend fun deleteById(id: String) } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt b/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt index 97e2953..5eb21d9 100644 --- a/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt +++ b/app/src/main/java/com/example/hpostesting/data/model/patient/HemoCubeTestData.kt @@ -3,7 +3,7 @@ package com.example.hpostesting.data.model.patient import androidx.room.Entity import androidx.room.PrimaryKey -@Entity(tableName = "HemocubeTest_table") +@Entity(tableName = "hemo_cube_test_table") data class HemoCubeTestData( @PrimaryKey var _id: String = "", diff --git a/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt index bf45bf6..d578725 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt @@ -86,6 +86,11 @@ class MainActivity : AppCompatActivity() { } } + if (DataHolder.selectedTest == null) { + startActivity(Intent(this, DashboardActivity::class.java)) + finish() + } + // val crashButton = Button(this) // crashButton.text = "Test Crash" diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt index 0e0419f..a7a2c19 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt @@ -263,7 +263,7 @@ class HomeFragment : Fragment() { private fun deleteHemoCubeIncompleteRegistrations(userDataList: List) { userDataList.forEach { userData -> - if (userData.testTime?.isEmpty() == false) { + if (userData.testTime?.isEmpty() == true) { hemoCubeViewModel.deleteById(userData._id) } } diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt index c1c7687..202c460 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeFragment.kt @@ -4,7 +4,6 @@ import android.content.Context import android.content.Intent import android.content.SharedPreferences import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -29,8 +28,6 @@ import com.google.firebase.ktx.Firebase import `in`.sminnovations.hpostesting.BuildConfig import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.FragmentHemoCubeReferenceBinding -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Delay import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -86,7 +83,8 @@ class HemoCubeFragment : Fragment() { binding.btnKit.setOnClickListener { if (isTestOngoing) { val title = "WARNING" - val message = "There is a on going test, do you want to stop it. if Yes please disconnect the device and connect it again, once you reached to kitDetails Screen" + val message = + "There is a on going test, do you want to stop it. if Yes please disconnect the device and connect it again, once you reached to kitDetails Screen" val negativeText = getString(R.string.no) val positiveText = "Yes" @@ -174,7 +172,13 @@ class HemoCubeFragment : Fragment() { lifecycleScope.launch { delay(1000) if (binding.tvSubtitle4.text.toString().isEmpty()) { - showError() + (activity as HemocubeActivity).reconnectDevice() + if (isBufferValueAvailable()) { + showBufferAlertDialog() + } else { + listenToHemoCube() + startBufferProcess() + } } } } @@ -252,7 +256,7 @@ class HemoCubeFragment : Fragment() { hemoCubeViewModel.progressBar.postValue(false) } }) - }catch (e: Exception) { + } catch (e: Exception) { showToast("test is going on") } } @@ -297,7 +301,6 @@ class HemoCubeFragment : Fragment() { } - private fun showError() { activity?.runOnUiThread { UIUtils.createAlertDialog(requireContext(), @@ -399,15 +402,15 @@ class HemoCubeFragment : Fragment() { val led1Average = log10(led1BufferForDevice?.div(led1Sample!!) ?: 0.0) val led2Average = log10(led2BufferForDevice?.div(led2Sample!!) ?: 0.0) val deviceRatio = led1Average / led2Average - if (led1BufferForDevice!! > 20000 && led1BufferForDevice < 24000 && led2BufferForDevice!! > 20000 && led2BufferForDevice < 24000) { - if (led1Sample!! < led1BufferForDevice && led1Sample < 24000 && led2Sample!! < led2BufferForDevice && led2Sample < 24000) { - if (deviceRatio < 0.08) { - if (deviceRatio > 1.07) { - - } - } - } - } +// if (led1BufferForDevice!! > 20000 && led1BufferForDevice < 24000 && led2BufferForDevice!! > 20000 && led2BufferForDevice < 24000) { +// if (led1Sample!! < led1BufferForDevice && led1Sample < 24000 && led2Sample!! < led2BufferForDevice && led2Sample < 24000) { +// if (deviceRatio < 0.08) { +// if (deviceRatio > 1.07) { +// +// } +// } +// } +// } DataHolder.hemoCubeTestData?.apply { deviceId = deviceSerialNo led1Buffer = led1BufferForDevice @@ -427,6 +430,9 @@ class HemoCubeFragment : Fragment() { apply() } } + activity?.runOnUiThread { + binding.progressBar.visibility = View.VISIBLE + } hemoCubeViewModel.uploadHemoCubeResultToDatabase( isOnline, true, sharedPreferences.getString(Constants.KIT_NUMBER, "") ) @@ -434,7 +440,11 @@ class HemoCubeFragment : Fragment() { } } catch (_: Exception) { - Toast.makeText( requireContext(), "Error while processing device data", Toast.LENGTH_SHORT).show() + Toast.makeText( + requireContext(), + "Error while processing device data", + Toast.LENGTH_SHORT + ).show() } } diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt index da10ad6..75c5d4d 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt @@ -14,7 +14,6 @@ import com.example.hpostesting.data.dao.HemoCubeDao import com.example.hpostesting.data.model.Response 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 dagger.hilt.android.lifecycle.HiltViewModel @@ -34,7 +33,8 @@ class HemoCubeViewModel @Inject constructor( val progressBar = MutableLiveData(false) val testDetails = DataHolder.selectedTest?.toHemoCubeTestData() val messages = MutableLiveData() - private val sharedPreference: SharedPreferences = context.getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE) + 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) @@ -53,8 +53,10 @@ class HemoCubeViewModel @Inject constructor( try { if (isOnline) { + parseData() addResultTestToDb() } else { + parseData() testDetails?.testTime = SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.getDefault() ).format(Calendar.getInstance().time) @@ -70,7 +72,7 @@ class HemoCubeViewModel @Inject constructor( deviceData.postValue(deviceId?.let { repository.getDeviceDataById(it) }) } - private fun addResultTestToDb() { + private fun parseData() { testDetails?.deviceRatio = DataHolder.hemocubeResult testDetails?.resultData = DataHolder.hemoCubeTestData?.resultData.toString() testDetails?.location = DataHolder.location @@ -79,7 +81,8 @@ class HemoCubeViewModel @Inject constructor( ).format(Calendar.getInstance().time) testDetails?.appVersion = DataHolder.hemoCubeTestData?.appVersion testDetails?.deviceId = DataHolder.hemoCubeTestData?.deviceId - testDetails?.deviceSerialNumber = sharedPreference.getString(Constants.USER_ID, "").toString() + 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 @@ -89,7 +92,9 @@ class HemoCubeViewModel @Inject constructor( testDetails?.led2Average = DataHolder.hemoCubeTestData?.led2Average testDetails?.deviceRatio = DataHolder.hemoCubeTestData?.deviceRatio testDetails?.calculatedRatio = DataHolder.hemoCubeTestData?.calculatedRatio + } + private fun addResultTestToDb() { viewModelScope.launch { try { testDetails!!.reportUploadTime = SimpleDateFormat( @@ -100,7 +105,7 @@ class HemoCubeViewModel @Inject constructor( is Response.Success -> { val kitCount = sharedPreference.getInt(Constants.KIT_COUNT, 0) with(sharedPreference.edit()) { - putInt(Constants.KIT_COUNT, kitCount.plus(1) ?: 0) + putInt(Constants.KIT_COUNT, kitCount.plus(1)) apply() } Log.i("Testdb", "Data uploaded to Firestore successfully") @@ -108,14 +113,9 @@ class HemoCubeViewModel @Inject constructor( } is Response.Error -> { - Log.e("Testdb", "Error uploading data to Firestore: ${response}") + Log.e("Testdb", "Error uploading data to Firestore: $response") fireBaseUpload.postValue("Error") } - - else -> { - Log.e("Testdb", "Unknown response from repository: $response") - fireBaseUpload.postValue("Unknown") - } } } catch (e: Exception) { Log.e("Testdb", "Exception during data upload: ${e.message}") @@ -132,6 +132,7 @@ class HemoCubeViewModel @Inject constructor( when (repository.addTestToDatabase(userData)) { is Response.Success -> { fireBaseUpload.postValue("Success") + deleteById(userData._id) } else -> {} diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt index e28cd13..fcc4110 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemocubeActivity.kt @@ -3,7 +3,6 @@ package com.example.hpostesting.presentation.hemocube import android.app.PendingIntent import android.content.BroadcastReceiver import android.content.ComponentName -import android.content.ContentValues.TAG import android.content.Context import android.content.Intent import android.content.IntentFilter @@ -11,32 +10,26 @@ import android.content.ServiceConnection import android.hardware.usb.UsbDevice import android.hardware.usb.UsbDeviceConnection import android.hardware.usb.UsbManager -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.os.IBinder import android.util.Log import android.view.Menu import android.widget.Toast import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.view.get import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.constant.Constants -import com.example.hpostesting.presentation.testRight.TestRightExpReference -import com.example.hpostesting.presentation.testRight.TestRightExpSample -import com.example.hpostesting.presentation.testRight.TestRightViewModel import com.example.hpostesting.presentation.testRight.UsbService -import com.google.android.gms.location.FusedLocationProviderClient -import com.google.android.gms.location.LocationCallback import com.hoho.android.usbserial.driver.UsbSerialDriver import com.hoho.android.usbserial.driver.UsbSerialProber import dagger.hilt.android.AndroidEntryPoint import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.ActivityHemocubeBinding -import `in`.sminnovations.hpostesting.databinding.ActivityMainBinding @AndroidEntryPoint -class HemocubeActivity : AppCompatActivity() { +open class HemocubeActivity : AppCompatActivity() { private lateinit var binding: ActivityHemocubeBinding private val viewModel by viewModels() private var myMenu: Menu? = null @@ -91,18 +84,20 @@ class HemocubeActivity : AppCompatActivity() { } private fun setupListener() { - DataHolder.usbConnected.observe(this){ + DataHolder.usbConnected.observe(this) { Log.d("USB OBSERVE", "HemoCube called -> $it") - if (it){ - myMenu?.get(0)?.icon = ContextCompat.getDrawable(this, R.drawable.ic_baseline_usb_24) + if (it) { + myMenu?.get(0)?.icon = + ContextCompat.getDrawable(this, R.drawable.ic_baseline_usb_24) } else { - myMenu?.get(0)?.icon = ContextCompat.getDrawable(this, R.drawable.ic_baseline_usb_off_24) + myMenu?.get(0)?.icon = + ContextCompat.getDrawable(this, R.drawable.ic_baseline_usb_off_24) Toast.makeText(this, "Device is Disconnected", Toast.LENGTH_SHORT).show() } } } - private fun connectUsb(permissionGranted: Boolean) { + open fun connectUsb(permissionGranted: Boolean) { Log.d(TAG, "connectUsb() called, permission variable = $permissionGranted") val manager = getSystemService(Context.USB_SERVICE) as UsbManager val availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager) @@ -126,10 +121,7 @@ class HemocubeActivity : AppCompatActivity() { val mPendingIntent: PendingIntent if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { mPendingIntent = PendingIntent.getBroadcast( - this, - 0, - Intent(Constants.HOMOCUBE_USB_PERMISSION), - PendingIntent.FLAG_MUTABLE + this, 0, Intent(Constants.HOMOCUBE_USB_PERMISSION), PendingIntent.FLAG_MUTABLE ) } else { mPendingIntent = PendingIntent.getBroadcast( @@ -145,20 +137,24 @@ class HemocubeActivity : AppCompatActivity() { manager.requestPermission(device, mPendingIntent) } - private fun setupService() { + fun setupService() { val intent = Intent(this, UsbService::class.java) -// startService(intent) bindService(intent, connection, Context.BIND_AUTO_CREATE) } - private fun moveToNext() { - if (supportFragmentManager.isDestroyed) - return - - supportFragmentManager.beginTransaction() - .replace(binding.fghemocube.id, HemoCubeFragment()).commit() + open fun reconnectDevice() { + mService.disconnect() + unbindService(connection) + viewModel.isServiceConnected = false + connectUsb(true) } + private fun moveToNext() { + if (supportFragmentManager.isDestroyed) return + + supportFragmentManager.beginTransaction().replace(binding.fghemocube.id, HemoCubeFragment()) + .commit() + } override fun onBackPressed() { @@ -173,14 +169,14 @@ class HemocubeActivity : AppCompatActivity() { fun onErrorReported(msg: String) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show() - if (!isFinishing) - onBackPressed() + if (!isFinishing) onBackPressed() } override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.my_menu, menu) return true } + override fun onDestroy() { super.onDestroy() if (viewModel.isServiceConnected) {