• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.healthconnect.controller.utils.logging
17 
18 import androidx.annotation.VisibleForTesting
19 import com.android.healthconnect.controller.HealthFitnessUiStatsLog.*
20 import com.android.healthfitness.flags.Flags.personalHealthRecordUiTelemetry
21 import dagger.hilt.EntryPoint
22 import dagger.hilt.InstallIn
23 import dagger.hilt.components.SingletonComponent
24 import javax.inject.Inject
25 import javax.inject.Singleton
26 
27 /** Helper class for logging UI Impressions and Interactions. */
28 @Singleton
29 class HealthConnectLogger @Inject constructor() {
30 
31     companion object {
32         private val phrElements =
33             setOf(
34                 OnboardingElement.ONBOARDING_MESSAGE_WITH_PHR,
35                 HomePageElement.BROWSE_HEALTH_RECORDS_BUTTON,
36                 CombinedAppAccessElement.FITNESS_PERMISSIONS_BUTTON,
37                 CombinedAppAccessElement.MEDICAL_PERMISSIONS_BUTTON,
38                 CombinedAppAccessElement.REMOVE_ALL_PERMISSIONS_BUTTON,
39                 HomePageElement.LOCK_SCREEN_BANNER,
40                 HomePageElement.LOCK_SCREEN_BANNER_BUTTON,
41                 HomePageElement.LOCK_SCREEN_BANNER_DISMISS_BUTTON,
42                 RawFhirPageElement.RAW_FHIR_RESOURCE,
43                 MedicalWritePermissionPageElement.ALLOW_WRITE_HEALTH_RECORDS_BUTTON,
44                 MedicalWritePermissionPageElement.CANCEL_WRITE_HEALTH_RECORDS_BUTTON,
45             )
46     }
47 
48     private var pageName = PageName.UNKNOWN_PAGE
49 
50     /**
51      * Sets the page ID which will be used for all impressions and interaction logging on this page.
52      */
setPageIdnull53     fun setPageId(pageName: PageName) {
54         if (isGuardedByPhrFlag(pageName)) {
55             return
56         }
57         this.pageName = pageName
58     }
59 
getPageIdnull60     @VisibleForTesting fun getPageId(): PageName = pageName
61 
62     /** Logs the impression of a page. */
63     fun logPageImpression() {
64         write(HEALTH_CONNECT_UI_IMPRESSION, pageName.impressionId)
65     }
66 
67     /** Logs the impression of an element. */
logImpressionnull68     fun logImpression(element: ElementName) {
69         if (isGuardedByPhrFlag(element)) {
70             return
71         }
72         write(HEALTH_CONNECT_UI_IMPRESSION, pageName.impressionId, element.impressionId)
73     }
74 
75     /** Logs the interaction with an element. */
logInteractionnull76     fun logInteraction(element: ElementName, action: UIAction = UIAction.ACTION_CLICK) {
77         if (isGuardedByPhrFlag(element)) {
78             return
79         }
80         write(
81             HEALTH_CONNECT_UI_INTERACTION,
82             pageName.interactionId,
83             element.interactionId,
84             action.id,
85         )
86     }
87 
isGuardedByPhrFlagnull88     private fun isGuardedByPhrFlag(pageName: PageName) =
89         pageName.isPhrPage() && !personalHealthRecordUiTelemetry()
90 
91     private fun isGuardedByPhrFlag(elementName: ElementName): Boolean {
92         return phrElements.contains(elementName) && !personalHealthRecordUiTelemetry()
93     }
94 }
95 
96 /** Enum class for UI Actions, used to specify whether we wish to log a click or a toggle. */
97 enum class UIAction(val id: Int) {
98     ACTION_CLICK(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_CLICK),
99     ACTION_TOGGLE_ON(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_TOGGLE_ON),
100     ACTION_TOGGLE_OFF(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_TOGGLE_OFF),
101     ACTION_UNKNOWN(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_UNKNOWN),
102 }
103 
104 /** Enum class for PageName. Each loggable fragment in the application should define a page name. */
105 enum class PageName(val impressionId: Int, val interactionId: Int) {
106     HOME_PAGE(
107         HEALTH_CONNECT_UI_IMPRESSION__PAGE__HOME_PAGE,
108         HEALTH_CONNECT_UI_INTERACTION__PAGE__HOME_PAGE,
109     ),
110     ONBOARDING_PAGE(
111         HEALTH_CONNECT_UI_IMPRESSION__PAGE__ONBOARDING_PAGE,
112         HEALTH_CONNECT_UI_INTERACTION__PAGE__ONBOARDING_PAGE,
113     ),
114     RECENT_ACCESS_PAGE(
115         HEALTH_CONNECT_UI_IMPRESSION__PAGE__RECENT_ACCESS_PAGE,
116         HEALTH_CONNECT_UI_INTERACTION__PAGE__RECENT_ACCESS_PAGE,
117     ),
118     APP_PERMISSIONS_PAGE(
119         HEALTH_CONNECT_UI_IMPRESSION__PAGE__APP_PERMISSIONS_PAGE,
120         HEALTH_CONNECT_UI_INTERACTION__PAGE__APP_PERMISSIONS_PAGE,
121     ),
122     // TODO (b/270965648) not needed
123     APP_PERMISSIONS_EMPTY_STATE_PAGE(
124         HEALTH_CONNECT_UI_IMPRESSION__PAGE__APP_PERMISSIONS_EMPTY_STATE_PAGE,
125         HEALTH_CONNECT_UI_INTERACTION__PAGE__APP_PERMISSIONS_EMPTY_STATE_PAGE,
126     ),
127     HELP_AND_FEEDBACK_PAGE(
128         HEALTH_CONNECT_UI_IMPRESSION__PAGE__HELP_AND_FEEDBACK_PAGE,
129         HEALTH_CONNECT_UI_INTERACTION__PAGE__HELP_AND_FEEDBACK_PAGE,
130     ),
131     CATEGORIES_PAGE(
132         HEALTH_CONNECT_UI_IMPRESSION__PAGE__CATEGORIES_PAGE,
133         HEALTH_CONNECT_UI_INTERACTION__PAGE__CATEGORIES_PAGE,
134     ),
135     AUTO_DELETE_PAGE(
136         HEALTH_CONNECT_UI_IMPRESSION__PAGE__AUTO_DELETE_PAGE,
137         HEALTH_CONNECT_UI_INTERACTION__PAGE__AUTO_DELETE_PAGE,
138     ),
139     PERMISSION_TYPES_PAGE(
140         HEALTH_CONNECT_UI_IMPRESSION__PAGE__PERMISSION_TYPES_PAGE,
141         HEALTH_CONNECT_UI_INTERACTION__PAGE__PERMISSION_TYPES_PAGE,
142     ),
143     DATA_ACCESS_PAGE(
144         HEALTH_CONNECT_UI_IMPRESSION__PAGE__DATA_ACCESS_PAGE,
145         HEALTH_CONNECT_UI_INTERACTION__PAGE__DATA_ACCESS_PAGE,
146     ),
147     DATA_ENTRIES_PAGE(
148         HEALTH_CONNECT_UI_IMPRESSION__PAGE__DATA_ENTRIES_PAGE,
149         HEALTH_CONNECT_UI_INTERACTION__PAGE__DATA_ENTRIES_PAGE,
150     ),
151     ENTRY_DETAILS_PAGE(
152         HEALTH_CONNECT_UI_IMPRESSION__PAGE__ENTRY_DETAILS_PAGE,
153         HEALTH_CONNECT_UI_INTERACTION__PAGE__ENTRY_DETAILS_PAGE,
154     ),
155     APP_ACCESS_PAGE(
156         HEALTH_CONNECT_UI_IMPRESSION__PAGE__APP_ACCESS_PAGE,
157         HEALTH_CONNECT_UI_INTERACTION__PAGE__APP_ACCESS_PAGE,
158     ),
159     UNITS_PAGE(
160         HEALTH_CONNECT_UI_IMPRESSION__PAGE__UNITS_PAGE,
161         HEALTH_CONNECT_UI_INTERACTION__PAGE__UNITS_PAGE,
162     ),
163     ALL_CATEGORIES_PAGE(
164         HEALTH_CONNECT_UI_IMPRESSION__PAGE__ALL_CATEGORIES_PAGE,
165         HEALTH_CONNECT_UI_INTERACTION__PAGE__ALL_CATEGORIES_PAGE,
166     ),
167     REQUEST_PERMISSIONS_PAGE(
168         HEALTH_CONNECT_UI_IMPRESSION__PAGE__REQUEST_PERMISSIONS_PAGE,
169         HEALTH_CONNECT_UI_INTERACTION__PAGE__REQUEST_PERMISSIONS_PAGE,
170     ),
171     REQUEST_COMBINED_ADDITIONAL_PERMISSIONS_PAGE(
172         HEALTH_CONNECT_UI_IMPRESSION__PAGE__REQUEST_COMBINED_ADDITIONAL_PERMISSIONS_PAGE,
173         HEALTH_CONNECT_UI_INTERACTION__PAGE__REQUEST_COMBINED_ADDITIONAL_PERMISSIONS_PAGE,
174     ),
175     REQUEST_BACKGROUND_READ_PERMISSION_PAGE(
176         HEALTH_CONNECT_UI_IMPRESSION__PAGE__REQUEST_BACKGROUND_READ_PERMISSION_PAGE,
177         HEALTH_CONNECT_UI_INTERACTION__PAGE__REQUEST_BACKGROUND_READ_PERMISSION_PAGE,
178     ),
179     REQUEST_HISTORY_READ_PERMISSION_PAGE(
180         HEALTH_CONNECT_UI_IMPRESSION__PAGE__REQUEST_HISTORY_READ_PERMISSION_PAGE,
181         HEALTH_CONNECT_UI_INTERACTION__PAGE__REQUEST_HISTORY_READ_PERMISSION_PAGE,
182     ),
183     MANAGE_PERMISSIONS_PAGE(
184         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MANAGE_PERMISSIONS_PAGE,
185         HEALTH_CONNECT_UI_INTERACTION__PAGE__MANAGE_PERMISSIONS_PAGE,
186     ),
187     SETTINGS_MANAGE_PERMISSIONS_PAGE(
188         HEALTH_CONNECT_UI_IMPRESSION__PAGE__SETTINGS_MANAGE_PERMISSIONS_PAGE,
189         HEALTH_CONNECT_UI_INTERACTION__PAGE__SETTINGS_MANAGE_PERMISSIONS_PAGE,
190     ),
191     MIGRATION_IN_PROGRESS_PAGE(
192         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_IN_PROGRESS_PAGE,
193         HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_IN_PROGRESS_PAGE,
194     ),
195     MIGRATION_APP_UPDATE_NEEDED_PAGE(
196         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_APP_UPDATE_NEEDED_PAGE,
197         HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_APP_UPDATE_NEEDED_PAGE,
198     ),
199     MIGRATION_MODULE_UPDATE_NEEDED_PAGE(
200         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_MODULE_UPDATE_NEEDED_PAGE,
201         HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_MODULE_UPDATE_NEEDED_PAGE,
202     ),
203     MIGRATION_PAUSED_PAGE(
204         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_PAUSED_PAGE,
205         HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_PAUSED_PAGE,
206     ),
207     MANAGE_DATA_PAGE(
208         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MANAGE_DATA_PAGE,
209         HEALTH_CONNECT_UI_INTERACTION__PAGE__MANAGE_DATA_PAGE,
210     ),
211     DATA_SOURCES_PAGE(
212         HEALTH_CONNECT_UI_IMPRESSION__PAGE__DATA_SOURCES_PAGE,
213         HEALTH_CONNECT_UI_INTERACTION__PAGE__DATA_SOURCES_PAGE,
214     ),
215     ADD_AN_APP_PAGE(
216         HEALTH_CONNECT_UI_IMPRESSION__PAGE__ADD_AN_APP_PAGE,
217         HEALTH_CONNECT_UI_INTERACTION__PAGE__ADD_AN_APP_PAGE,
218     ),
219     ADDITIONAL_ACCESS_PAGE(
220         HEALTH_CONNECT_UI_IMPRESSION__PAGE__ADDITIONAL_ACCESS_PAGE,
221         HEALTH_CONNECT_UI_INTERACTION__PAGE__ADDITIONAL_ACCESS_PAGE,
222     ),
223     DATA_RESTORE_IN_PROGRESS_PAGE(
224         HEALTH_CONNECT_UI_IMPRESSION__PAGE__DATA_RESTORE_IN_PROGRESS_PAGE,
225         HEALTH_CONNECT_UI_INTERACTION__PAGE__DATA_RESTORE_IN_PROGRESS_PAGE,
226     ),
227     SEARCH_APPS_PAGE(
228         HEALTH_CONNECT_UI_IMPRESSION__PAGE__SEARCH_APPS_PAGE,
229         HEALTH_CONNECT_UI_INTERACTION__PAGE__SEARCH_APPS_PAGE,
230     ),
231     BACKUP_AND_RESTORE_PAGE(
232         HEALTH_CONNECT_UI_IMPRESSION__PAGE__BACKUP_AND_RESTORE_PAGE,
233         HEALTH_CONNECT_UI_INTERACTION__PAGE__BACKUP_AND_RESTORE_PAGE,
234     ),
235     EXPORT_FREQUENCY_PAGE(
236         HEALTH_CONNECT_UI_IMPRESSION__PAGE__EXPORT_FREQUENCY_PAGE,
237         HEALTH_CONNECT_UI_INTERACTION__PAGE__EXPORT_FREQUENCY_PAGE,
238     ),
239     EXPORT_DESTINATION_PAGE(
240         HEALTH_CONNECT_UI_IMPRESSION__PAGE__EXPORT_DESTINATION_PAGE,
241         HEALTH_CONNECT_UI_INTERACTION__PAGE__EXPORT_DESTINATION_PAGE,
242     ),
243     IMPORT_SOURCE_LOCATION_PAGE(
244         HEALTH_CONNECT_UI_IMPRESSION__PAGE__IMPORT_SOURCE_LOCATION_PAGE,
245         HEALTH_CONNECT_UI_INTERACTION__PAGE__IMPORT_SOURCE_LOCATION_PAGE,
246     ),
247     EXPORT_SETTINGS_PAGE(
248         HEALTH_CONNECT_UI_IMPRESSION__PAGE__EXPORT_SETTINGS_PAGE,
249         HEALTH_CONNECT_UI_INTERACTION__PAGE__EXPORT_SETTINGS_PAGE,
250     ),
251     ALL_DATA_PAGE(
252         HEALTH_CONNECT_UI_IMPRESSION__PAGE__ALL_DATA_PAGE,
253         HEALTH_CONNECT_UI_INTERACTION__PAGE__ALL_DATA_PAGE,
254     ),
255     TAB_ENTRIES_PAGE(
256         HEALTH_CONNECT_UI_IMPRESSION__PAGE__TAB_ENTRIES_PAGE,
257         HEALTH_CONNECT_UI_INTERACTION__PAGE__TAB_ENTRIES_PAGE,
258     ),
259     TAB_ACCESS_PAGE(
260         HEALTH_CONNECT_UI_IMPRESSION__PAGE__TAB_ACCESS_PAGE,
261         HEALTH_CONNECT_UI_INTERACTION__PAGE__TAB_ACCESS_PAGE,
262     ),
263     APP_DATA_PAGE(
264         HEALTH_CONNECT_UI_IMPRESSION__PAGE__APP_DATA_PAGE,
265         HEALTH_CONNECT_UI_INTERACTION__PAGE__APP_DATA_PAGE,
266     ),
267     APP_ENTRIES_PAGE(
268         HEALTH_CONNECT_UI_IMPRESSION__PAGE__APP_ENTRIES_PAGE,
269         HEALTH_CONNECT_UI_INTERACTION__PAGE__APP_ENTRIES_PAGE,
270     ),
271     ALL_MEDICAL_DATA_PAGE(
272         HEALTH_CONNECT_UI_IMPRESSION__PAGE__ALL_MEDICAL_DATA_PAGE,
273         HEALTH_CONNECT_UI_INTERACTION__PAGE__ALL_MEDICAL_DATA_PAGE,
274     ),
275     TAB_MEDICAL_ENTRIES_PAGE(
276         HEALTH_CONNECT_UI_IMPRESSION__PAGE__TAB_MEDICAL_ENTRIES_PAGE,
277         HEALTH_CONNECT_UI_INTERACTION__PAGE__TAB_MEDICAL_ENTRIES_PAGE,
278     ),
279     TAB_MEDICAL_ACCESS_PAGE(
280         HEALTH_CONNECT_UI_IMPRESSION__PAGE__TAB_MEDICAL_ACCESS_PAGE,
281         HEALTH_CONNECT_UI_INTERACTION__PAGE__TAB_MEDICAL_ACCESS_PAGE,
282     ),
283     RAW_FHIR_PAGE(
284         HEALTH_CONNECT_UI_IMPRESSION__PAGE__RAW_FHIR_PAGE,
285         HEALTH_CONNECT_UI_INTERACTION__PAGE__RAW_FHIR_PAGE,
286     ),
287     REQUEST_MEDICAL_PERMISSIONS_PAGE(
288         HEALTH_CONNECT_UI_IMPRESSION__PAGE__REQUEST_MEDICAL_PERMISSIONS_PAGE,
289         HEALTH_CONNECT_UI_INTERACTION__PAGE__REQUEST_MEDICAL_PERMISSIONS_PAGE,
290     ),
291     COMBINED_APP_ACCESS_PAGE(
292         HEALTH_CONNECT_UI_IMPRESSION__PAGE__COMBINED_APP_ACCESS_PAGE,
293         HEALTH_CONNECT_UI_INTERACTION__PAGE__COMBINED_APP_ACCESS_PAGE,
294     ),
295     MEDICAL_APP_ACCESS_PAGE(
296         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MEDICAL_APP_ACCESS_PAGE,
297         HEALTH_CONNECT_UI_INTERACTION__PAGE__MEDICAL_APP_ACCESS_PAGE,
298     ),
299     SETTINGS_MANAGE_COMBINED_APP_PERMISSIONS_PAGE(
300         HEALTH_CONNECT_UI_IMPRESSION__PAGE__SETTINGS_MANAGE_COMBINED_APP_PERMISSIONS_PAGE,
301         HEALTH_CONNECT_UI_INTERACTION__PAGE__SETTINGS_MANAGE_COMBINED_APP_PERMISSIONS_PAGE,
302     ),
303     SETTINGS_MANAGE_MEDICAL_APP_PERMISSIONS_PAGE(
304         HEALTH_CONNECT_UI_IMPRESSION__PAGE__SETTINGS_MANAGE_MEDICAL_APP_PERMISSIONS_PAGE,
305         HEALTH_CONNECT_UI_INTERACTION__PAGE__SETTINGS_MANAGE_MEDICAL_APP_PERMISSIONS_PAGE,
306     ),
307     REQUEST_WRITE_MEDICAL_PERMISSION_PAGE(
308         HEALTH_CONNECT_UI_IMPRESSION__PAGE__REQUEST_WRITE_MEDICAL_PERMISSION_PAGE,
309         HEALTH_CONNECT_UI_INTERACTION__PAGE__REQUEST_WRITE_MEDICAL_PERMISSION_PAGE,
310     ),
311     UNKNOWN_PAGE(
312         HEALTH_CONNECT_UI_IMPRESSION__PAGE__PAGE_UNKNOWN,
313         HEALTH_CONNECT_UI_INTERACTION__PAGE__PAGE_UNKNOWN,
314     );
315 
isPhrPagenull316     fun isPhrPage(): Boolean {
317         val phrPages =
318             setOf(
319                 ALL_MEDICAL_DATA_PAGE,
320                 TAB_MEDICAL_ENTRIES_PAGE,
321                 TAB_MEDICAL_ACCESS_PAGE,
322                 RAW_FHIR_PAGE,
323                 REQUEST_MEDICAL_PERMISSIONS_PAGE,
324                 COMBINED_APP_ACCESS_PAGE,
325                 MEDICAL_APP_ACCESS_PAGE,
326                 SETTINGS_MANAGE_COMBINED_APP_PERMISSIONS_PAGE,
327                 SETTINGS_MANAGE_MEDICAL_APP_PERMISSIONS_PAGE,
328                 REQUEST_WRITE_MEDICAL_PERMISSION_PAGE,
329             )
330         return phrPages.contains(this)
331     }
332 }
333 
334 /** Common interface for loggable elements. */
335 interface ElementName {
336     val impressionId: Int
337     val interactionId: Int
338 }
339 
340 /** Loggable elements in the Home page. */
341 enum class HomePageElement(override val impressionId: Int, override val interactionId: Int) :
342     ElementName {
343     APP_PERMISSIONS_BUTTON(
344         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_PERMISSIONS_BUTTON,
345         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_PERMISSIONS_BUTTON,
346     ),
347     DATA_AND_ACCESS_BUTTON(
348         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_AND_ACCESS_BUTTON,
349         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_AND_ACCESS_BUTTON,
350     ),
351     SEE_ALL_RECENT_ACCESS_BUTTON(
352         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_RECENT_ACCESS_BUTTON,
353         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_RECENT_ACCESS_BUTTON,
354     ),
355     MANAGE_DATA_BUTTON(
356         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MANAGE_DATA_BUTTON,
357         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MANAGE_DATA_BUTTON,
358     ),
359     EXPORT_ERROR_BANNER(
360         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_ERROR_BANNER,
361         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_ERROR_BANNER,
362     ),
363     EXPORT_ERROR_BANNER_BUTTON(
364         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_ERROR_BANNER_BUTTON,
365         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_ERROR_BANNER_BUTTON,
366     ),
367     BROWSE_DATA_BUTTON(
368         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__BROWSE_DATA_BUTTON,
369         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__BROWSE_DATA_BUTTON,
370     ),
371     BROWSE_HEALTH_RECORDS_BUTTON(
372         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__BROWSE_HEALTH_RECORDS_BUTTON,
373         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__BROWSE_HEALTH_RECORDS_BUTTON,
374     ),
375     LOCK_SCREEN_BANNER(
376         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__LOCK_SCREEN_BANNER,
377         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__LOCK_SCREEN_BANNER,
378     ),
379     LOCK_SCREEN_BANNER_BUTTON(
380         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__LOCK_SCREEN_BANNER_BUTTON,
381         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__LOCK_SCREEN_BANNER_BUTTON,
382     ),
383     LOCK_SCREEN_BANNER_DISMISS_BUTTON(
384         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__LOCK_SCREEN_BANNER_DISMISS_BUTTON,
385         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__LOCK_SCREEN_BANNER_DISMISS_BUTTON,
386     ),
387 }
388 
389 /** Loggable elements in the Onboarding page. */
390 enum class OnboardingElement(override val impressionId: Int, override val interactionId: Int) :
391     ElementName {
392     ONBOARDING_COMPLETED_BUTTON(
393         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ONBOARDING_COMPLETED_BUTTON,
394         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ONBOARDING_COMPLETED_BUTTON,
395     ),
396     ONBOARDING_GO_BACK_BUTTON(
397         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ONBOARDING_GO_BACK_BUTTON,
398         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ONBOARDING_GO_BACK_BUTTON,
399     ),
400     ONBOARDING_MESSAGE_WITH_PHR(
401         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ONBOARDING_MESSAGE_WITH_PHR,
402         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ONBOARDING_MESSAGE_WITH_PHR,
403     ),
404 }
405 
406 /** Loggable elements in the Recent Access page. */
407 enum class RecentAccessElement(override val impressionId: Int, override val interactionId: Int) :
408     ElementName {
409     RECENT_ACCESS_ENTRY_BUTTON(
410         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__RECENT_ACCESS_ENTRY,
411         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__RECENT_ACCESS_ENTRY,
412     ),
413     MANAGE_PERMISSIONS_FAB(
414         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MANAGE_PERMISSIONS_FLOATING_BUTTON,
415         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MANAGE_PERMISSIONS_FLOATING_BUTTON,
416     ),
417 }
418 
419 /** Loggable elements in the Manage Data page. */
420 enum class ManageDataElement(override val impressionId: Int, override val interactionId: Int) :
421     ElementName {
422     AUTO_DELETE_BUTTON(
423         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_BUTTON,
424         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_BUTTON,
425     ),
426     BACKUP_BUTTON(
427         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__BACKUP_DATA_BUTTON,
428         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__BACKUP_DATA_BUTTON,
429     ),
430     DATA_SOURCES_AND_PRIORITY_BUTTON(
431         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_SOURCES_AND_PRIORITY_BUTTON,
432         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_SOURCES_AND_PRIORITY_BUTTON,
433     ),
434     SET_UNITS_BUTTON(
435         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SET_UNITS_BUTTON,
436         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SET_UNITS_BUTTON,
437     ),
438     BACKUP_AND_RESTORE_BUTTON(
439         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__BACKUP_AND_RESTORE_BUTTON,
440         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__BACKUP_AND_RESTORE_BUTTON,
441     ),
442 }
443 
444 /** Loggable elements in the Category and All categories pages. */
445 enum class CategoriesElement(override val impressionId: Int, override val interactionId: Int) :
446     ElementName {
447     CATEGORY_BUTTON(
448         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CATEGORY_BUTTON,
449         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CATEGORY_BUTTON,
450     ),
451     SEE_ALL_CATEGORIES_BUTTON(
452         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_CATEGORIES_BUTTON,
453         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_CATEGORIES_BUTTON,
454     ),
455     DELETE_ALL_DATA_BUTTON(
456         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_ALL_DATA_BUTTON,
457         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_ALL_DATA_BUTTON,
458     ),
459 }
460 
461 /** Loggable elements in the App Permissions and Settings App Permission pages. */
462 enum class AppPermissionsElement(override val impressionId: Int, override val interactionId: Int) :
463     ElementName {
464     SEARCH_BUTTON(
465         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEARCH_BUTTON,
466         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEARCH_BUTTON,
467     ),
468     CONNECTED_APP_BUTTON(
469         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CONNECTED_APP_BUTTON,
470         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CONNECTED_APP_BUTTON,
471     ),
472     NOT_CONNECTED_APP_BUTTON(
473         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__NOT_CONNECTED_APP_BUTTON,
474         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__NOT_CONNECTED_APP_BUTTON,
475     ),
476     INACTIVE_APP_BUTTON(
477         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__INACTIVE_APP_BUTTON,
478         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__INACTIVE_APP_BUTTON,
479     ),
480     INACTIVE_APP_DELETE_BUTTON(
481         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__INACTIVE_APP_DELETE_BUTTON,
482         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__INACTIVE_APP_DELETE_BUTTON,
483     ),
484     NEEDS_UPDATE_APP_BUTTON(
485         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_APP_BUTTON,
486         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_APP_BUTTON,
487     ),
488     REMOVE_ALL_APPS_PERMISSIONS_BUTTON(
489         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REMOVE_ALL_APPS_PERMISSIONS_BUTTON,
490         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REMOVE_ALL_APPS_PERMISSIONS_BUTTON,
491     ),
492     HELP_AND_FEEDBACK_BUTTON(
493         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__HELP_AND_FEEDBACK_BUTTON,
494         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__HELP_AND_FEEDBACK_BUTTON,
495     ),
496     CHECK_FOR_UPDATES_BUTTON(
497         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHECK_FOR_UPDATES_BUTTON,
498         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHECK_FOR_UPDATES_BUTTON,
499     ),
500     SEE_ALL_COMPATIBLE_APPS_BUTTON(
501         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_COMPATIBLE_APPS_BUTTON,
502         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_COMPATIBLE_APPS_BUTTON,
503     ),
504     SEND_FEEDBACK_BUTTON(
505         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEND_FEEDBACK_BUTTON,
506         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEND_FEEDBACK_BUTTON,
507     ),
508 }
509 
510 /** Loggable elements in the App Access page. */
511 enum class AppAccessElement(override val impressionId: Int, override val interactionId: Int) :
512     ElementName {
513     ALLOW_ALL_PERMISSIONS_SWITCH_ACTIVE(
514         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_ACTIVE,
515         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_ACTIVE,
516     ),
517     ALLOW_ALL_PERMISSIONS_SWITCH_INACTIVE(
518         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_INACTIVE,
519         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_INACTIVE,
520     ),
521     PERMISSION_SWITCH_ACTIVE(
522         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_SWITCH_ACTIVE,
523         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_SWITCH_ACTIVE,
524     ),
525     PERMISSION_SWITCH_INACTIVE(
526         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_SWITCH_INACTIVE,
527         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_SWITCH_INACTIVE,
528     ),
529     DELETE_APP_DATA_BUTTON(
530         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_APP_DATA_BUTTON,
531         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_APP_DATA_BUTTON,
532     ),
533     PRIVACY_POLICY_LINK(
534         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PRIVACY_POLICY_LINK,
535         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PRIVACY_POLICY_LINK,
536     ),
537     ADDITIONAL_ACCESS_BUTTON(
538         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ADDITIONAL_ACCESS_BUTTON,
539         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ADDITIONAL_ACCESS_BUTTON,
540     ),
541     SEE_APP_DATA_BUTTON(
542         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_APP_DATA_BUTTON,
543         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_APP_DATA_BUTTON,
544     ),
545 }
546 
547 /** Loggable elements in the Permission types page. */
548 enum class PermissionTypesElement(override val impressionId: Int, override val interactionId: Int) :
549     ElementName {
550     APP_FILTER_BUTTON(
551         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_FILTER_BUTTON,
552         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_FILTER_BUTTON,
553     ),
554     PERMISSION_TYPE_BUTTON(
555         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_TYPE_BUTTON,
556         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_TYPE_BUTTON,
557     ),
558     DELETE_CATEGORY_DATA_BUTTON(
559         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_CATEGORY_DATA_BUTTON,
560         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_CATEGORY_DATA_BUTTON,
561     ),
562     DATA_SOURCES_AND_PRIORITY_BUTTON(
563         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_SOURCES_AND_PRIORITY_BUTTON,
564         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_SOURCES_AND_PRIORITY_BUTTON,
565     ),
566 }
567 
568 /** Loggable elements in the Data access page. */
569 enum class DataAccessElement(override val impressionId: Int, override val interactionId: Int) :
570     ElementName {
571     DATA_ACCESS_APP_BUTTON(
572         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ACCESS_APP_BUTTON,
573         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ACCESS_APP_BUTTON,
574     ),
575     DATA_ACCESS_INACTIVE_APP_BUTTON(
576         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ACCESS_INACTIVE_APP_BUTTON,
577         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ACCESS_INACTIVE_APP_BUTTON,
578     ),
579     SEE_ALL_ENTRIES_BUTTON(
580         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_ENTRIES_BUTTON,
581         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_ENTRIES_BUTTON,
582     ),
583     DELETE_THIS_DATA_BUTTON(
584         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_THIS_DATA_BUTTON,
585         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_THIS_DATA_BUTTON,
586     ),
587 }
588 
589 /** Loggable elements in the Data entries page. */
590 enum class DataEntriesElement(override val impressionId: Int, override val interactionId: Int) :
591     ElementName {
592     AGGREGATION_DATA_VIEW(
593         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AGGREGATION_DATA_VIEW,
594         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AGGREGATION_DATA_VIEW,
595     ),
596     DATA_ENTRY_VIEW(
597         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ENTRY_VIEW,
598         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ENTRY_VIEW,
599     ),
600     DATA_ENTRY_DELETE_BUTTON(
601         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ENTRY_DELETE_BUTTON,
602         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ENTRY_DELETE_BUTTON,
603     ),
604     EXERCISE_SESSION_ENTRY_BUTTON(
605         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_SESSION_ENTRY_BUTTON,
606         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_SESSION_ENTRY_BUTTON,
607     ),
608     EXERCISE_SESSION_MAP_VIEW(
609         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_SESSION_MAP_VIEW,
610         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_SESSION_MAP_VIEW,
611     ),
612     SLEEP_SESSION_ENTRY_BUTTON(
613         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SLEEP_SESSION_ENTRY_BUTTON,
614         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SLEEP_SESSION_ENTRY_BUTTON,
615     ),
616     NEXT_DAY_BUTTON(
617         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__NEXT_DAY_BUTTON,
618         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__NEXT_DAY_BUTTON,
619     ),
620     PREVIOUS_DAY_BUTTON(
621         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PREVIOUS_DAY_BUTTON,
622         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PREVIOUS_DAY_BUTTON,
623     ),
624     SELECT_DATE_BUTTON(
625         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SELECT_DATE_BUTTON,
626         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SELECT_DATE_BUTTON,
627     ),
628     PLANNED_EXERCISE_SESSION_ENTRY_BUTTON(
629         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PLANNED_EXERCISE_SESSION_ENTRY_BUTTON,
630         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PLANNED_EXERCISE_SESSION_ENTRY_BUTTON,
631     ),
632 }
633 
634 /** Loggable elements in the Entry details page. */
635 enum class EntryDetailsElement(override val impressionId: Int, override val interactionId: Int) :
636     ElementName {
637     SESSION_DETAIL_ENTRY_VIEW(
638         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SESSION_DETAIL_ENTRY_VIEW,
639         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SESSION_DETAIL_ENTRY_VIEW,
640     ),
641     SESSION_DETAIL_HEADER_VIEW(
642         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SESSION_DETAIL_HEADER_VIEW,
643         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SESSION_DETAIL_HEADER_VIEW,
644     ),
645     REVERSE_SESSION_DETAIL_ENTRY_VIEW(
646         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REVERSE_SESSION_DETAIL_ENTRY_VIEW,
647         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REVERSE_SESSION_DETAIL_ENTRY_VIEW,
648     ),
649     FORMATTED_SECTION_TITLE_VIEW(
650         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FORMATTED_SECTION_TITLE_VIEW,
651         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FORMATTED_SECTION_TITLE_VIEW,
652     ),
653     FORMATTED_SECTION_CONTENT_VIEW(
654         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FORMATTED_SECTION_CONTENT_VIEW,
655         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FORMATTED_SECTION_CONTENT_VIEW,
656     ),
657     PLANNED_EXERCISE_BLOCK_ENTRY_VIEW(
658         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PLANNED_EXERCISE_BLOCK_ENTRY_VIEW,
659         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PLANNED_EXERCISE_BLOCK_ENTRY_VIEW,
660     ),
661     PLANNED_EXERCISE_STEP_ENTRY_VIEW(
662         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PLANNED_EXERCISE_STEP_ENTRY_VIEW,
663         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PLANNED_EXERCISE_STEP_ENTRY_VIEW,
664     ),
665     EXERCISE_PERFORMANCE_GOAL_ENTRY_VIEW(
666         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_PERFORMANCE_GOAL_ENTRY_VIEW,
667         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_PERFORMANCE_GOAL_ENTRY_VIEW,
668     ),
669 }
670 
671 /** Loggable elements in the Units page. */
672 enum class UnitsElement(override val impressionId: Int, override val interactionId: Int) :
673     ElementName {
674     // Units
675     CHANGE_UNITS_HEIGHT_BUTTON(
676         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_HEIGHT_BUTTON,
677         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_HEIGHT_BUTTON,
678     ),
679     CHANGE_UNITS_WEIGHT_BUTTON(
680         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_WEIGHT_BUTTON,
681         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_WEIGHT_BUTTON,
682     ),
683     CHANGE_UNITS_DISTANCE_BUTTON(
684         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_DISTANCE_BUTTON,
685         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_DISTANCE_BUTTON,
686     ),
687     CHANGE_UNITS_ENERGY_BUTTON(
688         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_ENERGY_BUTTON,
689         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_ENERGY_BUTTON,
690     ),
691     CHANGE_UNITS_TEMPERATURE_BUTTON(
692         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_TEMPERATURE_BUTTON,
693         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_TEMPERATURE_BUTTON,
694     ),
695     CANCEL_BUTTON(
696         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_BUTTON,
697         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_BUTTON,
698     ),
699     // Height
700     CENTIMETERS_BUTTON(
701         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CENTIMETERS_BUTTON,
702         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CENTIMETERS_BUTTON,
703     ),
704     FEET_AND_INCHES_BUTTON(
705         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FEET_AND_INCHES_BUTTON,
706         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FEET_AND_INCHES_BUTTON,
707     ),
708     // Weight
709     KILOGRAMS_BUTTON(
710         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KILOGRAMS_BUTTON,
711         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KILOGRAMS_BUTTON,
712     ),
713     POUNDS_BUTTON(
714         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__POUNDS_BUTTON,
715         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__POUNDS_BUTTON,
716     ),
717     STONES_BUTTON(
718         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__STONES_BUTTON,
719         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__STONES_BUTTON,
720     ),
721     // Distance
722     KILOMETERS_BUTTON(
723         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KILOMETERS_BUTTON,
724         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KILOMETERS_BUTTON,
725     ),
726     MILES_BUTTON(
727         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MILES_BUTTON,
728         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MILES_BUTTON,
729     ),
730     // Energy
731     CALORIES_BUTTON(
732         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CALORIES_BUTTON,
733         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CALORIES_BUTTON,
734     ),
735     KILOJOULES_BUTTON(
736         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KILOJOULES_BUTTON,
737         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KILOJOULES_BUTTON,
738     ),
739     // Temperature
740     CELSIUS_BUTTON(
741         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CELSIUS_BUTTON,
742         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CELSIUS_BUTTON,
743     ),
744     FAHRENHEIT_BUTTON(
745         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FAHRENHEIT_BUTTON,
746         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FAHRENHEIT_BUTTON,
747     ),
748     KELVIN_BUTTON(
749         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KELVIN_BUTTON,
750         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KELVIN_BUTTON,
751     ),
752 }
753 
754 /** Loggable elements in the Auto delete page. */
755 enum class AutoDeleteElement(override val impressionId: Int, override val interactionId: Int) :
756     ElementName {
757     AUTO_DELETE_3_MONTHS_BUTTON(
758         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_THREE_MONTHS_BUTTON,
759         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_THREE_MONTHS_BUTTON,
760     ),
761     AUTO_DELETE_18_MONTHS_BUTTON(
762         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_EIGHTEEN_MONTHS_BUTTON,
763         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_EIGHTEEN_MONTHS_BUTTON,
764     ),
765     AUTO_DELETE_NEVER_BUTTON(
766         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_NEVER_BUTTON,
767         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_NEVER_BUTTON,
768     ),
769 
770     // Auto-delete dialog
771     AUTO_DELETE_DIALOG_CONTAINER(
772         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_DIALOG_CONTAINER,
773         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_DIALOG_CONTAINER,
774     ),
775     AUTO_DELETE_DIALOG_CANCEL_BUTTON(
776         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_DIALOG_CANCEL_BUTTON,
777         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_DIALOG_CANCEL_BUTTON,
778     ),
779     AUTO_DELETE_DIALOG_CONFIRM_BUTTON(
780         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_DIALOG_CONFIRM_BUTTON,
781         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_DIALOG_CONFIRM_BUTTON,
782     ),
783     AUTO_DELETE_CONFIRMATION_DIALOG_CONTAINER(
784         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_CONTAINER,
785         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_CONTAINER,
786     ),
787     AUTO_DELETE_CONFIRMATION_DIALOG_DONE_BUTTON(
788         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_DONE_BUTTON,
789         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_DONE_BUTTON,
790     ),
791 }
792 
793 /** Loggable elements in the Disconnect app dialog. */
794 enum class DisconnectAppDialogElement(
795     override val impressionId: Int,
796     override val interactionId: Int,
797 ) : ElementName {
798     DISCONNECT_APP_DIALOG_CONTAINER(
799         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_CONTAINER,
800         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_CONTAINER,
801     ),
802     DISCONNECT_APP_DIALOG_CANCEL_BUTTON(
803         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_CANCEL_BUTTON,
804         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_CANCEL_BUTTON,
805     ),
806     DISCONNECT_APP_DIALOG_CONFIRM_BUTTON(
807         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_CONFIRM_BUTTON,
808         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_CONFIRM_BUTTON,
809     ),
810     DISCONNECT_APP_DIALOG_DELETE_CHECKBOX(
811         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_DELETE_CHECKBOX,
812         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_DELETE_CHECKBOX,
813     ),
814 }
815 
816 /** Loggable elements in the Disconnect all apps dialog. */
817 enum class DisconnectAllAppsDialogElement(
818     override val impressionId: Int,
819     override val interactionId: Int,
820 ) : ElementName {
821     DISCONNECT_ALL_APPS_DIALOG_CONTAINER(
822         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CONTAINER,
823         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CONTAINER,
824     ),
825     DISCONNECT_ALL_APPS_DIALOG_CANCEL_BUTTON(
826         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CANCEL_BUTTON,
827         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CANCEL_BUTTON,
828     ),
829     DISCONNECT_ALL_APPS_DIALOG_REMOVE_ALL_BUTTON(
830         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_REMOVE_ALL_BUTTON,
831         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_REMOVE_ALL_BUTTON,
832     ),
833     DISCONNECT_ALL_APPS_DIALOG_DELETE_CHECKBOX(
834         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_DELETE_CHECKBOX,
835         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_DELETE_CHECKBOX,
836     ),
837 }
838 
839 /** Loggable elements in the Deletion dialog time range picker dialog. */
840 enum class DeletionDialogTimeRangeElement(
841     override val impressionId: Int,
842     override val interactionId: Int,
843 ) : ElementName {
844     // Deletion time range dialog
845     DELETION_DIALOG_TIME_RANGE_CONTAINER(
846         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CONTAINER,
847         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CONTAINER,
848     ),
849     DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON(
850         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON,
851         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON,
852     ),
853     DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON(
854         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON,
855         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON,
856     ),
857     DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON(
858         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON,
859         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON,
860     ),
861     DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON(
862         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON,
863         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON,
864     ),
865     DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON(
866         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON,
867         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON,
868     ),
869     DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON(
870         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON,
871         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON,
872     ),
873 }
874 
875 /** Loggable elements in the Deletion dialog confirmation dialog. */
876 enum class DeletionDialogConfirmationElement(
877     override val impressionId: Int,
878     override val interactionId: Int,
879 ) : ElementName {
880     DELETION_DIALOG_CONFIRMATION_CONTAINER(
881         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CONTAINER,
882         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CONTAINER,
883     ),
884     DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON(
885         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON,
886         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON,
887     ),
888     DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON(
889         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON,
890         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON,
891     ),
892     DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON(
893         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON,
894         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON,
895     ),
896     DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON(
897         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON,
898         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON,
899     ),
900 }
901 
902 /** Loggable elements in the Progress dialog. */
903 enum class ProgressDialogElement(override val impressionId: Int, override val interactionId: Int) :
904     ElementName {
905     DELETION_DIALOG_IN_PROGRESS_CONTAINER(
906         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_IN_PROGRESS_CONTAINER,
907         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_IN_PROGRESS_CONTAINER,
908     )
909 }
910 
911 /** Loggable elements in the Success dialog. */
912 enum class SuccessDialogElement(override val impressionId: Int, override val interactionId: Int) :
913     ElementName {
914     DELETION_DIALOG_SUCCESS_CONTAINER(
915         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_SUCCESS_CONTAINER,
916         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_SUCCESS_CONTAINER,
917     ),
918     DELETION_DIALOG_SUCCESS_DONE_BUTTON(
919         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_SUCCESS_DONE_BUTTON,
920         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_SUCCESS_DONE_BUTTON,
921     ),
922     DELETION_DIALOG_SUCCESS_SEE_CONNECTED_APPS_BUTTON(
923         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SUCCESS_DELETION_DIALOG_SEE_CONNECTED_APPS_BUTTON,
924         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SUCCESS_DELETION_DIALOG_SEE_CONNECTED_APPS_BUTTON,
925     ),
926 }
927 
928 /** Loggable elements in the Failed dialog. */
929 enum class FailedDialogElement(override val impressionId: Int, override val interactionId: Int) :
930     ElementName {
931     DELETION_DIALOG_ERROR_CONTAINER(
932         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_CONTAINER,
933         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_CONTAINER,
934     ),
935     DELETION_DIALOG_ERROR_CLOSE_BUTTON(
936         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_CLOSE_BUTTON,
937         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_CLOSE_BUTTON,
938     ),
939     DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON(
940         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON,
941         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON,
942     ),
943 }
944 
945 /** Loggable elements in the Request and Manage permissions pages. */
946 enum class PermissionsElement(override val impressionId: Int, override val interactionId: Int) :
947     ElementName {
948     ALLOW_PERMISSIONS_BUTTON(
949         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_PERMISSIONS_BUTTON,
950         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_PERMISSIONS_BUTTON,
951     ),
952     CANCEL_PERMISSIONS_BUTTON(
953         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_PERMISSIONS_BUTTON,
954         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_PERMISSIONS_BUTTON,
955     ),
956     ALLOW_ALL_SWITCH(
957         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_ALL_SWITCH,
958         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_ALL_SWITCH,
959     ),
960     PERMISSION_SWITCH(
961         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_SWITCH,
962         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_SWITCH,
963     ),
964     APP_RATIONALE_LINK(
965         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_RATIONALE_LINK,
966         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_RATIONALE_LINK,
967     ),
968 }
969 
970 /** Loggable elements in the Request Combined Additional Permissions page. */
971 enum class RequestCombinedAdditionalPermissionsElement(
972     override val impressionId: Int,
973     override val interactionId: Int,
974 ) : ElementName {
975     ALLOW_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON(
976         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON,
977         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON,
978     ),
979     CANCEL_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON(
980         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON,
981         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON,
982     ),
983     BACKGROUND_READ_BUTTON(
984         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__BACKGROUND_READ_BUTTON,
985         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__BACKGROUND_READ_BUTTON,
986     ),
987     HISTORY_READ_BUTTON(
988         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__HISTORY_READ_BUTTON,
989         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__HISTORY_READ_BUTTON,
990     ),
991 }
992 
993 /** Loggable elements in the Request Background Read permission page. */
994 enum class RequestBackgroundReadPermissionElement(
995     override val impressionId: Int,
996     override val interactionId: Int,
997 ) : ElementName {
998     ALLOW_BACKGROUND_READ_BUTTON(
999         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_BACKGROUND_READ_BUTTON,
1000         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_BACKGROUND_READ_BUTTON,
1001     ),
1002     CANCEL_BACKGROUND_READ_BUTTON(
1003         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_BACKGROUND_READ_BUTTON,
1004         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_BACKGROUND_READ_BUTTON,
1005     ),
1006 }
1007 
1008 /** Loggable elements in the Request History Read permission page. */
1009 enum class RequestHistoryReadPermissionElement(
1010     override val impressionId: Int,
1011     override val interactionId: Int,
1012 ) : ElementName {
1013     ALLOW_HISTORY_READ_BUTTON(
1014         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_HISTORY_READ_BUTTON,
1015         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_HISTORY_READ_BUTTON,
1016     ),
1017     CANCEL_HISTORY_READ_BUTTON(
1018         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_HISTORY_READ_BUTTON,
1019         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_HISTORY_READ_BUTTON,
1020     ),
1021 }
1022 
1023 enum class AdditionalAccessElement(
1024     override val impressionId: Int,
1025     override val interactionId: Int,
1026 ) : ElementName {
1027     EXERCISE_ROUTES_BUTTON(
1028         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_BUTTON,
1029         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_BUTTON,
1030     ),
1031     HISTORY_READ_BUTTON(
1032         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_HISTORY_READ_BUTTON,
1033         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_HISTORY_READ_BUTTON,
1034     ),
1035     BACKGROUND_READ_BUTTON(
1036         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__BACKGROUND_READ_BUTTON,
1037         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__BACKGROUND_READ_BUTTON,
1038     ),
1039     EXERCISE_ROUTES_DIALOG_CONTAINER(
1040         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_CONTAINER,
1041         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_CONTAINER,
1042     ),
1043     EXERCISE_ROUTES_ALLOW_ALL_BUTTON(
1044         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_ALLOW_ALL_BUTTON,
1045         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_ALLOW_ALL_BUTTON,
1046     ),
1047     EXERCISE_ROUTES_ASK_BUTTON(
1048         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_ASK_BUTTON,
1049         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_ASK_BUTTON,
1050     ),
1051     EXERCISE_ROUTES_DIALOG_DENY_BUTTON(
1052         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_DENY_BUTTON,
1053         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_DENY_BUTTON,
1054     ),
1055     ENABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER(
1056         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER,
1057         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER,
1058     ),
1059     ENABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON(
1060         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON,
1061         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON,
1062     ),
1063     ENABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON(
1064         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON,
1065         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON,
1066     ),
1067     DISABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER(
1068         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER,
1069         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER,
1070     ),
1071     DISABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON(
1072         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON,
1073         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON,
1074     ),
1075     DISABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON(
1076         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON,
1077         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON,
1078     ),
1079 }
1080 
1081 /** Loggable elements in the toolbar. */
1082 enum class ToolbarElement(override val impressionId: Int, override val interactionId: Int) :
1083     ElementName {
1084     // Represents main menu
1085     TOOLBAR_SETTINGS_BUTTON(
1086         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_SETTINGS_BUTTON,
1087         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_SETTINGS_BUTTON,
1088     ),
1089     TOOLBAR_HELP_BUTTON(
1090         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_HELP_BUTTON,
1091         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_HELP_BUTTON,
1092     ),
1093     // TODO update
1094     TOOLBAR_UNITS_BUTTON(
1095         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_BUTTON,
1096         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_BUTTON,
1097     ),
1098     // TODO not sure if this will be needed
1099     TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON(
1100         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON,
1101         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON,
1102     ),
1103     TOOLBAR_DATA_SOURCES_BUTTON(
1104         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_SOURCES_MENU_BUTTON,
1105         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_SOURCES_MENU_BUTTON,
1106     ),
1107     TOOLBAR_ENTER_DELETION_STATE_BUTTON(
1108         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENTER_DELETION_STATE_MENU_BUTTON,
1109         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENTER_DELETION_STATE_MENU_BUTTON,
1110     ),
1111     TOOLBAR_EXIT_DELETION_STATE_BUTTON(
1112         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXIT_DELETION_STATE_MENU_BUTTON,
1113         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXIT_DELETION_STATE_MENU_BUTTON,
1114     ),
1115     TOOLBAR_DELETE_BUTTON(
1116         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_MENU_BUTTON,
1117         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_MENU_BUTTON,
1118     ),
1119 }
1120 
1121 /** Loggable elements in the Entry details page. */
1122 enum class MigrationElement(override val impressionId: Int, override val interactionId: Int) :
1123     ElementName {
1124     MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON(
1125         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON,
1126         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON,
1127     ),
1128     MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON(
1129         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON,
1130         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON,
1131     ),
1132     MIGRATION_PAUSED_CONTINUE_BUTTON(
1133         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PAUSED_CONTINUE_BUTTON,
1134         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PAUSED_CONTINUE_BUTTON,
1135     ),
1136     MIGRATION_DONE_DIALOG_CONTAINER(
1137         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_DONE_DIALOG_CONTAINER,
1138         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_DONE_DIALOG_CONTAINER,
1139     ),
1140     MIGRATION_DONE_DIALOG_BUTTON(
1141         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_DONE_DIALOG_BUTTON,
1142         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_DONE_DIALOG_BUTTON,
1143     ),
1144     MIGRATION_IN_PROGRESS_DIALOG_CONTAINER(
1145         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_CONTAINER,
1146         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_CONTAINER,
1147     ),
1148     MIGRATION_IN_PROGRESS_DIALOG_BUTTON(
1149         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_BUTTON,
1150         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_BUTTON,
1151     ),
1152     MIGRATION_PENDING_DIALOG_CONTAINER(
1153         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTAINER,
1154         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTAINER,
1155     ),
1156     MIGRATION_PENDING_DIALOG_CANCEL_BUTTON(
1157         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CANCEL_BUTTON,
1158         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CANCEL_BUTTON,
1159     ),
1160     MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON(
1161         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON,
1162         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON,
1163     ),
1164     MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER(
1165         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER,
1166         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER,
1167     ),
1168     MIGRATION_NOT_COMPLETE_DIALOG_BUTTON(
1169         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_BUTTON,
1170         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_BUTTON,
1171     ),
1172     MIGRATION_RESUME_BANNER(
1173         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_RESUME_BANNER,
1174         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_RESUME_BANNER,
1175     ),
1176     MIGRATION_RESUME_BANNER_BUTTON(
1177         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_RESUME_BANNER_BUTTON,
1178         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_RESUME_BANNER_BUTTON,
1179     ),
1180     MIGRATION_APP_UPDATE_BANNER(
1181         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_BANNER,
1182         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_APP_UPDATE_BANNER,
1183     ),
1184     MIGRATION_APP_UPDATE_BUTTON(
1185         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_BUTTON,
1186         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_APP_UPDATE_BUTTON,
1187     ),
1188     MIGRATION_APP_UPDATE_LEARN_MORE_BUTTON(
1189         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_LEARN_MORE_BUTTON,
1190         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_LEARN_MORE_BUTTON,
1191     ),
1192     MIGRATION_APP_UPDATE_BANNER_DISMISS_BUTTON(
1193         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_DISMISS_BUTTON,
1194         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_APP_UPDATE_DISMISS_BUTTON,
1195     ),
1196 }
1197 
1198 enum class DataRestoreElement(override val impressionId: Int, override val interactionId: Int) :
1199     ElementName {
1200     RESTORE_IN_PROGRESS_DIALOG_CONTAINER(
1201         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_CONTAINER,
1202         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_CONTAINER,
1203     ),
1204     RESTORE_IN_PROGRESS_DIALOG_BUTTON(
1205         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_BUTTON,
1206         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_BUTTON,
1207     ),
1208     RESTORE_PENDING_BANNER(
1209         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER,
1210         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER,
1211     ),
1212     RESTORE_PENDING_BANNER_UPDATE_BUTTON(
1213         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER_UPDATE_BUTTON,
1214         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER_UPDATE_BUTTON,
1215     ),
1216 }
1217 
1218 /** Loggable elements in the Data sources page. */
1219 enum class DataSourcesElement(override val impressionId: Int, override val interactionId: Int) :
1220     ElementName {
1221     DATA_TYPE_SPINNER(
1222         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_TYPE_SPINNER_BUTTON,
1223         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_TYPE_SPINNER_BUTTON,
1224     ),
1225     DATA_TOTALS_CARD(
1226         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_TOTALS_CARD,
1227         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_TOTALS_CARD,
1228     ),
1229     APP_SOURCE_BUTTON(
1230         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_SOURCE_BUTTON,
1231         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_SOURCE_BUTTON,
1232     ),
1233     ADD_AN_APP_BUTTON(
1234         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ADD_AN_APP_BUTTON,
1235         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ADD_AN_APP_BUTTON,
1236     ),
1237     OPEN_APP_SOURCE_MENU_BUTTON(
1238         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__OPEN_APP_SOURCE_MENU_BUTTON,
1239         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__OPEN_APP_SOURCE_MENU_BUTTON,
1240     ),
1241     MOVE_APP_SOURCE_DOWN_MENU_BUTTON(
1242         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MOVE_APP_SOURCE_DOWN_MENU_BUTTON,
1243         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MOVE_APP_SOURCE_DOWN_MENU_BUTTON,
1244     ),
1245     MOVE_APP_SOURCE_UP_MENU_BUTTON(
1246         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MOVE_APP_SOURCE_UP_MENU_BUTTON,
1247         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MOVE_APP_SOURCE_UP_MENU_BUTTON,
1248     ),
1249     REMOVE_APP_SOURCE_MENU_BUTTON(
1250         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REMOVE_APP_SOURCE_MENU_BUTTON,
1251         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REMOVE_APP_SOURCE_MENU_BUTTON,
1252     ),
1253 }
1254 
1255 /** Loggable elements in the Add an app page. */
1256 enum class AddAnAppElement(override val impressionId: Int, override val interactionId: Int) :
1257     ElementName {
1258     POTENTIAL_PRIORITY_APP_BUTTON(
1259         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__POTENTIAL_PRIORITY_APP_BUTTON,
1260         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__POTENTIAL_PRIORITY_APP_BUTTON,
1261     )
1262 }
1263 
1264 enum class RouteRequestElement(override val impressionId: Int, override val interactionId: Int) :
1265     ElementName {
1266     EXERCISE_ROUTE_REQUEST_DIALOG_CONTAINER(
1267         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_CONTAINER,
1268         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_CONTAINER,
1269     ),
1270     EXERCISE_ROUTE_DIALOG_INFORMATION_BUTTON(
1271         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_INFORMATION_BUTTON,
1272         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_INFORMATION_BUTTON,
1273     ),
1274     EXERCISE_ROUTE_DIALOG_ROUTE_VIEW(
1275         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_ROUTE_VIEW,
1276         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_ROUTE_VIEW,
1277     ),
1278     EXERCISE_ROUTE_DIALOG_ALLOW_BUTTON(
1279         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALLOW_BUTTON,
1280         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALLOW_BUTTON,
1281     ),
1282     EXERCISE_ROUTE_DIALOG_ALWAYS_ALLOW_BUTTON(
1283         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALWAYS_ALLOW_BUTTON,
1284         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALWAYS_ALLOW_BUTTON,
1285     ),
1286     EXERCISE_ROUTE_DIALOG_DONT_ALLOW_BUTTON(
1287         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_DONT_ALLOW_BUTTON,
1288         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_DONT_ALLOW_BUTTON,
1289     ),
1290     EXERCISE_ROUTE_EDUCATION_DIALOG_CONTAINER(
1291         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_CONTAINER,
1292         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_CONTAINER,
1293     ),
1294     EXERCISE_ROUTE_EDUCATION_DIALOG_BACK_BUTTON(
1295         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_BACK_BUTTON,
1296         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_BACK_BUTTON,
1297     ),
1298 }
1299 
1300 /** Loggable elements in the Backup and restore page */
1301 enum class BackupAndRestoreElement(
1302     override val impressionId: Int,
1303     override val interactionId: Int,
1304 ) : ElementName {
1305     SCHEDULED_EXPORT_BUTTON(
1306         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SCHEDULED_EXPORT_BUTTON,
1307         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SCHEDULED_EXPORT_BUTTON,
1308     ),
1309     RESTORE_DATA_BUTTON(
1310         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__RESTORE_DATA_BUTTON,
1311         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__RESTORE_DATA_BUTTON,
1312     ),
1313     IMPORT_GENERAL_ERROR_BANNER(
1314         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_GENERAL_ERROR_BANNER,
1315         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_GENERAL_ERROR_BANNER,
1316     ),
1317     IMPORT_GENERAL_ERROR_BANNER_BUTTON(
1318         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_GENERAL_ERROR_BANNER_BUTTON,
1319         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_GENERAL_ERROR_BANNER_BUTTON,
1320     ),
1321     IMPORT_VERSION_MISMATCH_ERROR_BANNER(
1322         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_VERSION_MISMATCH_ERROR_BANNER,
1323         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_VERSION_MISMATCH_ERROR_BANNER,
1324     ),
1325     IMPORT_VERSION_MISMATCH_ERROR_BANNER_BUTTON(
1326         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_VERSION_MISMATCH_ERROR_BANNER_BUTTON,
1327         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_VERSION_MISMATCH_ERROR_BANNER_BUTTON,
1328     ),
1329     IMPORT_WRONG_FILE_ERROR_BANNER(
1330         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_WRONG_FILE_ERROR_BANNER,
1331         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_WRONG_FILE_ERROR_BANNER,
1332     ),
1333     IMPORT_WRONG_FILE_ERROR_BANNER_BUTTON(
1334         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_WRONG_FILE_ERROR_BANNER_BUTTON,
1335         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_WRONG_FILE_ERROR_BANNER_BUTTON,
1336     ),
1337 }
1338 
1339 /** Loggable elements in the Export frequency page */
1340 enum class ExportFrequencyElement(override val impressionId: Int, override val interactionId: Int) :
1341     ElementName {
1342     EXPORT_FREQUENCY_DAILY_BUTTON(
1343         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_DAILY_BUTTON,
1344         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_DAILY_BUTTON,
1345     ),
1346     EXPORT_FREQUENCY_WEEKLY_BUTTON(
1347         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_WEEKLY_BUTTON,
1348         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_WEEKLY_BUTTON,
1349     ),
1350     EXPORT_FREQUENCY_MONTHLY_BUTTON(
1351         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_MONTHLY_BUTTON,
1352         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_MONTHLY_BUTTON,
1353     ),
1354     EXPORT_FREQUENCY_BACK_BUTTON(
1355         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_BACK_BUTTON,
1356         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_BACK_BUTTON,
1357     ),
1358     EXPORT_FREQUENCY_NEXT_BUTTON(
1359         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_NEXT_BUTTON,
1360         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_NEXT_BUTTON,
1361     ),
1362 }
1363 
1364 /** Loggable elements in the Export destination page */
1365 enum class ExportDestinationElement(
1366     override val impressionId: Int,
1367     override val interactionId: Int,
1368 ) : ElementName {
1369     EXPORT_DESTINATION_BACK_BUTTON(
1370         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_DESTINATION_BACK_BUTTON,
1371         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_DESTINATION_BACK_BUTTON,
1372     ),
1373     EXPORT_DESTINATION_NEXT_BUTTON(
1374         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_NEXT_BUTTON,
1375         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_NEXT_BUTTON,
1376     ),
1377 }
1378 
1379 /** Loggable elements in the Scheduled export fragment page */
1380 enum class ScheduledExportElement(override val impressionId: Int, override val interactionId: Int) :
1381     ElementName {
1382     EXPORT_CONTROL_SWITCH_ON(
1383         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_CONTROL_SWITCH_ON,
1384         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_CONTROL_SWITCH_ON,
1385     ),
1386     EXPORT_CONTROL_SWITCH_OFF(
1387         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_CONTROL_SWITCH_OFF,
1388         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_CONTROL_SWITCH_OFF,
1389     ),
1390     EXPORT_SETTINGS_FREQUENCY_DAILY(
1391         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_DAILY,
1392         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_DAILY,
1393     ),
1394     EXPORT_SETTINGS_FREQUENCY_WEEKLY(
1395         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_WEEKLY,
1396         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_WEEKLY,
1397     ),
1398     EXPORT_SETTINGS_FREQUENCY_MONTHLY(
1399         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_MONTHLY,
1400         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_MONTHLY,
1401     ),
1402 }
1403 
1404 /** Loggable elements in the Import source location page */
1405 enum class ImportSourceLocationElement(
1406     override val impressionId: Int,
1407     override val interactionId: Int,
1408 ) : ElementName {
1409     IMPORT_SOURCE_LOCATION_CANCEL_BUTTON(
1410         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_SOURCE_LOCATION_CANCEL_BUTTON,
1411         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_SOURCE_LOCATION_CANCEL_BUTTON,
1412     ),
1413     IMPORT_SOURCE_LOCATION_NEXT_BUTTON(
1414         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_SOURCE_LOCATION_NEXT_BUTTON,
1415         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_SOURCE_LOCATION_NEXT_BUTTON,
1416     ),
1417 }
1418 
1419 /** Loggable elements in the Import confirmation dialog page */
1420 enum class ImportConfirmationDialogElement(
1421     override val impressionId: Int,
1422     override val interactionId: Int,
1423 ) : ElementName {
1424     IMPORT_CONFIRMATION_CANCEL_BUTTON(
1425         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_CONFIRMATION_CANCEL_BUTTON,
1426         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_CONFIRMATION_CANCEL_BUTTON,
1427     ),
1428     IMPORT_CONFIRMATION_DONE_BUTTON(
1429         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_CONFIRMATION_DONE_BUTTON,
1430         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_CONFIRMATION_DONE_BUTTON,
1431     ),
1432     IMPORT_CONFIRMATION_CONTAINER(
1433         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_CONFIRMATION_CONTAINER,
1434         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_CONFIRMATION_CONTAINER,
1435     ),
1436 }
1437 
1438 /** Loggable elements in the AllData page */
1439 enum class AllDataElement(override val impressionId: Int, override val interactionId: Int) :
1440     ElementName {
1441     PERMISSION_TYPE_BUTTON_WITH_CHECKBOX(
1442         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_TYPE_BUTTON_WITH_CHECKBOX,
1443         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_TYPE_BUTTON_WITH_CHECKBOX,
1444     ),
1445     PERMISSION_TYPE_BUTTON_NO_CHECKBOX(
1446         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_TYPE_BUTTON_NO_CHECKBOX,
1447         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_TYPE_BUTTON_NO_CHECKBOX,
1448     ),
1449     SELECT_ALL_BUTTON(
1450         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SELECT_ALL_BUTTON,
1451         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SELECT_ALL_BUTTON,
1452     ),
1453 }
1454 
1455 /** Loggable elements in the AllEntries and AppEntries page */
1456 enum class EntriesElement(override val impressionId: Int, override val interactionId: Int) :
1457     ElementName {
1458     ENTRY_BUTTON_WITH_CHECKBOX(
1459         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENTRY_BUTTON_WITH_CHECKBOX,
1460         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENTRY_BUTTON_WITH_CHECKBOX,
1461     ),
1462     ENTRY_BUTTON_NO_CHECKBOX(
1463         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENTRY_BUTTON_NO_CHECKBOX,
1464         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENTRY_BUTTON_NO_CHECKBOX,
1465     ),
1466     DATE_VIEW_SPINNER_DAY(
1467         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATE_VIEW_SPINNER_DAY,
1468         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATE_VIEW_SPINNER_DAY,
1469     ),
1470     DATE_VIEW_SPINNER_WEEK(
1471         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATE_VIEW_SPINNER_WEEK,
1472         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATE_VIEW_SPINNER_WEEK,
1473     ),
1474     DATE_VIEW_SPINNER_MONTH(
1475         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATE_VIEW_SPINNER_YEAR,
1476         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATE_VIEW_SPINNER_YEAR,
1477     ),
1478     SELECT_ALL_BUTTON(
1479         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SELECT_ALL_BUTTON,
1480         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SELECT_ALL_BUTTON,
1481     ),
1482 }
1483 
1484 /** Loggable elements in the AppData page */
1485 enum class AppDataElement(override val impressionId: Int, override val interactionId: Int) :
1486     ElementName {
1487     PERMISSION_TYPE_BUTTON_WITH_CHECKBOX(
1488         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_TYPE_BUTTON_WITH_CHECKBOX,
1489         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_TYPE_BUTTON_WITH_CHECKBOX,
1490     ),
1491     PERMISSION_TYPE_BUTTON_NO_CHECKBOX(
1492         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_TYPE_BUTTON_NO_CHECKBOX,
1493         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_TYPE_BUTTON_NO_CHECKBOX,
1494     ),
1495     SELECT_ALL_BUTTON(
1496         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SELECT_ALL_BUTTON,
1497         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SELECT_ALL_BUTTON,
1498     ),
1499 }
1500 
1501 enum class CombinedAppAccessElement(
1502     override val impressionId: Int,
1503     override val interactionId: Int,
1504 ) : ElementName {
1505     FITNESS_PERMISSIONS_BUTTON(
1506         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FITNESS_PERMISSIONS_BUTTON,
1507         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FITNESS_PERMISSIONS_BUTTON,
1508     ),
1509     MEDICAL_PERMISSIONS_BUTTON(
1510         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MEDICAL_PERMISSIONS_BUTTON,
1511         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MEDICAL_PERMISSIONS_BUTTON,
1512     ),
1513     REMOVE_ALL_PERMISSIONS_BUTTON(
1514         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REMOVE_ALL_PERMISSIONS_BUTTON,
1515         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REMOVE_ALL_PERMISSIONS_BUTTON,
1516     ),
1517 }
1518 
1519 /** Loggable elements belonging to the RawFhirPage. */
1520 enum class RawFhirPageElement(override val impressionId: Int, override val interactionId: Int) :
1521     ElementName {
1522     RAW_FHIR_RESOURCE(
1523         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__RAW_FHIR_RESOURCE,
1524         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__RAW_FHIR_RESOURCE,
1525     )
1526 }
1527 
1528 /** Loggable elements belonging to MedicalWritePermissionFragment elements. */
1529 enum class MedicalWritePermissionPageElement(
1530     override val impressionId: Int,
1531     override val interactionId: Int,
1532 ) : ElementName {
1533     ALLOW_WRITE_HEALTH_RECORDS_BUTTON(
1534         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_WRITE_HEALTH_RECORDS_BUTTON,
1535         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_WRITE_HEALTH_RECORDS_BUTTON,
1536     ),
1537     CANCEL_WRITE_HEALTH_RECORDS_BUTTON(
1538         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_WRITE_HEALTH_RECORDS_BUTTON,
1539         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_WRITE_HEALTH_RECORDS_BUTTON,
1540     ),
1541 }
1542 
1543 /** Loggable elements belonging to the error page, and the unknown element. */
1544 enum class ErrorPageElement(override val impressionId: Int, override val interactionId: Int) :
1545     ElementName {
1546     UNKNOWN_ELEMENT(
1547         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN,
1548         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN,
1549     )
1550 }
1551 
1552 /** Loggable elements belonging to any page with unknown elements. */
1553 enum class UnknownGenericElement(override val impressionId: Int, override val interactionId: Int) :
1554     ElementName {
1555     UNKNOWN_BANNER(
1556         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_BANNER,
1557         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_BANNER,
1558     ),
1559     UNKNOWN_BANNER_BUTTON(
1560         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_BANNER_BUTTON,
1561         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_BANNER_BUTTON,
1562     ),
1563     UNKNOWN_HEALTH_PREFERENCE(
1564         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_HEALTH_PREFERENCE,
1565         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_HEALTH_PREFERENCE,
1566     ),
1567     UNKNOWN_DIALOG(
1568         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_DIALOG,
1569         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_DIALOG,
1570     ),
1571     UNKNOWN_DIALOG_POSITIVE_BUTTON(
1572         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_DIALOG_POSITIVE_BUTTON,
1573         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_DIALOG_POSITIVE_BUTTON,
1574     ),
1575     UNKNOWN_DIALOG_NEGATIVE_BUTTON(
1576         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_DIALOG_NEGATIVE_BUTTON,
1577         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_DIALOG_NEGATIVE_BUTTON,
1578     ),
1579     UNKNOWN_DIALOG_NEUTRAL_BUTTON(
1580         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_DIALOG_NEUTRAL_BUTTON,
1581         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_DIALOG_NEUTRAL_BUTTON,
1582     ),
1583     UNKNOWN_SWITCH_ACTIVE_PREFERENCE(
1584         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_SWITCH_ACTIVE_PREFERENCE,
1585         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_SWITCH_ACTIVE_PREFERENCE,
1586     ),
1587     UNKNOWN_SWITCH_INACTIVE_PREFERENCE(
1588         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_SWITCH_INACTIVE_PREFERENCE,
1589         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_SWITCH_INACTIVE_PREFERENCE,
1590     ),
1591     UNKNOWN_BUTTON(
1592         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_BUTTON,
1593         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_BUTTON,
1594     ),
1595 }
1596 
1597 @EntryPoint
1598 @InstallIn(SingletonComponent::class)
1599 interface HealthConnectLoggerEntryPoint {
loggernull1600     fun logger(): HealthConnectLogger
1601 }
1602