<lambda>null1 package com.android.healthconnect.testapps.toolbox
2
3 import android.health.connect.HealthConnectManager
4 import android.os.Bundle
5 import android.view.LayoutInflater
6 import android.view.View
7 import android.view.ViewGroup
8 import android.widget.Toast
9 import androidx.appcompat.app.AlertDialog
10 import androidx.fragment.app.Fragment
11 import com.android.healthconnect.testapps.toolbox.seed.SeedData
12 import com.android.healthconnect.testapps.toolbox.ui.PerformanceTestingLinearLayout
13 import com.android.healthconnect.testapps.toolbox.utils.LoadingDialog
14 import com.android.healthconnect.testapps.toolbox.viewmodels.PerformanceTestingViewModel
15 import com.android.healthconnect.testapps.toolbox.viewmodels.PerformanceTestingViewModel.PerformanceInsertedRecordsState
16 import com.android.healthconnect.testapps.toolbox.viewmodels.PerformanceTestingViewModel.PerformanceReadRecordsState
17
18 class PerformanceTesting(private val performanceTestingViewModel: PerformanceTestingViewModel) :
19 Fragment() {
20
21 private lateinit var manager: HealthConnectManager
22 private lateinit var seedDataClass: SeedData
23 private lateinit var loadingDialog: LoadingDialog
24
25 override fun onCreateView(
26 inflater: LayoutInflater,
27 container: ViewGroup?,
28 savedInstanceState: Bundle?,
29 ): View? {
30 manager = requireContext().getSystemService(HealthConnectManager::class.java)!!
31 seedDataClass = SeedData(requireContext(), manager)
32 loadingDialog = LoadingDialog(requireContext())
33
34 performanceTestingViewModel.performanceInsertedRecordsState.observe(this) { state ->
35 loadingDialog.dismissDialog()
36 when (state) {
37 is PerformanceInsertedRecordsState.Error -> {
38 Toast.makeText(
39 context,
40 "Unable to seed data: ${state.errorMessage}",
41 Toast.LENGTH_SHORT)
42 .show()
43 }
44 is PerformanceInsertedRecordsState.Success -> {
45 Toast.makeText(
46 context, "Successfully inserted Heart Rate Records", Toast.LENGTH_SHORT)
47 .show()
48 }
49 is PerformanceInsertedRecordsState.BeginInserting -> {
50 insertRecordsForPerformanceTesting(state.seedDataInParallel)
51 }
52 is PerformanceInsertedRecordsState.InsertingOverSpanOfTime -> {
53 Toast.makeText(
54 context,
55 "Each batch will be inserted after ${state.timeDifferenceBetweenEachBatchInsert / 1000} seconds",
56 Toast.LENGTH_SHORT)
57 .show()
58 }
59 }
60 }
61
62 performanceTestingViewModel.performanceReadRecordsState.observe(this) { state ->
63 loadingDialog.dismissDialog()
64 when (state) {
65 is PerformanceReadRecordsState.Error -> {
66 Toast.makeText(
67 context,
68 "Unable to read data: ${state.errorMessage}",
69 Toast.LENGTH_SHORT)
70 .show()
71 }
72 is PerformanceReadRecordsState.Success -> {
73 Toast.makeText(
74 context, "Successfully read Heart Rate Records", Toast.LENGTH_SHORT)
75 .show()
76 }
77 is PerformanceReadRecordsState.BeginReading -> {
78 readRecordsForPerformanceTesting()
79 }
80 is PerformanceReadRecordsState.ReadingOverSpanOfTime -> {
81 Toast.makeText(
82 context,
83 "Each batch will be read after ${state.timeDifferenceBetweenEachBatchInsert / 1000} seconds",
84 Toast.LENGTH_SHORT)
85 .show()
86 }
87 }
88 }
89 return super.onCreateView(inflater, container, savedInstanceState)
90 }
91
92 private fun insertRecordsForPerformanceTesting(ignoreForNow: Boolean) {
93
94 val builder: AlertDialog.Builder = AlertDialog.Builder(requireContext())
95 val performanceTestingLinearLayout = PerformanceTestingLinearLayout(requireContext())
96
97 builder.setTitle("Enter performance testing values")
98 builder.setView(performanceTestingLinearLayout)
99 builder.setPositiveButton(android.R.string.ok) { dialog, _ ->
100 val performanceData = performanceTestingLinearLayout.getPerformanceData()
101
102 if (!performanceData.isDataValid) {
103 Toast.makeText(requireContext(), "Please enter valid data", Toast.LENGTH_SHORT)
104 .show()
105 return@setPositiveButton
106 }
107
108 if (performanceData.spanOverTime) {
109 performanceTestingViewModel.insertRecordsForPerformanceTestingOverASpanOfTime(
110 performanceData.numberOfBatches,
111 performanceData.numberOfRecordsPerBatch,
112 performanceData.numberOfMinutes,
113 seedDataClass)
114 } else {
115 performanceTestingViewModel.insertRecordsForPerformanceTesting(
116 performanceData.numberOfBatches,
117 performanceData.numberOfRecordsPerBatch,
118 seedDataClass)
119 (dialog as AlertDialog).setOnDismissListener { loadingDialog.showDialog() }
120 }
121 dialog.dismiss()
122 }
123 val alertDialog: AlertDialog = builder.create()
124 alertDialog.show()
125 }
126
127 private fun readRecordsForPerformanceTesting() {
128 val builder: AlertDialog.Builder = AlertDialog.Builder(requireContext())
129 val performanceTestingLinearLayout = PerformanceTestingLinearLayout(requireContext())
130 builder.setTitle("Enter performance testing values")
131 builder.setView(performanceTestingLinearLayout)
132 builder.setPositiveButton(android.R.string.ok) { dialog, _ ->
133 val performanceData = performanceTestingLinearLayout.getPerformanceData()
134
135 if (!performanceData.isDataValid) {
136 Toast.makeText(requireContext(), "Please enter valid data", Toast.LENGTH_SHORT)
137 .show()
138 return@setPositiveButton
139 }
140
141 if (performanceData.spanOverTime) {
142 performanceTestingViewModel.readRecordsForPerformanceTestingOverASpanOfTime(
143 performanceData.numberOfBatches,
144 performanceData.numberOfRecordsPerBatch,
145 performanceData.numberOfMinutes,
146 manager)
147 } else {
148 performanceTestingViewModel.readRecordsForPerformanceTesting(
149 performanceData.numberOfBatches,
150 performanceData.numberOfRecordsPerBatch,
151 manager)
152 (dialog as AlertDialog).setOnDismissListener { loadingDialog.showDialog() }
153 }
154 dialog.dismiss()
155 }
156 val alertDialog: AlertDialog = builder.create()
157 alertDialog.show()
158 }
159 }
160