From 61e5fbf4a193207f1f06b7f7f99fa0861a3545e4 Mon Sep 17 00:00:00 2001 From: "smileomi18@gmail.com" Date: Wed, 13 Sep 2023 20:06:49 +0530 Subject: [PATCH] production Issues resolved --- app/build.gradle | 14 +-- .../hpostesting/presentation/MainActivity.kt | 12 ++- .../dashboard/DashboardActivity.kt | 9 +- .../presentation/dashboard/HomeFragment.kt | 4 +- .../presentation/hemocube/HemoCubeFragment.kt | 98 ++++++++++++++----- .../presentation/hemocube/HemocubeActivity.kt | 12 +++ 6 files changed, 116 insertions(+), 33 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0bdbb66..1bca890 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,11 +52,11 @@ android { dependencies { - implementation 'androidx.core:core-ktx:1.10.1' + implementation 'androidx.core:core-ktx:1.12.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.9.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1' + implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.2' //firebase implementation platform('com.google.firebase:firebase-bom:32.1.0') @@ -66,18 +66,18 @@ dependencies { implementation 'com.google.firebase:firebase-auth-ktx' implementation 'com.google.firebase:firebase-storage-ktx' implementation 'com.firebaseui:firebase-ui-firestore:8.0.2' - implementation 'com.google.android.gms:play-services-auth:20.6.0' + implementation 'com.google.android.gms:play-services-auth:20.7.0' implementation 'com.google.android.gms:play-services-location:21.0.1' implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' implementation 'com.google.android.things:androidthings:1.0' - + implementation("com.google.firebase:firebase-appdistribution-api-ktx:16.0.0-beta10") // Testing testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2" implementation 'com.opencsv:opencsv:4.6' implementation 'com.github.mik3y:usb-serial-for-android:3.5.1' @@ -102,8 +102,8 @@ dependencies { annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2' // Navigation Component - implementation "androidx.navigation:navigation-fragment-ktx:2.7.1" - implementation "androidx.navigation:navigation-ui-ktx:2.7.1" + implementation "androidx.navigation:navigation-fragment-ktx:2.7.2" + implementation "androidx.navigation:navigation-ui-ktx:2.7.2" //Dagger - Hilt implementation "com.google.dagger:hilt-android:2.46" 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 e99a541..bf45bf6 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/MainActivity.kt @@ -20,6 +20,7 @@ import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.constant.Constants import com.example.hpostesting.data.model.patient.UserData import com.example.hpostesting.data.model.test.TestType +import com.example.hpostesting.presentation.dashboard.DashboardActivity import com.google.android.gms.location.* import com.google.android.material.snackbar.Snackbar import com.google.firebase.crashlytics.FirebaseCrashlytics @@ -161,12 +162,14 @@ class MainActivity : AppCompatActivity() { DataHolder.selectedTestType = TestType.SICKLECERT val i = Intent(applicationContext, KitScanActivity::class.java) startActivity(i) + finish() } binding.cvItem2.setOnClickListener { DataHolder.selectedTestType = TestType.SICKLEFIND val i = Intent(applicationContext, KitScanActivity::class.java) startActivity(i) + finish() } DataHolder.usbConnected.observe(this) { @@ -252,8 +255,13 @@ class MainActivity : AppCompatActivity() { fusedLocationClient.lastLocation.addOnSuccessListener { location: Location? -> location?.let { - DataHolder.selectedTest!!.location = - UserData.Location(location.latitude, location.longitude) + if (DataHolder.selectedTest != null) { + DataHolder.selectedTest!!.location = + UserData.Location(location.latitude, location.longitude) + } else { + startActivity(Intent(this, DashboardActivity::class.java)) + finish() + } DataHolder.location = UserData.Location(location.latitude, location.longitude) } ?: run { diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt index cdd7d10..7193a4e 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt @@ -10,6 +10,9 @@ import androidx.navigation.ui.navigateUp import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupWithNavController import com.google.android.material.navigation.NavigationView +import com.google.firebase.appdistribution.InterruptionLevel +import com.google.firebase.appdistribution.ktx.appDistribution +import com.google.firebase.ktx.Firebase import dagger.hilt.android.AndroidEntryPoint import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.ActivityDashboardBinding @@ -25,7 +28,11 @@ class DashboardActivity : AppCompatActivity() { binding = ActivityDashboardBinding.inflate(layoutInflater) setContentView(binding.root) - + Firebase.appDistribution.showFeedbackNotification( + "Download", + // The level of interruption for the notification + InterruptionLevel.HIGH) + Firebase.appDistribution.startFeedback("Download Hpos App") setSupportActionBar(binding.appBarDashboard.toolbar) val drawerLayout: DrawerLayout = binding.drawerLayout 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 7d96324..0e0419f 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 @@ -99,7 +99,7 @@ class HomeFragment : Fragment() { } } private fun loadUserData() { - val query = Firebase.firestore.collection("patientData").whereEqualTo("testStatus", false).orderBy("createdAt", Query.Direction.DESCENDING) + val query = Firebase.firestore.collection("patientData").whereEqualTo("testStatus", false) query.get().addOnSuccessListener { if (it.documents.isEmpty()) { binding.pendingTest.visibility = View.VISIBLE @@ -163,8 +163,10 @@ class HomeFragment : Fragment() { binding.aadharIdRadioButton.isChecked -> "aadharId" else -> null } + field?.let { getData(query, it) } false + } else { loadUserData() false 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 a58c53d..b325029 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,12 +4,14 @@ 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 import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.lifecycleScope import com.example.hpostesting.data.DataHolder import com.example.hpostesting.data.constant.Constants @@ -27,7 +29,10 @@ 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 import kotlinx.coroutines.tasks.await import kotlinx.coroutines.withContext @@ -43,7 +48,7 @@ class HemoCubeFragment : Fragment() { private var resultData: String = "" private var isUsingExistingBuffer = false private var isTestOngoing = false - private var bloodGroup: String = "" + private var startListening = MutableLiveData(false) override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { @@ -81,7 +86,7 @@ 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" + 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" @@ -155,8 +160,6 @@ class HemoCubeFragment : Fragment() { hemoCubeViewModel.deviceData.observe(viewLifecycleOwner) { currentDeviceData = it - showToast(calculateRatio(0.17).toString()) - } hemoCubeViewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable -> @@ -165,6 +168,18 @@ class HemoCubeFragment : Fragment() { hemoCubeViewModel.messages.observe(viewLifecycleOwner) { binding.tvSubtitle4.text = it + + Log.d("Text",binding.tvSubtitle4.text.toString()) + } + startListening.observe(viewLifecycleOwner) { + if (it) { + lifecycleScope.launch { + delay(1000) + if (binding.tvSubtitle4.text.toString().isEmpty()) { + showError() + } + } + } } } @@ -223,19 +238,25 @@ class HemoCubeFragment : Fragment() { hemoCubeViewModel.progressBar.postValue(true) val fullReadOutput = StringBuilder() - (activity as HemocubeActivity).mService.listenToHemoCube(object : UsbServiceListener { - override fun onUsbRead(data: ByteArray?) { - data?.let { - val stringData = String(it) - fullReadOutput.append(stringData) - handleUsbData(stringData, fullReadOutput) - } - } + startListening.postValue(true) - override fun onUsbError(e: Exception?) { - hemoCubeViewModel.progressBar.postValue(false) - } - }) + try { + (activity as HemocubeActivity).mService.listenToHemoCube(object : UsbServiceListener { + override fun onUsbRead(data: ByteArray?) { + data?.let { + val stringData = String(it) + fullReadOutput.append(stringData) + handleUsbData(stringData, fullReadOutput) + } + } + + override fun onUsbError(e: Exception?) { + hemoCubeViewModel.progressBar.postValue(false) + } + }) + }catch (e: Exception) { + showToast("test is going on") + } } private fun handleUsbData(stringData: String, fullReadOutput: StringBuilder) { @@ -277,6 +298,26 @@ class HemoCubeFragment : Fragment() { } } + + + private fun showError() { + activity?.runOnUiThread { + UIUtils.createAlertDialog(requireContext(), + "Device Error", + "Something is wrong with the device, please disconnect and reconnect the device and test the user again", + getString(R.string.noo), + "Yes", + object : MyDialogListener { + override fun onClickNegativeButton() {} + + override fun onClickPositiveButton() { + startActivity(Intent(requireActivity(), DashboardActivity::class.java)) + } + }) + } + } + + private fun showError500Dialog() { UIUtils.createAlertDialog(requireContext(), "BUFFER ERROR", @@ -293,6 +334,19 @@ class HemoCubeFragment : Fragment() { }) } + fun handleBackButtonPress() { + if (isTestOngoing) { + // If the test is ongoing, don't allow the back button action + // You can optionally show a message to the user indicating why the back button is disabled + // For example, show a Toast or Snackbar. + showToast("Test is ongoing. Cannot go back.") + } else { + // If the test is not ongoing, you can trigger the back action of the hosting activity + activity?.onBackPressed() + } + } + + private fun showError501Dialog() { UIUtils.createAlertDialog(requireContext(), "SAMPLE ERROR", @@ -366,7 +420,7 @@ class HemoCubeFragment : Fragment() { this.led1Average = led1Average this.led2Average = led2Average this.deviceRatio = deviceRatio - this.calculatedRatio = calculateRatio(deviceRatio) +// this.calculatedRatio = calculateRatio(deviceRatio) this.resultData = fullReadOutput if (!isBufferValueAvailable()) { with(sharedPreferences.edit()) { @@ -430,11 +484,11 @@ class HemoCubeFragment : Fragment() { }) } - private fun calculateRatio(ratio: Double): Double { - val coefficient1 = currentDeviceData?.coefficients?.get(0) ?: 0.0 - val coefficient2 = currentDeviceData?.coefficients?.get(1) ?: 0.0 - return coefficient1 * ratio + coefficient2 - } +// private fun calculateRatio(ratio: Double): Double { +// val coefficient1 = currentDeviceData?.coefficients?.get(0) ?: 0.0 +// val coefficient2 = currentDeviceData?.coefficients?.get(1) ?: 0.0 +// return coefficient1 * ratio + coefficient2 +// } private fun parseResult(frames: List): String { val lines = mutableListOf() 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 6bb9efb..e28cd13 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 @@ -159,6 +159,18 @@ class HemocubeActivity : AppCompatActivity() { .replace(binding.fghemocube.id, HemoCubeFragment()).commit() } + + + override fun onBackPressed() { + val fragment = supportFragmentManager.findFragmentById(R.id.fghemocube) + if (fragment is HemoCubeFragment) { + fragment.handleBackButtonPress() + } else { + super.onBackPressed() + } + } + + fun onErrorReported(msg: String) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show() if (!isFinishing)