• 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 com.android.healthconnect.controller.HealthFitnessUiStatsLog
19 import com.android.healthconnect.controller.HealthFitnessUiStatsLog.*
20 import dagger.hilt.EntryPoint
21 import dagger.hilt.InstallIn
22 import dagger.hilt.components.SingletonComponent
23 import javax.inject.Inject
24 import javax.inject.Singleton
25 
26 /** Helper class for logging UI Impressions and Interactions. */
27 @Singleton
28 class HealthConnectLogger @Inject constructor() {
29 
30     private var pageName = PageName.UNKNOWN_PAGE
31 
32     /**
33      * Sets the page ID which will be used for all impressions and interaction logging on this page.
34      */
setPageIdnull35     fun setPageId(pageName: PageName) {
36         this.pageName = pageName
37     }
38 
39     /** Logs the impression of a page. */
logPageImpressionnull40     fun logPageImpression() {
41         HealthFitnessUiStatsLog.write(HEALTH_CONNECT_UI_IMPRESSION, pageName.impressionId)
42     }
43 
44     /** Logs the impression of an element. */
logImpressionnull45     fun logImpression(element: ElementName) {
46         HealthFitnessUiStatsLog.write(
47             HEALTH_CONNECT_UI_IMPRESSION, pageName.impressionId, element.impressionId)
48     }
49 
50     /** Logs the interaction with an element. */
logInteractionnull51     fun logInteraction(element: ElementName, action: UIAction = UIAction.ACTION_CLICK) {
52         HealthFitnessUiStatsLog.write(
53             HEALTH_CONNECT_UI_INTERACTION, pageName.interactionId, element.interactionId, action.id)
54     }
55 }
56 
57 /** Enum class for UI Actions, used to specify whether we wish to log a click or a toggle. */
58 enum class UIAction(val id: Int) {
59     ACTION_CLICK(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_CLICK),
60     ACTION_TOGGLE_ON(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_TOGGLE_ON),
61     ACTION_TOGGLE_OFF(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_TOGGLE_OFF),
62     ACTION_UNKNOWN(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_UNKNOWN)
63 }
64 
65 /** Enum class for PageName. Each loggable fragment in the application should define a page name. */
66 enum class PageName(val impressionId: Int, val interactionId: Int) {
67     HOME_PAGE(
68         HEALTH_CONNECT_UI_IMPRESSION__PAGE__HOME_PAGE,
69         HEALTH_CONNECT_UI_INTERACTION__PAGE__HOME_PAGE),
70     ONBOARDING_PAGE(
71         HEALTH_CONNECT_UI_IMPRESSION__PAGE__ONBOARDING_PAGE,
72         HEALTH_CONNECT_UI_INTERACTION__PAGE__ONBOARDING_PAGE),
73     RECENT_ACCESS_PAGE(
74         HEALTH_CONNECT_UI_IMPRESSION__PAGE__RECENT_ACCESS_PAGE,
75         HEALTH_CONNECT_UI_INTERACTION__PAGE__RECENT_ACCESS_PAGE),
76     APP_PERMISSIONS_PAGE(
77         HEALTH_CONNECT_UI_IMPRESSION__PAGE__APP_PERMISSIONS_PAGE,
78         HEALTH_CONNECT_UI_INTERACTION__PAGE__APP_PERMISSIONS_PAGE),
79     // TODO (b/270965648) not needed
80     APP_PERMISSIONS_EMPTY_STATE_PAGE(
81         HEALTH_CONNECT_UI_IMPRESSION__PAGE__APP_PERMISSIONS_EMPTY_STATE_PAGE,
82         HEALTH_CONNECT_UI_INTERACTION__PAGE__APP_PERMISSIONS_EMPTY_STATE_PAGE),
83     HELP_AND_FEEDBACK_PAGE(
84         HEALTH_CONNECT_UI_IMPRESSION__PAGE__HELP_AND_FEEDBACK_PAGE,
85         HEALTH_CONNECT_UI_INTERACTION__PAGE__HELP_AND_FEEDBACK_PAGE),
86     CATEGORIES_PAGE(
87         HEALTH_CONNECT_UI_IMPRESSION__PAGE__CATEGORIES_PAGE,
88         HEALTH_CONNECT_UI_INTERACTION__PAGE__CATEGORIES_PAGE),
89     AUTO_DELETE_PAGE(
90         HEALTH_CONNECT_UI_IMPRESSION__PAGE__AUTO_DELETE_PAGE,
91         HEALTH_CONNECT_UI_INTERACTION__PAGE__AUTO_DELETE_PAGE),
92     PERMISSION_TYPES_PAGE(
93         HEALTH_CONNECT_UI_IMPRESSION__PAGE__PERMISSION_TYPES_PAGE,
94         HEALTH_CONNECT_UI_INTERACTION__PAGE__PERMISSION_TYPES_PAGE),
95     DATA_ACCESS_PAGE(
96         HEALTH_CONNECT_UI_IMPRESSION__PAGE__DATA_ACCESS_PAGE,
97         HEALTH_CONNECT_UI_INTERACTION__PAGE__DATA_ACCESS_PAGE),
98     DATA_ENTRIES_PAGE(
99         HEALTH_CONNECT_UI_IMPRESSION__PAGE__DATA_ENTRIES_PAGE,
100         HEALTH_CONNECT_UI_INTERACTION__PAGE__DATA_ENTRIES_PAGE),
101     ENTRY_DETAILS_PAGE(
102         HEALTH_CONNECT_UI_IMPRESSION__PAGE__ENTRY_DETAILS_PAGE,
103         HEALTH_CONNECT_UI_INTERACTION__PAGE__ENTRY_DETAILS_PAGE),
104     APP_ACCESS_PAGE(
105         HEALTH_CONNECT_UI_IMPRESSION__PAGE__APP_ACCESS_PAGE,
106         HEALTH_CONNECT_UI_INTERACTION__PAGE__APP_ACCESS_PAGE),
107     UNITS_PAGE(
108         HEALTH_CONNECT_UI_IMPRESSION__PAGE__UNITS_PAGE,
109         HEALTH_CONNECT_UI_INTERACTION__PAGE__UNITS_PAGE),
110     ALL_CATEGORIES_PAGE(
111         HEALTH_CONNECT_UI_IMPRESSION__PAGE__ALL_CATEGORIES_PAGE,
112         HEALTH_CONNECT_UI_INTERACTION__PAGE__ALL_CATEGORIES_PAGE),
113     REQUEST_PERMISSIONS_PAGE(
114         HEALTH_CONNECT_UI_IMPRESSION__PAGE__REQUEST_PERMISSIONS_PAGE,
115         HEALTH_CONNECT_UI_INTERACTION__PAGE__REQUEST_PERMISSIONS_PAGE),
116     MANAGE_PERMISSIONS_PAGE(
117         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MANAGE_PERMISSIONS_PAGE,
118         HEALTH_CONNECT_UI_INTERACTION__PAGE__MANAGE_PERMISSIONS_PAGE),
119     SETTINGS_MANAGE_PERMISSIONS_PAGE(
120         HEALTH_CONNECT_UI_IMPRESSION__PAGE__SETTINGS_MANAGE_PERMISSIONS_PAGE,
121         HEALTH_CONNECT_UI_INTERACTION__PAGE__SETTINGS_MANAGE_PERMISSIONS_PAGE),
122     MIGRATION_IN_PROGRESS_PAGE(
123         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_IN_PROGRESS_PAGE,
124         HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_IN_PROGRESS_PAGE),
125     MIGRATION_APP_UPDATE_NEEDED_PAGE(
126         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_APP_UPDATE_NEEDED_PAGE,
127         HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_APP_UPDATE_NEEDED_PAGE),
128     MIGRATION_MODULE_UPDATE_NEEDED_PAGE(
129         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_MODULE_UPDATE_NEEDED_PAGE,
130         HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_MODULE_UPDATE_NEEDED_PAGE),
131     MIGRATION_MORE_SPACE_NEEDED_PAGE(
132         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_MORE_SPACE_NEEDED_PAGE,
133         HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_MORE_SPACE_NEEDED_PAGE),
134     MIGRATION_PAUSED_PAGE(
135         HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_PAUSED_PAGE,
136         HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_PAUSED_PAGE),
137     UNKNOWN_PAGE(
138         HEALTH_CONNECT_UI_IMPRESSION__PAGE__PAGE_UNKNOWN,
139         HEALTH_CONNECT_UI_INTERACTION__PAGE__PAGE_UNKNOWN)
140 }
141 
142 /** Common interface for loggable elements. */
143 interface ElementName {
144     val impressionId: Int
145     val interactionId: Int
146 }
147 
148 /** Loggable elements in the Home page. */
149 enum class HomePageElement(override val impressionId: Int, override val interactionId: Int) :
150     ElementName {
151     APP_PERMISSIONS_BUTTON(
152         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_PERMISSIONS_BUTTON,
153         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_PERMISSIONS_BUTTON),
154     DATA_AND_ACCESS_BUTTON(
155         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_AND_ACCESS_BUTTON,
156         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_AND_ACCESS_BUTTON),
157     SEE_ALL_RECENT_ACCESS_BUTTON(
158         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_RECENT_ACCESS_BUTTON,
159         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_RECENT_ACCESS_BUTTON),
160 }
161 
162 /** Loggable elements in the Onboarding page. */
163 enum class OnboardingElement(override val impressionId: Int, override val interactionId: Int) :
164     ElementName {
165     ONBOARDING_COMPLETED_BUTTON(
166         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ONBOARDING_COMPLETED_BUTTON,
167         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ONBOARDING_COMPLETED_BUTTON),
168     ONBOARDING_GO_BACK_BUTTON(
169         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ONBOARDING_GO_BACK_BUTTON,
170         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ONBOARDING_GO_BACK_BUTTON),
171 }
172 
173 /** Loggable elements in the Recent Access page. */
174 enum class RecentAccessElement(override val impressionId: Int, override val interactionId: Int) :
175     ElementName {
176     RECENT_ACCESS_ENTRY_BUTTON(
177         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__RECENT_ACCESS_ENTRY,
178         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__RECENT_ACCESS_ENTRY),
179     MANAGE_PERMISSIONS_FAB(
180         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MANAGE_PERMISSIONS_FLOATING_BUTTON,
181         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MANAGE_PERMISSIONS_FLOATING_BUTTON),
182 }
183 
184 /** Loggable elements in the Category and All categories pages. */
185 enum class CategoriesElement(override val impressionId: Int, override val interactionId: Int) :
186     ElementName {
187     CATEGORY_BUTTON(
188         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CATEGORY_BUTTON,
189         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CATEGORY_BUTTON),
190     SEE_ALL_CATEGORIES_BUTTON(
191         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_CATEGORIES_BUTTON,
192         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_CATEGORIES_BUTTON),
193     EXPORT_DATA_BUTTON(
194         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_DATA_BUTTON,
195         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_DATA_BUTTON),
196     AUTO_DELETE_BUTTON(
197         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_BUTTON,
198         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_BUTTON),
199     DELETE_ALL_DATA_BUTTON(
200         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_ALL_DATA_BUTTON,
201         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_ALL_DATA_BUTTON),
202 }
203 
204 /** Loggable elements in the App Permissions and Settings App Permission pages. */
205 enum class AppPermissionsElement(override val impressionId: Int, override val interactionId: Int) :
206     ElementName {
207     SEARCH_BUTTON(
208         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEARCH_BUTTON,
209         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEARCH_BUTTON),
210     CONNECTED_APP_BUTTON(
211         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CONNECTED_APP_BUTTON,
212         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CONNECTED_APP_BUTTON),
213     NOT_CONNECTED_APP_BUTTON(
214         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__NOT_CONNECTED_APP_BUTTON,
215         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__NOT_CONNECTED_APP_BUTTON),
216     INACTIVE_APP_DELETE_BUTTON(
217         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__INACTIVE_APP_DELETE_BUTTON,
218         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__INACTIVE_APP_DELETE_BUTTON),
219     REMOVE_ALL_APPS_PERMISSIONS_BUTTON(
220         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REMOVE_ALL_APPS_PERMISSIONS_BUTTON,
221         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REMOVE_ALL_APPS_PERMISSIONS_BUTTON),
222     HELP_AND_FEEDBACK_BUTTON(
223         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__HELP_AND_FEEDBACK_BUTTON,
224         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__HELP_AND_FEEDBACK_BUTTON),
225     CHECK_FOR_UPDATES_BUTTON(
226         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHECK_FOR_UPDATES_BUTTON,
227         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHECK_FOR_UPDATES_BUTTON),
228     SEE_ALL_COMPATIBLE_APPS_BUTTON(
229         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_COMPATIBLE_APPS_BUTTON,
230         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_COMPATIBLE_APPS_BUTTON),
231 }
232 
233 /** Loggable elements in the App Access page. */
234 enum class AppAccessElement(override val impressionId: Int, override val interactionId: Int) :
235     ElementName {
236     ALLOW_ALL_PERMISSIONS_SWITCH_ACTIVE(
237         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_ACTIVE,
238         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_ACTIVE),
239     ALLOW_ALL_PERMISSIONS_SWITCH_INACTIVE(
240         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_INACTIVE,
241         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_INACTIVE),
242     PERMISSION_SWITCH_ACTIVE(
243         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_SWITCH_ACTIVE,
244         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_SWITCH_ACTIVE),
245     PERMISSION_SWITCH_INACTIVE(
246         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_SWITCH_INACTIVE,
247         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_SWITCH_INACTIVE),
248     DELETE_APP_DATA_BUTTON(
249         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_APP_DATA_BUTTON,
250         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_APP_DATA_BUTTON),
251     PRIVACY_POLICY_LINK(
252         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PRIVACY_POLICY_LINK,
253         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PRIVACY_POLICY_LINK),
254 }
255 
256 /** Loggable elements in the Permission types page. */
257 enum class PermissionTypesElement(override val impressionId: Int, override val interactionId: Int) :
258     ElementName {
259     APP_FILTER_BUTTON(
260         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_FILTER_BUTTON,
261         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_FILTER_BUTTON),
262     PERMISSION_TYPE_BUTTON(
263         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_TYPE_BUTTON,
264         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_TYPE_BUTTON),
265     SET_APP_PRIORITY_BUTTON(
266         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SET_APP_PRIORITY_BUTTON,
267         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SET_APP_PRIORITY_BUTTON),
268     DELETE_CATEGORY_DATA_BUTTON(
269         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_CATEGORY_DATA_BUTTON,
270         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_CATEGORY_DATA_BUTTON),
271 
272     // App priority dialog
273     // TODO (b/270966817)
274     SET_APP_PRIORITY_DIALOG_CONTAINER(
275         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN,
276         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN),
277     SET_APP_PRIORITY_DIALOG_CANCEL_BUTTON(
278         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN,
279         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN),
280     SET_APP_PRIORITY_DIALOG_SAVE_BUTTON(
281         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN,
282         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN),
283 }
284 
285 /** Loggable elements in the Data access page. */
286 enum class DataAccessElement(override val impressionId: Int, override val interactionId: Int) :
287     ElementName {
288     DATA_ACCESS_APP_BUTTON(
289         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ACCESS_APP_BUTTON,
290         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ACCESS_APP_BUTTON),
291     DATA_ACCESS_INACTIVE_APP_BUTTON(
292         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ACCESS_INACTIVE_APP_BUTTON,
293         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ACCESS_INACTIVE_APP_BUTTON),
294     SEE_ALL_ENTRIES_BUTTON(
295         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_ENTRIES_BUTTON,
296         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_ENTRIES_BUTTON),
297     DELETE_THIS_DATA_BUTTON(
298         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_THIS_DATA_BUTTON,
299         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_THIS_DATA_BUTTON),
300 }
301 
302 /** Loggable elements in the Data entries page. */
303 enum class DataEntriesElement(override val impressionId: Int, override val interactionId: Int) :
304     ElementName {
305     AGGREGATION_DATA_VIEW(
306         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AGGREGATION_DATA_VIEW,
307         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AGGREGATION_DATA_VIEW),
308     DATA_ENTRY_VIEW(
309         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ENTRY_VIEW,
310         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ENTRY_VIEW),
311     DATA_ENTRY_DELETE_BUTTON(
312         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ENTRY_DELETE_BUTTON,
313         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ENTRY_DELETE_BUTTON),
314     EXERCISE_SESSION_ENTRY_BUTTON(
315         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_SESSION_ENTRY_BUTTON,
316         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_SESSION_ENTRY_BUTTON),
317     SLEEP_SESSION_ENTRY_BUTTON(
318         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SLEEP_SESSION_ENTRY_BUTTON,
319         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SLEEP_SESSION_ENTRY_BUTTON),
320     NEXT_DAY_BUTTON(
321         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__NEXT_DAY_BUTTON,
322         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__NEXT_DAY_BUTTON),
323     PREVIOUS_DAY_BUTTON(
324         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PREVIOUS_DAY_BUTTON,
325         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PREVIOUS_DAY_BUTTON),
326     SELECT_DATE_BUTTON(
327         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SELECT_DATE_BUTTON,
328         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SELECT_DATE_BUTTON),
329 }
330 
331 /** Loggable elements in the Entry details page. */
332 enum class EntryDetailsElement(override val impressionId: Int, override val interactionId: Int) :
333     ElementName {
334     SESSION_DETAIL_ENTRY_VIEW(
335         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SESSION_DETAIL_ENTRY_VIEW,
336         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SESSION_DETAIL_ENTRY_VIEW),
337     SESSION_DETAIL_HEADER_VIEW(
338         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SESSION_DETAIL_HEADER_VIEW,
339         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SESSION_DETAIL_HEADER_VIEW),
340 }
341 
342 /** Loggable elements in the Units page. */
343 enum class UnitsElement(override val impressionId: Int, override val interactionId: Int) :
344     ElementName {
345     // Units
346     CHANGE_UNITS_HEIGHT_BUTTON(
347         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_HEIGHT_BUTTON,
348         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_HEIGHT_BUTTON),
349     CHANGE_UNITS_WEIGHT_BUTTON(
350         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_WEIGHT_BUTTON,
351         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_WEIGHT_BUTTON),
352     CHANGE_UNITS_DISTANCE_BUTTON(
353         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_DISTANCE_BUTTON,
354         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_DISTANCE_BUTTON),
355     CHANGE_UNITS_ENERGY_BUTTON(
356         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_ENERGY_BUTTON,
357         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_ENERGY_BUTTON),
358     CHANGE_UNITS_TEMPERATURE_BUTTON(
359         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_TEMPERATURE_BUTTON,
360         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_TEMPERATURE_BUTTON),
361     CANCEL_BUTTON(
362         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_BUTTON,
363         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_BUTTON),
364     // Height
365     CENTIMETERS_BUTTON(
366         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CENTIMETERS_BUTTON,
367         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CENTIMETERS_BUTTON),
368     FEET_AND_INCHES_BUTTON(
369         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FEET_AND_INCHES_BUTTON,
370         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FEET_AND_INCHES_BUTTON),
371     // Weight
372     KILOGRAMS_BUTTON(
373         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KILOGRAMS_BUTTON,
374         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KILOGRAMS_BUTTON),
375     POUNDS_BUTTON(
376         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__POUNDS_BUTTON,
377         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__POUNDS_BUTTON),
378     STONES_BUTTON(
379         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__STONES_BUTTON,
380         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__STONES_BUTTON),
381     // Distance
382     KILOMETERS_BUTTON(
383         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KILOMETERS_BUTTON,
384         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KILOMETERS_BUTTON),
385     MILES_BUTTON(
386         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MILES_BUTTON,
387         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MILES_BUTTON),
388     // Energy
389     CALORIES_BUTTON(
390         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CALORIES_BUTTON,
391         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CALORIES_BUTTON),
392     KILOJOULES_BUTTON(
393         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KILOJOULES_BUTTON,
394         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KILOJOULES_BUTTON),
395     // Temperature
396     CELSIUS_BUTTON(
397         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CELSIUS_BUTTON,
398         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CELSIUS_BUTTON),
399     FAHRENHEIT_BUTTON(
400         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FAHRENHEIT_BUTTON,
401         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FAHRENHEIT_BUTTON),
402     KELVIN_BUTTON(
403         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KELVIN_BUTTON,
404         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KELVIN_BUTTON),
405 }
406 
407 /** Loggable elements in the Auto delete page. */
408 enum class AutoDeleteElement(override val impressionId: Int, override val interactionId: Int) :
409     ElementName {
410     AUTO_DELETE_3_MONTHS_BUTTON(
411         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_THREE_MONTHS_BUTTON,
412         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_THREE_MONTHS_BUTTON),
413     AUTO_DELETE_18_MONTHS_BUTTON(
414         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_EIGHTEEN_MONTHS_BUTTON,
415         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_EIGHTEEN_MONTHS_BUTTON),
416     AUTO_DELETE_NEVER_BUTTON(
417         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_NEVER_BUTTON,
418         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_NEVER_BUTTON),
419 
420     // Auto-delete dialog
421     AUTO_DELETE_DIALOG_CONTAINER(
422         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_DIALOG_CONTAINER,
423         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_DIALOG_CONTAINER),
424     AUTO_DELETE_DIALOG_CANCEL_BUTTON(
425         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_DIALOG_CANCEL_BUTTON,
426         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_DIALOG_CANCEL_BUTTON),
427     AUTO_DELETE_DIALOG_CONFIRM_BUTTON(
428         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_DIALOG_CONFIRM_BUTTON,
429         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_DIALOG_CONFIRM_BUTTON),
430     AUTO_DELETE_CONFIRMATION_DIALOG_CONTAINER(
431         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_CONTAINER,
432         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_CONTAINER,
433     ),
434     AUTO_DELETE_CONFIRMATION_DIALOG_DONE_BUTTON(
435         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_DONE_BUTTON,
436         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_DONE_BUTTON),
437 }
438 
439 /** Loggable elements in the Disconnect app dialog. */
440 enum class DisconnectAppDialogElement(
441     override val impressionId: Int,
442     override val interactionId: Int
443 ) : ElementName {
444     DISCONNECT_APP_DIALOG_CONTAINER(
445         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_CONTAINER,
446         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_CONTAINER),
447     DISCONNECT_APP_DIALOG_CANCEL_BUTTON(
448         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_CANCEL_BUTTON,
449         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_CANCEL_BUTTON),
450     DISCONNECT_APP_DIALOG_CONFIRM_BUTTON(
451         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_CONFIRM_BUTTON,
452         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_CONFIRM_BUTTON),
453     DISCONNECT_APP_DIALOG_DELETE_CHECKBOX(
454         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_DELETE_CHECKBOX,
455         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_DELETE_CHECKBOX),
456 }
457 
458 /** Loggable elements in the Disconnect all apps dialog. */
459 enum class DisconnectAllAppsDialogElement(
460     override val impressionId: Int,
461     override val interactionId: Int
462 ) : ElementName {
463     DISCONNECT_ALL_APPS_DIALOG_CONTAINER(
464         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CONTAINER,
465         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CONTAINER),
466     DISCONNECT_ALL_APPS_DIALOG_CANCEL_BUTTON(
467         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CANCEL_BUTTON,
468         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CANCEL_BUTTON),
469     DISCONNECT_ALL_APPS_DIALOG_REMOVE_ALL_BUTTON(
470         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_REMOVE_ALL_BUTTON,
471         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_REMOVE_ALL_BUTTON),
472 }
473 
474 /** Loggable elements in the Deletion dialog time range picker dialog. */
475 enum class DeletionDialogTimeRangeElement(
476     override val impressionId: Int,
477     override val interactionId: Int
478 ) : ElementName {
479     // Deletion time range dialog
480     DELETION_DIALOG_TIME_RANGE_CONTAINER(
481         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CONTAINER,
482         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CONTAINER),
483     DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON(
484         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON,
485         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON),
486     DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON(
487         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON,
488         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON),
489     DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON(
490         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON,
491         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON),
492     DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON(
493         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON,
494         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON),
495     DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON(
496         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON,
497         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON),
498     DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON(
499         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON,
500         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON,
501     ),
502 }
503 
504 /** Loggable elements in the Deletion dialog confirmation dialog. */
505 enum class DeletionDialogConfirmationElement(
506     override val impressionId: Int,
507     override val interactionId: Int
508 ) : ElementName {
509     DELETION_DIALOG_CONFIRMATION_CONTAINER(
510         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CONTAINER,
511         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CONTAINER),
512     DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON(
513         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON,
514         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON),
515     DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON(
516         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON,
517         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON),
518     DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON(
519         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON,
520         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON),
521     DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON(
522         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON,
523         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON),
524 }
525 
526 /** Loggable elements in the Progress dialog. */
527 enum class ProgressDialogElement(override val impressionId: Int, override val interactionId: Int) :
528     ElementName {
529     DELETION_DIALOG_IN_PROGRESS_CONTAINER(
530         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_IN_PROGRESS_CONTAINER,
531         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_IN_PROGRESS_CONTAINER),
532 }
533 
534 /** Loggable elements in the Success dialog. */
535 enum class SuccessDialogElement(override val impressionId: Int, override val interactionId: Int) :
536     ElementName {
537     DELETION_DIALOG_SUCCESS_CONTAINER(
538         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_SUCCESS_CONTAINER,
539         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_SUCCESS_CONTAINER),
540     DELETION_DIALOG_SUCCESS_DONE_BUTTON(
541         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_SUCCESS_DONE_BUTTON,
542         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_SUCCESS_DONE_BUTTON),
543 }
544 
545 /** Loggable elements in the Failed dialog. */
546 enum class FailedDialogElement(override val impressionId: Int, override val interactionId: Int) :
547     ElementName {
548     DELETION_DIALOG_ERROR_CONTAINER(
549         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_CONTAINER,
550         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_CONTAINER),
551     DELETION_DIALOG_ERROR_CLOSE_BUTTON(
552         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_CLOSE_BUTTON,
553         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_CLOSE_BUTTON),
554     DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON(
555         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON,
556         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON),
557 }
558 
559 /** Loggable elements in the Request and Manage permissions pages. */
560 enum class PermissionsElement(override val impressionId: Int, override val interactionId: Int) :
561     ElementName {
562     ALLOW_PERMISSIONS_BUTTON(
563         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_PERMISSIONS_BUTTON,
564         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_PERMISSIONS_BUTTON),
565     CANCEL_PERMISSIONS_BUTTON(
566         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_PERMISSIONS_BUTTON,
567         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_PERMISSIONS_BUTTON),
568     ALLOW_ALL_SWITCH(
569         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_ALL_SWITCH,
570         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_ALL_SWITCH),
571     PERMISSION_SWITCH(
572         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_SWITCH,
573         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_SWITCH),
574     APP_RATIONALE_LINK(
575         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_RATIONALE_LINK,
576         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_RATIONALE_LINK),
577 }
578 
579 /** Loggable elements in the toolbar. */
580 enum class ToolbarElement(override val impressionId: Int, override val interactionId: Int) :
581     ElementName {
582     // Represents main menu
583     TOOLBAR_SETTINGS_BUTTON(
584         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_SETTINGS_BUTTON,
585         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_SETTINGS_BUTTON),
586     TOOLBAR_HELP_BUTTON(
587         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_HELP_BUTTON,
588         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_HELP_BUTTON),
589     // TODO update
590     TOOLBAR_UNITS_BUTTON(
591         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN,
592         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN),
593     // TODO not sure if this will be needed
594     TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON(
595         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON,
596         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON),
597 }
598 
599 /** Loggable elements in the Entry details page. */
600 enum class MigrationElement(override val impressionId: Int, override val interactionId: Int) :
601     ElementName {
602     MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON(
603         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON,
604         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON),
605     MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON(
606         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON,
607         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON),
608     MIGRATION_MORE_SPACE_NEEDED_FREE_UP_SPACE_BUTTON(
609         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_MORE_SPACE_NEEDED_FREE_UP_SPACE_BUTTON,
610         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_MORE_SPACE_NEEDED_FREE_UP_SPACE_BUTTON),
611     MIGRATION_PAUSED_CONTINUE_BUTTON(
612         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_MORE_SPACE_NEEDED_TRY_AGAIN_BUTTON,
613         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_MORE_SPACE_NEEDED_TRY_AGAIN_BUTTON),
614     MIGRATION_DONE_DIALOG_CONTAINER(
615         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_DONE_DIALOG_CONTAINER,
616         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_DONE_DIALOG_CONTAINER),
617     MIGRATION_DONE_DIALOG_BUTTON(
618         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_DONE_DIALOG_BUTTON,
619         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_DONE_DIALOG_BUTTON),
620     MIGRATION_IN_PROGRESS_DIALOG_CONTAINER(
621         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_CONTAINER,
622         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_CONTAINER),
623     MIGRATION_IN_PROGRESS_DIALOG_BUTTON(
624         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_BUTTON,
625         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_BUTTON),
626     MIGRATION_PENDING_DIALOG_CONTAINER(
627         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTAINER,
628         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTAINER),
629     MIGRATION_PENDING_DIALOG_CANCEL_BUTTON(
630         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CANCEL_BUTTON,
631         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CANCEL_BUTTON),
632     MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON(
633         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON,
634         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON),
635     MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER(
636         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER,
637         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER),
638     MIGRATION_NOT_COMPLETE_DIALOG_BUTTON(
639         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_BUTTON,
640         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_BUTTON),
641     MIGRATION_RESUME_BANNER(
642         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_RESUME_BANNER,
643         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_RESUME_BANNER),
644     MIGRATION_RESUME_BANNER_BUTTON(
645         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_RESUME_BANNER_BUTTON,
646         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_RESUME_BANNER_BUTTON),
647     MIGRATION_APP_UPDATE_BANNER(
648         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_BANNER,
649         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_APP_UPDATE_BANNER),
650     MIGRATION_APP_UPDATE_BUTTON(
651         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_BUTTON,
652         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_APP_UPDATE_BUTTON)
653 }
654 
655 /** Loggable elements belonging to the error page, and the unknown element. */
656 enum class ErrorPageElement(override val impressionId: Int, override val interactionId: Int) :
657     ElementName {
658     UNKNOWN_ELEMENT(
659         HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN,
660         HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN)
661 }
662 
663 @EntryPoint
664 @InstallIn(SingletonComponent::class)
665 interface HealthConnectLoggerEntryPoint {
loggernull666     fun logger(): HealthConnectLogger
667 }
668