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 }
834 
835 /** Loggable elements in the Deletion dialog time range picker dialog. */
836 enum class DeletionDialogTimeRangeElement(
837     override val impressionId: Int,
838     override val interactionId: Int,
839 ) : ElementName {
840     // Deletion time range dialog
841     DELETION_DIALOG_TIME_RANGE_CONTAINER(
842         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CONTAINER,
843         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CONTAINER,
844     ),
845     DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON(
846         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON,
847         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON,
848     ),
849     DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON(
850         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON,
851         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON,
852     ),
853     DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON(
854         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON,
855         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON,
856     ),
857     DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON(
858         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON,
859         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON,
860     ),
861     DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON(
862         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON,
863         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON,
864     ),
865     DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON(
866         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON,
867         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON,
868     ),
869 }
870 
871 /** Loggable elements in the Deletion dialog confirmation dialog. */
872 enum class DeletionDialogConfirmationElement(
873     override val impressionId: Int,
874     override val interactionId: Int,
875 ) : ElementName {
876     DELETION_DIALOG_CONFIRMATION_CONTAINER(
877         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CONTAINER,
878         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CONTAINER,
879     ),
880     DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON(
881         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON,
882         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON,
883     ),
884     DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON(
885         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON,
886         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON,
887     ),
888     DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON(
889         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON,
890         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON,
891     ),
892     DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON(
893         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON,
894         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON,
895     ),
896 }
897 
898 /** Loggable elements in the Progress dialog. */
899 enum class ProgressDialogElement(override val impressionId: Int, override val interactionId: Int) :
900     ElementName {
901     DELETION_DIALOG_IN_PROGRESS_CONTAINER(
902         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_IN_PROGRESS_CONTAINER,
903         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_IN_PROGRESS_CONTAINER,
904     )
905 }
906 
907 /** Loggable elements in the Success dialog. */
908 enum class SuccessDialogElement(override val impressionId: Int, override val interactionId: Int) :
909     ElementName {
910     DELETION_DIALOG_SUCCESS_CONTAINER(
911         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_SUCCESS_CONTAINER,
912         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_SUCCESS_CONTAINER,
913     ),
914     DELETION_DIALOG_SUCCESS_DONE_BUTTON(
915         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_SUCCESS_DONE_BUTTON,
916         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_SUCCESS_DONE_BUTTON,
917     ),
918     DELETION_DIALOG_SUCCESS_SEE_CONNECTED_APPS_BUTTON(
919         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SUCCESS_DELETION_DIALOG_SEE_CONNECTED_APPS_BUTTON,
920         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SUCCESS_DELETION_DIALOG_SEE_CONNECTED_APPS_BUTTON,
921     ),
922 }
923 
924 /** Loggable elements in the Failed dialog. */
925 enum class FailedDialogElement(override val impressionId: Int, override val interactionId: Int) :
926     ElementName {
927     DELETION_DIALOG_ERROR_CONTAINER(
928         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_CONTAINER,
929         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_CONTAINER,
930     ),
931     DELETION_DIALOG_ERROR_CLOSE_BUTTON(
932         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_CLOSE_BUTTON,
933         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_CLOSE_BUTTON,
934     ),
935     DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON(
936         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON,
937         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON,
938     ),
939 }
940 
941 /** Loggable elements in the Request and Manage permissions pages. */
942 enum class PermissionsElement(override val impressionId: Int, override val interactionId: Int) :
943     ElementName {
944     ALLOW_PERMISSIONS_BUTTON(
945         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_PERMISSIONS_BUTTON,
946         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_PERMISSIONS_BUTTON,
947     ),
948     CANCEL_PERMISSIONS_BUTTON(
949         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_PERMISSIONS_BUTTON,
950         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_PERMISSIONS_BUTTON,
951     ),
952     ALLOW_ALL_SWITCH(
953         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_ALL_SWITCH,
954         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_ALL_SWITCH,
955     ),
956     PERMISSION_SWITCH(
957         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_SWITCH,
958         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_SWITCH,
959     ),
960     APP_RATIONALE_LINK(
961         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_RATIONALE_LINK,
962         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_RATIONALE_LINK,
963     ),
964 }
965 
966 /** Loggable elements in the Request Combined Additional Permissions page. */
967 enum class RequestCombinedAdditionalPermissionsElement(
968     override val impressionId: Int,
969     override val interactionId: Int,
970 ) : ElementName {
971     ALLOW_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON(
972         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON,
973         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON,
974     ),
975     CANCEL_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON(
976         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON,
977         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON,
978     ),
979     BACKGROUND_READ_BUTTON(
980         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__BACKGROUND_READ_BUTTON,
981         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__BACKGROUND_READ_BUTTON,
982     ),
983     HISTORY_READ_BUTTON(
984         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__HISTORY_READ_BUTTON,
985         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__HISTORY_READ_BUTTON,
986     ),
987 }
988 
989 /** Loggable elements in the Request Background Read permission page. */
990 enum class RequestBackgroundReadPermissionElement(
991     override val impressionId: Int,
992     override val interactionId: Int,
993 ) : ElementName {
994     ALLOW_BACKGROUND_READ_BUTTON(
995         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_BACKGROUND_READ_BUTTON,
996         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_BACKGROUND_READ_BUTTON,
997     ),
998     CANCEL_BACKGROUND_READ_BUTTON(
999         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_BACKGROUND_READ_BUTTON,
1000         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_BACKGROUND_READ_BUTTON,
1001     ),
1002 }
1003 
1004 /** Loggable elements in the Request History Read permission page. */
1005 enum class RequestHistoryReadPermissionElement(
1006     override val impressionId: Int,
1007     override val interactionId: Int,
1008 ) : ElementName {
1009     ALLOW_HISTORY_READ_BUTTON(
1010         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_HISTORY_READ_BUTTON,
1011         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_HISTORY_READ_BUTTON,
1012     ),
1013     CANCEL_HISTORY_READ_BUTTON(
1014         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_HISTORY_READ_BUTTON,
1015         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_HISTORY_READ_BUTTON,
1016     ),
1017 }
1018 
1019 enum class AdditionalAccessElement(
1020     override val impressionId: Int,
1021     override val interactionId: Int,
1022 ) : ElementName {
1023     EXERCISE_ROUTES_BUTTON(
1024         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_BUTTON,
1025         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_BUTTON,
1026     ),
1027     HISTORY_READ_BUTTON(
1028         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_HISTORY_READ_BUTTON,
1029         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_HISTORY_READ_BUTTON,
1030     ),
1031     BACKGROUND_READ_BUTTON(
1032         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__BACKGROUND_READ_BUTTON,
1033         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__BACKGROUND_READ_BUTTON,
1034     ),
1035     EXERCISE_ROUTES_DIALOG_CONTAINER(
1036         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_CONTAINER,
1037         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_CONTAINER,
1038     ),
1039     EXERCISE_ROUTES_ALLOW_ALL_BUTTON(
1040         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_ALLOW_ALL_BUTTON,
1041         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_ALLOW_ALL_BUTTON,
1042     ),
1043     EXERCISE_ROUTES_ASK_BUTTON(
1044         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_ASK_BUTTON,
1045         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_ASK_BUTTON,
1046     ),
1047     EXERCISE_ROUTES_DIALOG_DENY_BUTTON(
1048         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_DENY_BUTTON,
1049         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_DENY_BUTTON,
1050     ),
1051     ENABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER(
1052         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER,
1053         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER,
1054     ),
1055     ENABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON(
1056         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON,
1057         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON,
1058     ),
1059     ENABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON(
1060         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON,
1061         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON,
1062     ),
1063     DISABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER(
1064         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER,
1065         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER,
1066     ),
1067     DISABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON(
1068         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON,
1069         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON,
1070     ),
1071     DISABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON(
1072         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON,
1073         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON,
1074     ),
1075 }
1076 
1077 /** Loggable elements in the toolbar. */
1078 enum class ToolbarElement(override val impressionId: Int, override val interactionId: Int) :
1079     ElementName {
1080     // Represents main menu
1081     TOOLBAR_SETTINGS_BUTTON(
1082         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_SETTINGS_BUTTON,
1083         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_SETTINGS_BUTTON,
1084     ),
1085     TOOLBAR_HELP_BUTTON(
1086         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_HELP_BUTTON,
1087         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_HELP_BUTTON,
1088     ),
1089     // TODO update
1090     TOOLBAR_UNITS_BUTTON(
1091         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_BUTTON,
1092         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_BUTTON,
1093     ),
1094     // TODO not sure if this will be needed
1095     TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON(
1096         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON,
1097         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON,
1098     ),
1099     TOOLBAR_DATA_SOURCES_BUTTON(
1100         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_SOURCES_MENU_BUTTON,
1101         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_SOURCES_MENU_BUTTON,
1102     ),
1103     TOOLBAR_ENTER_DELETION_STATE_BUTTON(
1104         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENTER_DELETION_STATE_MENU_BUTTON,
1105         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENTER_DELETION_STATE_MENU_BUTTON,
1106     ),
1107     TOOLBAR_EXIT_DELETION_STATE_BUTTON(
1108         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXIT_DELETION_STATE_MENU_BUTTON,
1109         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXIT_DELETION_STATE_MENU_BUTTON,
1110     ),
1111     TOOLBAR_DELETE_BUTTON(
1112         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_MENU_BUTTON,
1113         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_MENU_BUTTON,
1114     ),
1115 }
1116 
1117 /** Loggable elements in the Entry details page. */
1118 enum class MigrationElement(override val impressionId: Int, override val interactionId: Int) :
1119     ElementName {
1120     MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON(
1121         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON,
1122         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON,
1123     ),
1124     MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON(
1125         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON,
1126         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON,
1127     ),
1128     MIGRATION_PAUSED_CONTINUE_BUTTON(
1129         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PAUSED_CONTINUE_BUTTON,
1130         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PAUSED_CONTINUE_BUTTON,
1131     ),
1132     MIGRATION_DONE_DIALOG_CONTAINER(
1133         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_DONE_DIALOG_CONTAINER,
1134         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_DONE_DIALOG_CONTAINER,
1135     ),
1136     MIGRATION_DONE_DIALOG_BUTTON(
1137         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_DONE_DIALOG_BUTTON,
1138         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_DONE_DIALOG_BUTTON,
1139     ),
1140     MIGRATION_IN_PROGRESS_DIALOG_CONTAINER(
1141         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_CONTAINER,
1142         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_CONTAINER,
1143     ),
1144     MIGRATION_IN_PROGRESS_DIALOG_BUTTON(
1145         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_BUTTON,
1146         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_BUTTON,
1147     ),
1148     MIGRATION_PENDING_DIALOG_CONTAINER(
1149         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTAINER,
1150         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTAINER,
1151     ),
1152     MIGRATION_PENDING_DIALOG_CANCEL_BUTTON(
1153         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CANCEL_BUTTON,
1154         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CANCEL_BUTTON,
1155     ),
1156     MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON(
1157         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON,
1158         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON,
1159     ),
1160     MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER(
1161         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER,
1162         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER,
1163     ),
1164     MIGRATION_NOT_COMPLETE_DIALOG_BUTTON(
1165         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_BUTTON,
1166         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_BUTTON,
1167     ),
1168     MIGRATION_RESUME_BANNER(
1169         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_RESUME_BANNER,
1170         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_RESUME_BANNER,
1171     ),
1172     MIGRATION_RESUME_BANNER_BUTTON(
1173         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_RESUME_BANNER_BUTTON,
1174         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_RESUME_BANNER_BUTTON,
1175     ),
1176     MIGRATION_APP_UPDATE_BANNER(
1177         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_BANNER,
1178         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_APP_UPDATE_BANNER,
1179     ),
1180     MIGRATION_APP_UPDATE_BUTTON(
1181         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_BUTTON,
1182         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_APP_UPDATE_BUTTON,
1183     ),
1184     MIGRATION_APP_UPDATE_LEARN_MORE_BUTTON(
1185         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_LEARN_MORE_BUTTON,
1186         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_LEARN_MORE_BUTTON,
1187     ),
1188     MIGRATION_APP_UPDATE_BANNER_DISMISS_BUTTON(
1189         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_DISMISS_BUTTON,
1190         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_APP_UPDATE_DISMISS_BUTTON,
1191     ),
1192 }
1193 
1194 enum class DataRestoreElement(override val impressionId: Int, override val interactionId: Int) :
1195     ElementName {
1196     RESTORE_IN_PROGRESS_DIALOG_CONTAINER(
1197         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_CONTAINER,
1198         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_CONTAINER,
1199     ),
1200     RESTORE_IN_PROGRESS_DIALOG_BUTTON(
1201         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_BUTTON,
1202         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_BUTTON,
1203     ),
1204     RESTORE_PENDING_BANNER(
1205         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER,
1206         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER,
1207     ),
1208     RESTORE_PENDING_BANNER_UPDATE_BUTTON(
1209         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER_UPDATE_BUTTON,
1210         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER_UPDATE_BUTTON,
1211     ),
1212 }
1213 
1214 /** Loggable elements in the Data sources page. */
1215 enum class DataSourcesElement(override val impressionId: Int, override val interactionId: Int) :
1216     ElementName {
1217     DATA_TYPE_SPINNER(
1218         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_TYPE_SPINNER_BUTTON,
1219         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_TYPE_SPINNER_BUTTON,
1220     ),
1221     DATA_TOTALS_CARD(
1222         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_TOTALS_CARD,
1223         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_TOTALS_CARD,
1224     ),
1225     APP_SOURCE_BUTTON(
1226         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_SOURCE_BUTTON,
1227         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_SOURCE_BUTTON,
1228     ),
1229     ADD_AN_APP_BUTTON(
1230         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ADD_AN_APP_BUTTON,
1231         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ADD_AN_APP_BUTTON,
1232     ),
1233     EDIT_SOURCE_LIST_BUTTON(
1234         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EDIT_SOURCE_LIST_BUTTON,
1235         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EDIT_SOURCE_LIST_BUTTON,
1236     ),
1237     REORDER_APP_SOURCE_BUTTON(
1238         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REORDER_APP_SOURCE_BUTTON,
1239         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REORDER_APP_SOURCE_BUTTON,
1240     ),
1241     REMOVE_APP_SOURCE_BUTTON(
1242         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REMOVE_APP_SOURCE_BUTTON,
1243         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REMOVE_APP_SOURCE_BUTTON,
1244     ),
1245 }
1246 
1247 /** Loggable elements in the Add an app page. */
1248 enum class AddAnAppElement(override val impressionId: Int, override val interactionId: Int) :
1249     ElementName {
1250     POTENTIAL_PRIORITY_APP_BUTTON(
1251         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__POTENTIAL_PRIORITY_APP_BUTTON,
1252         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__POTENTIAL_PRIORITY_APP_BUTTON,
1253     )
1254 }
1255 
1256 enum class RouteRequestElement(override val impressionId: Int, override val interactionId: Int) :
1257     ElementName {
1258     EXERCISE_ROUTE_REQUEST_DIALOG_CONTAINER(
1259         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_CONTAINER,
1260         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_CONTAINER,
1261     ),
1262     EXERCISE_ROUTE_DIALOG_INFORMATION_BUTTON(
1263         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_INFORMATION_BUTTON,
1264         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_INFORMATION_BUTTON,
1265     ),
1266     EXERCISE_ROUTE_DIALOG_ROUTE_VIEW(
1267         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_ROUTE_VIEW,
1268         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_ROUTE_VIEW,
1269     ),
1270     EXERCISE_ROUTE_DIALOG_ALLOW_BUTTON(
1271         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALLOW_BUTTON,
1272         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALLOW_BUTTON,
1273     ),
1274     EXERCISE_ROUTE_DIALOG_ALWAYS_ALLOW_BUTTON(
1275         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALWAYS_ALLOW_BUTTON,
1276         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALWAYS_ALLOW_BUTTON,
1277     ),
1278     EXERCISE_ROUTE_DIALOG_DONT_ALLOW_BUTTON(
1279         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_DONT_ALLOW_BUTTON,
1280         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_DONT_ALLOW_BUTTON,
1281     ),
1282     EXERCISE_ROUTE_EDUCATION_DIALOG_CONTAINER(
1283         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_CONTAINER,
1284         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_CONTAINER,
1285     ),
1286     EXERCISE_ROUTE_EDUCATION_DIALOG_BACK_BUTTON(
1287         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_BACK_BUTTON,
1288         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_BACK_BUTTON,
1289     ),
1290 }
1291 
1292 /** Loggable elements in the Backup and restore page */
1293 enum class BackupAndRestoreElement(
1294     override val impressionId: Int,
1295     override val interactionId: Int,
1296 ) : ElementName {
1297     SCHEDULED_EXPORT_BUTTON(
1298         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SCHEDULED_EXPORT_BUTTON,
1299         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SCHEDULED_EXPORT_BUTTON,
1300     ),
1301     RESTORE_DATA_BUTTON(
1302         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__RESTORE_DATA_BUTTON,
1303         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__RESTORE_DATA_BUTTON,
1304     ),
1305     IMPORT_GENERAL_ERROR_BANNER(
1306         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_GENERAL_ERROR_BANNER,
1307         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_GENERAL_ERROR_BANNER,
1308     ),
1309     IMPORT_GENERAL_ERROR_BANNER_BUTTON(
1310         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_GENERAL_ERROR_BANNER_BUTTON,
1311         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_GENERAL_ERROR_BANNER_BUTTON,
1312     ),
1313     IMPORT_VERSION_MISMATCH_ERROR_BANNER(
1314         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_VERSION_MISMATCH_ERROR_BANNER,
1315         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_VERSION_MISMATCH_ERROR_BANNER,
1316     ),
1317     IMPORT_VERSION_MISMATCH_ERROR_BANNER_BUTTON(
1318         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_VERSION_MISMATCH_ERROR_BANNER_BUTTON,
1319         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_VERSION_MISMATCH_ERROR_BANNER_BUTTON,
1320     ),
1321     IMPORT_WRONG_FILE_ERROR_BANNER(
1322         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_WRONG_FILE_ERROR_BANNER,
1323         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_WRONG_FILE_ERROR_BANNER,
1324     ),
1325     IMPORT_WRONG_FILE_ERROR_BANNER_BUTTON(
1326         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_WRONG_FILE_ERROR_BANNER_BUTTON,
1327         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_WRONG_FILE_ERROR_BANNER_BUTTON,
1328     ),
1329 }
1330 
1331 /** Loggable elements in the Export frequency page */
1332 enum class ExportFrequencyElement(override val impressionId: Int, override val interactionId: Int) :
1333     ElementName {
1334     EXPORT_FREQUENCY_DAILY_BUTTON(
1335         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_DAILY_BUTTON,
1336         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_DAILY_BUTTON,
1337     ),
1338     EXPORT_FREQUENCY_WEEKLY_BUTTON(
1339         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_WEEKLY_BUTTON,
1340         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_WEEKLY_BUTTON,
1341     ),
1342     EXPORT_FREQUENCY_MONTHLY_BUTTON(
1343         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_MONTHLY_BUTTON,
1344         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_MONTHLY_BUTTON,
1345     ),
1346     EXPORT_FREQUENCY_BACK_BUTTON(
1347         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_BACK_BUTTON,
1348         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_BACK_BUTTON,
1349     ),
1350     EXPORT_FREQUENCY_NEXT_BUTTON(
1351         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_NEXT_BUTTON,
1352         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_NEXT_BUTTON,
1353     ),
1354 }
1355 
1356 /** Loggable elements in the Export destination page */
1357 enum class ExportDestinationElement(
1358     override val impressionId: Int,
1359     override val interactionId: Int,
1360 ) : ElementName {
1361     EXPORT_DESTINATION_BACK_BUTTON(
1362         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_DESTINATION_BACK_BUTTON,
1363         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_DESTINATION_BACK_BUTTON,
1364     ),
1365     EXPORT_DESTINATION_NEXT_BUTTON(
1366         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_FREQUENCY_NEXT_BUTTON,
1367         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_FREQUENCY_NEXT_BUTTON,
1368     ),
1369 }
1370 
1371 /** Loggable elements in the Scheduled export fragment page */
1372 enum class ScheduledExportElement(override val impressionId: Int, override val interactionId: Int) :
1373     ElementName {
1374     EXPORT_CONTROL_SWITCH_ON(
1375         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_CONTROL_SWITCH_ON,
1376         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_CONTROL_SWITCH_ON,
1377     ),
1378     EXPORT_CONTROL_SWITCH_OFF(
1379         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_CONTROL_SWITCH_OFF,
1380         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_CONTROL_SWITCH_OFF,
1381     ),
1382     EXPORT_SETTINGS_FREQUENCY_DAILY(
1383         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_DAILY,
1384         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_DAILY,
1385     ),
1386     EXPORT_SETTINGS_FREQUENCY_WEEKLY(
1387         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_WEEKLY,
1388         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_WEEKLY,
1389     ),
1390     EXPORT_SETTINGS_FREQUENCY_MONTHLY(
1391         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_MONTHLY,
1392         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_SETTINGS_FREQUENCY_MONTHLY,
1393     ),
1394 }
1395 
1396 /** Loggable elements in the Import source location page */
1397 enum class ImportSourceLocationElement(
1398     override val impressionId: Int,
1399     override val interactionId: Int,
1400 ) : ElementName {
1401     IMPORT_SOURCE_LOCATION_CANCEL_BUTTON(
1402         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_SOURCE_LOCATION_CANCEL_BUTTON,
1403         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_SOURCE_LOCATION_CANCEL_BUTTON,
1404     ),
1405     IMPORT_SOURCE_LOCATION_NEXT_BUTTON(
1406         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_SOURCE_LOCATION_NEXT_BUTTON,
1407         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_SOURCE_LOCATION_NEXT_BUTTON,
1408     ),
1409 }
1410 
1411 /** Loggable elements in the Import confirmation dialog page */
1412 enum class ImportConfirmationDialogElement(
1413     override val impressionId: Int,
1414     override val interactionId: Int,
1415 ) : ElementName {
1416     IMPORT_CONFIRMATION_CANCEL_BUTTON(
1417         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_CONFIRMATION_CANCEL_BUTTON,
1418         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_CONFIRMATION_CANCEL_BUTTON,
1419     ),
1420     IMPORT_CONFIRMATION_DONE_BUTTON(
1421         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_CONFIRMATION_DONE_BUTTON,
1422         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_CONFIRMATION_DONE_BUTTON,
1423     ),
1424     IMPORT_CONFIRMATION_CONTAINER(
1425         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__IMPORT_CONFIRMATION_CONTAINER,
1426         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__IMPORT_CONFIRMATION_CONTAINER,
1427     ),
1428 }
1429 
1430 enum class AllDataElement(override val impressionId: Int, override val interactionId: Int) :
1431     ElementName {
1432     PERMISSION_TYPE_BUTTON_WITH_CHECKBOX(
1433         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_TYPE_BUTTON_WITH_CHECKBOX,
1434         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_TYPE_BUTTON_WITH_CHECKBOX,
1435     ),
1436     PERMISSION_TYPE_BUTTON_NO_CHECKBOX(
1437         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_TYPE_BUTTON_NO_CHECKBOX,
1438         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_TYPE_BUTTON_NO_CHECKBOX,
1439     ),
1440     SELECT_ALL_BUTTON(
1441         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SELECT_ALL_BUTTON,
1442         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SELECT_ALL_BUTTON,
1443     ),
1444 }
1445 
1446 enum class AllEntriesElement(override val impressionId: Int, override val interactionId: Int) :
1447     ElementName {
1448     ENTRY_BUTTON_WITH_CHECKBOX(
1449         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENTRY_BUTTON_WITH_CHECKBOX,
1450         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENTRY_BUTTON_WITH_CHECKBOX,
1451     ),
1452     ENTRY_BUTTON_NO_CHECKBOX(
1453         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENTRY_BUTTON_NO_CHECKBOX,
1454         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENTRY_BUTTON_NO_CHECKBOX,
1455     ),
1456     DATE_VIEW_SPINNER_DAY(
1457         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATE_VIEW_SPINNER_DAY,
1458         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATE_VIEW_SPINNER_DAY,
1459     ),
1460     DATE_VIEW_SPINNER_WEEK(
1461         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATE_VIEW_SPINNER_WEEK,
1462         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATE_VIEW_SPINNER_WEEK,
1463     ),
1464     DATE_VIEW_SPINNER_MONTH(
1465         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATE_VIEW_SPINNER_YEAR,
1466         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATE_VIEW_SPINNER_YEAR,
1467     ),
1468 }
1469 
1470 enum class CombinedAppAccessElement(
1471     override val impressionId: Int,
1472     override val interactionId: Int,
1473 ) : ElementName {
1474     FITNESS_PERMISSIONS_BUTTON(
1475         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FITNESS_PERMISSIONS_BUTTON,
1476         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FITNESS_PERMISSIONS_BUTTON,
1477     ),
1478     MEDICAL_PERMISSIONS_BUTTON(
1479         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MEDICAL_PERMISSIONS_BUTTON,
1480         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MEDICAL_PERMISSIONS_BUTTON,
1481     ),
1482     REMOVE_ALL_PERMISSIONS_BUTTON(
1483         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REMOVE_ALL_PERMISSIONS_BUTTON,
1484         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REMOVE_ALL_PERMISSIONS_BUTTON,
1485     ),
1486 }
1487 
1488 /** Loggable elements belonging to the RawFhirPage. */
1489 enum class RawFhirPageElement(override val impressionId: Int, override val interactionId: Int) :
1490     ElementName {
1491     RAW_FHIR_RESOURCE(
1492         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__RAW_FHIR_RESOURCE,
1493         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__RAW_FHIR_RESOURCE,
1494     )
1495 }
1496 
1497 /** Loggable elements belonging to MedicalWritePermissionFragment elements. */
1498 enum class MedicalWritePermissionPageElement(
1499     override val impressionId: Int,
1500     override val interactionId: Int,
1501 ) : ElementName {
1502     ALLOW_WRITE_HEALTH_RECORDS_BUTTON(
1503         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_WRITE_HEALTH_RECORDS_BUTTON,
1504         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_WRITE_HEALTH_RECORDS_BUTTON,
1505     ),
1506     CANCEL_WRITE_HEALTH_RECORDS_BUTTON(
1507         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_WRITE_HEALTH_RECORDS_BUTTON,
1508         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_WRITE_HEALTH_RECORDS_BUTTON,
1509     ),
1510 }
1511 
1512 /** Loggable elements belonging to the error page, and the unknown element. */
1513 enum class ErrorPageElement(override val impressionId: Int, override val interactionId: Int) :
1514     ElementName {
1515     UNKNOWN_ELEMENT(
1516         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN,
1517         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN,
1518     )
1519 }
1520 
1521 /** Loggable elements belonging to any page with unknown elements. */
1522 enum class UnknownGenericElement(override val impressionId: Int, override val interactionId: Int) :
1523     ElementName {
1524     UNKNOWN_BANNER(
1525         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_BANNER,
1526         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_BANNER,
1527     ),
1528     UNKNOWN_BANNER_BUTTON(
1529         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_BANNER_BUTTON,
1530         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_BANNER_BUTTON,
1531     ),
1532     UNKNOWN_HEALTH_PREFERENCE(
1533         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_HEALTH_PREFERENCE,
1534         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_HEALTH_PREFERENCE,
1535     ),
1536     UNKNOWN_DIALOG(
1537         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_DIALOG,
1538         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_DIALOG,
1539     ),
1540     UNKNOWN_DIALOG_POSITIVE_BUTTON(
1541         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_DIALOG_POSITIVE_BUTTON,
1542         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_DIALOG_POSITIVE_BUTTON,
1543     ),
1544     UNKNOWN_DIALOG_NEGATIVE_BUTTON(
1545         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_DIALOG_NEGATIVE_BUTTON,
1546         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_DIALOG_NEGATIVE_BUTTON,
1547     ),
1548     UNKNOWN_DIALOG_NEUTRAL_BUTTON(
1549         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_DIALOG_NEUTRAL_BUTTON,
1550         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_DIALOG_NEUTRAL_BUTTON,
1551     ),
1552     UNKNOWN_SWITCH_ACTIVE_PREFERENCE(
1553         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_SWITCH_ACTIVE_PREFERENCE,
1554         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_SWITCH_ACTIVE_PREFERENCE,
1555     ),
1556     UNKNOWN_SWITCH_INACTIVE_PREFERENCE(
1557         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_SWITCH_INACTIVE_PREFERENCE,
1558         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_SWITCH_INACTIVE_PREFERENCE,
1559     ),
1560     UNKNOWN_BUTTON(
1561         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__UNKNOWN_BUTTON,
1562         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__UNKNOWN_BUTTON,
1563     ),
1564 }
1565 
1566 @EntryPoint
1567 @InstallIn(SingletonComponent::class)
1568 interface HealthConnectLoggerEntryPoint {
loggernull1569     fun logger(): HealthConnectLogger
1570 }
1571