From cc11e057d43bd6c0a1352b04200751d6268a134c Mon Sep 17 00:00:00 2001 From: vsuryakumar Date: Mon, 13 Feb 2023 17:01:02 +0530 Subject: [PATCH] Added graph view to the result page. --- .idea/misc.xml | 1 + app/build.gradle | 2 + .../presentation/testRight/GraphFragment.kt | 92 +++++++++++++++++++ .../testRight/TestRightActivity.kt | 6 ++ .../testRight/TestRightResults.kt | 5 + .../drawable/ic_baseline_auto_graph_24.xml | 5 + app/src/main/res/layout/fragment_graph.xml | 22 +++++ .../layout/fragment_test_right_results.xml | 29 +++++- app/src/main/res/values/strings.xml | 1 - 9 files changed, 159 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/example/hpos/presentation/testRight/GraphFragment.kt create mode 100644 app/src/main/res/drawable/ic_baseline_auto_graph_24.xml create mode 100644 app/src/main/res/layout/fragment_graph.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index 6135be8..8ff4f9f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -19,6 +19,7 @@ + diff --git a/app/build.gradle b/app/build.gradle index 5476ac6..aeeef30 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,6 +56,8 @@ dependencies { implementation 'com.opencsv:opencsv:4.6' + // For the Graph + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' // implementation 'androidx.appcompat:appcompat:1.1.0' // implementation "androidx.core:core-ktx:+" // implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" diff --git a/app/src/main/java/com/example/hpos/presentation/testRight/GraphFragment.kt b/app/src/main/java/com/example/hpos/presentation/testRight/GraphFragment.kt new file mode 100644 index 0000000..83198fd --- /dev/null +++ b/app/src/main/java/com/example/hpos/presentation/testRight/GraphFragment.kt @@ -0,0 +1,92 @@ +package com.example.hpos.presentation.testRight + +import android.os.Bundle +import android.util.Log +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.activityViewModels +import com.example.hpos.R +import com.example.hpos.databinding.FragmentGraphBinding +import com.github.mikephil.charting.animation.Easing +import com.github.mikephil.charting.data.Entry +import com.github.mikephil.charting.data.LineData +import com.github.mikephil.charting.data.LineDataSet + +class GraphFragment : Fragment() { + + private lateinit var binding: FragmentGraphBinding + private val viewModel: TestRightViewModel by activityViewModels() + + private val TAG = "GraphFragment" + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + // Inflate the layout for this fragment + binding = FragmentGraphBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + setLineChartData() +// setLineChartDataTest() + } + + private fun setLineChartDataTest() { + val linevalues = ArrayList() + var y = 0.1f + for (each in 350..555) { + linevalues.add(Entry(each.toFloat(), y)) + y += 0.1f + } + for (each in 556..800) { + linevalues.add(Entry(each.toFloat(), y)) + y -= 0.1f + } + + val lineDataSet = LineDataSet(linevalues, "HPOS") + + lineDataSet.mode = LineDataSet.Mode.LINEAR; +// lineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + + lineDataSet.setDrawFilled(true) + lineDataSet.fillColor = resources.getColor(R.color.blue_app) + + val data = LineData(lineDataSet) + binding.getTheGraph.data = data + binding.getTheGraph.invalidate() + } + + private fun setLineChartData() { + val linevalues = ArrayList() + + Log.d(TAG, "SIZE = ${viewModel.wavelengthToAbsorbance.size}") + for (each in viewModel.wavelengthToAbsorbance) { + Log.d(TAG, each[0].toString()) +// if (each[0] in 350.0..751.0) { + linevalues.add(Entry(each[0].toFloat(), each[1].toFloat())) +// } + } + + val lineDataSet = LineDataSet(linevalues, "Wavelength -> Absorbance") + + //We add features to our chart + lineDataSet.color = resources.getColor(R.color.blue_app) + lineDataSet.fillColor = resources.getColor(R.color.blue_app) + lineDataSet.setDrawFilled(true) + lineDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSet.setDrawCircles(false) + + //We connect our data to the UI Screen + val data = LineData(lineDataSet) + binding.getTheGraph.data = data + binding.getTheGraph.setBackgroundColor(resources.getColor(R.color.white)) + binding.getTheGraph.animateXY(1000, 1000, Easing.EaseInCubic) + + binding.getTheGraph.invalidate() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/hpos/presentation/testRight/TestRightActivity.kt b/app/src/main/java/com/example/hpos/presentation/testRight/TestRightActivity.kt index e208e41..ec206c9 100644 --- a/app/src/main/java/com/example/hpos/presentation/testRight/TestRightActivity.kt +++ b/app/src/main/java/com/example/hpos/presentation/testRight/TestRightActivity.kt @@ -110,7 +110,13 @@ class TestRightActivity : AppCompatActivity() { val availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager) if (availableDrivers.isEmpty()) { + // Todo: To Add onErrorReported("No Device is Connected") + + // Todo: To remove +// supportFragmentManager.beginTransaction() +// .replace(binding.flMain.id, GraphFragment()).commit() + } else { mDriver = availableDrivers[0] diff --git a/app/src/main/java/com/example/hpos/presentation/testRight/TestRightResults.kt b/app/src/main/java/com/example/hpos/presentation/testRight/TestRightResults.kt index 62e8748..5930367 100644 --- a/app/src/main/java/com/example/hpos/presentation/testRight/TestRightResults.kt +++ b/app/src/main/java/com/example/hpos/presentation/testRight/TestRightResults.kt @@ -53,6 +53,11 @@ class TestRightResults : Fragment() { binding.ivNext.setOnClickListener { moveToSamplePage() } + binding.ivGraph.setOnClickListener { + parentFragmentManager.beginTransaction() + .replace(R.id.fl_main, GraphFragment()) + .commit() + } } fun moveToSamplePage() { diff --git a/app/src/main/res/drawable/ic_baseline_auto_graph_24.xml b/app/src/main/res/drawable/ic_baseline_auto_graph_24.xml new file mode 100644 index 0000000..98c27da --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_auto_graph_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/fragment_graph.xml b/app/src/main/res/layout/fragment_graph.xml new file mode 100644 index 0000000..3ff8c9e --- /dev/null +++ b/app/src/main/res/layout/fragment_graph.xml @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_test_right_results.xml b/app/src/main/res/layout/fragment_test_right_results.xml index 2a14a9c..94fd864 100644 --- a/app/src/main/res/layout/fragment_test_right_results.xml +++ b/app/src/main/res/layout/fragment_test_right_results.xml @@ -190,7 +190,7 @@ android:layout_marginEnd="16dp" android:src="@drawable/ic_baseline_home_24" app:layout_constraintStart_toStartOf="@id/cv_sample_details" - app:layout_constraintEnd_toStartOf="@id/iv_next" + app:layout_constraintEnd_toStartOf="@id/iv_graph" app:layout_constraintTop_toBottomOf="@id/cv_sample_details" /> + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1c2430a..463bcc2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -33,7 +33,6 @@ Yes, Run - Instructions Step 1 : Place the cuvette containing reference/baseline sample for referencing.