• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<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