/* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.healthconnect.controller.utils.logging import com.android.healthconnect.controller.HealthFitnessUiStatsLog.* import dagger.hilt.EntryPoint import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import javax.inject.Inject import javax.inject.Singleton /** Helper class for logging UI Impressions and Interactions. */ @Singleton class HealthConnectLogger @Inject constructor() { private var pageName = PageName.UNKNOWN_PAGE /** * Sets the page ID which will be used for all impressions and interaction logging on this page. */ fun setPageId(pageName: PageName) { this.pageName = pageName } /** Logs the impression of a page. */ fun logPageImpression() { write(HEALTH_CONNECT_UI_IMPRESSION, pageName.impressionId) } /** Logs the impression of an element. */ fun logImpression(element: ElementName) { write(HEALTH_CONNECT_UI_IMPRESSION, pageName.impressionId, element.impressionId) } /** Logs the interaction with an element. */ fun logInteraction(element: ElementName, action: UIAction = UIAction.ACTION_CLICK) { write( HEALTH_CONNECT_UI_INTERACTION, pageName.interactionId, element.interactionId, action.id) } } /** Enum class for UI Actions, used to specify whether we wish to log a click or a toggle. */ enum class UIAction(val id: Int) { ACTION_CLICK(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_CLICK), ACTION_TOGGLE_ON(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_TOGGLE_ON), ACTION_TOGGLE_OFF(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_TOGGLE_OFF), ACTION_UNKNOWN(HEALTH_CONNECT_UI_INTERACTION__ACTION__ACTION_UNKNOWN) } /** Enum class for PageName. Each loggable fragment in the application should define a page name. */ enum class PageName(val impressionId: Int, val interactionId: Int) { HOME_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__HOME_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__HOME_PAGE), ONBOARDING_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__ONBOARDING_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__ONBOARDING_PAGE), RECENT_ACCESS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__RECENT_ACCESS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__RECENT_ACCESS_PAGE), APP_PERMISSIONS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__APP_PERMISSIONS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__APP_PERMISSIONS_PAGE), // TODO (b/270965648) not needed APP_PERMISSIONS_EMPTY_STATE_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__APP_PERMISSIONS_EMPTY_STATE_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__APP_PERMISSIONS_EMPTY_STATE_PAGE), HELP_AND_FEEDBACK_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__HELP_AND_FEEDBACK_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__HELP_AND_FEEDBACK_PAGE), CATEGORIES_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__CATEGORIES_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__CATEGORIES_PAGE), AUTO_DELETE_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__AUTO_DELETE_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__AUTO_DELETE_PAGE), PERMISSION_TYPES_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__PERMISSION_TYPES_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__PERMISSION_TYPES_PAGE), DATA_ACCESS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__DATA_ACCESS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__DATA_ACCESS_PAGE), DATA_ENTRIES_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__DATA_ENTRIES_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__DATA_ENTRIES_PAGE), ENTRY_DETAILS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__ENTRY_DETAILS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__ENTRY_DETAILS_PAGE), APP_ACCESS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__APP_ACCESS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__APP_ACCESS_PAGE), UNITS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__UNITS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__UNITS_PAGE), ALL_CATEGORIES_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__ALL_CATEGORIES_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__ALL_CATEGORIES_PAGE), REQUEST_PERMISSIONS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__REQUEST_PERMISSIONS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__REQUEST_PERMISSIONS_PAGE), REQUEST_COMBINED_ADDITIONAL_PERMISSIONS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__REQUEST_COMBINED_ADDITIONAL_PERMISSIONS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__REQUEST_COMBINED_ADDITIONAL_PERMISSIONS_PAGE), REQUEST_BACKGROUND_READ_PERMISSION_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__REQUEST_BACKGROUND_READ_PERMISSION_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__REQUEST_BACKGROUND_READ_PERMISSION_PAGE), REQUEST_HISTORY_READ_PERMISSION_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__REQUEST_HISTORY_READ_PERMISSION_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__REQUEST_HISTORY_READ_PERMISSION_PAGE), MANAGE_PERMISSIONS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__MANAGE_PERMISSIONS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__MANAGE_PERMISSIONS_PAGE), SETTINGS_MANAGE_PERMISSIONS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__SETTINGS_MANAGE_PERMISSIONS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__SETTINGS_MANAGE_PERMISSIONS_PAGE), MIGRATION_IN_PROGRESS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_IN_PROGRESS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_IN_PROGRESS_PAGE), MIGRATION_APP_UPDATE_NEEDED_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_APP_UPDATE_NEEDED_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_APP_UPDATE_NEEDED_PAGE), MIGRATION_MODULE_UPDATE_NEEDED_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_MODULE_UPDATE_NEEDED_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_MODULE_UPDATE_NEEDED_PAGE), MIGRATION_PAUSED_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__MIGRATION_PAUSED_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__MIGRATION_PAUSED_PAGE), MANAGE_DATA_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__MANAGE_DATA_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__MANAGE_DATA_PAGE), DATA_SOURCES_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__DATA_SOURCES_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__DATA_SOURCES_PAGE), ADD_AN_APP_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__ADD_AN_APP_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__ADD_AN_APP_PAGE), ADDITIONAL_ACCESS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__ADDITIONAL_ACCESS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__ADDITIONAL_ACCESS_PAGE), DATA_RESTORE_IN_PROGRESS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__DATA_RESTORE_IN_PROGRESS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__DATA_RESTORE_IN_PROGRESS_PAGE), SEARCH_APPS_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__SEARCH_APPS_PAGE, HEALTH_CONNECT_UI_INTERACTION__PAGE__SEARCH_APPS_PAGE), UNKNOWN_PAGE( HEALTH_CONNECT_UI_IMPRESSION__PAGE__PAGE_UNKNOWN, HEALTH_CONNECT_UI_INTERACTION__PAGE__PAGE_UNKNOWN) } /** Common interface for loggable elements. */ interface ElementName { val impressionId: Int val interactionId: Int } /** Loggable elements in the Home page. */ enum class HomePageElement(override val impressionId: Int, override val interactionId: Int) : ElementName { APP_PERMISSIONS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_PERMISSIONS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_PERMISSIONS_BUTTON), DATA_AND_ACCESS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_AND_ACCESS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_AND_ACCESS_BUTTON), SEE_ALL_RECENT_ACCESS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_RECENT_ACCESS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_RECENT_ACCESS_BUTTON), MANAGE_DATA_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MANAGE_DATA_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MANAGE_DATA_BUTTON), } /** Loggable elements in the Onboarding page. */ enum class OnboardingElement(override val impressionId: Int, override val interactionId: Int) : ElementName { ONBOARDING_COMPLETED_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ONBOARDING_COMPLETED_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ONBOARDING_COMPLETED_BUTTON), ONBOARDING_GO_BACK_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ONBOARDING_GO_BACK_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ONBOARDING_GO_BACK_BUTTON), } /** Loggable elements in the Recent Access page. */ enum class RecentAccessElement(override val impressionId: Int, override val interactionId: Int) : ElementName { RECENT_ACCESS_ENTRY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__RECENT_ACCESS_ENTRY, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__RECENT_ACCESS_ENTRY), MANAGE_PERMISSIONS_FAB( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MANAGE_PERMISSIONS_FLOATING_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MANAGE_PERMISSIONS_FLOATING_BUTTON), } /** Loggable elements in the Manage Data page. */ enum class ManageDataElement(override val impressionId: Int, override val interactionId: Int) : ElementName { AUTO_DELETE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_BUTTON), BACKUP_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__BACKUP_DATA_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__BACKUP_DATA_BUTTON), DATA_SOURCES_AND_PRIORITY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_SOURCES_AND_PRIORITY_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_SOURCES_AND_PRIORITY_BUTTON), SET_UNITS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SET_UNITS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SET_UNITS_BUTTON) } /** Loggable elements in the Category and All categories pages. */ enum class CategoriesElement(override val impressionId: Int, override val interactionId: Int) : ElementName { CATEGORY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CATEGORY_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CATEGORY_BUTTON), SEE_ALL_CATEGORIES_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_CATEGORIES_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_CATEGORIES_BUTTON), EXPORT_DATA_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXPORT_DATA_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXPORT_DATA_BUTTON), AUTO_DELETE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_BUTTON), DELETE_ALL_DATA_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_ALL_DATA_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_ALL_DATA_BUTTON), } /** Loggable elements in the App Permissions and Settings App Permission pages. */ enum class AppPermissionsElement(override val impressionId: Int, override val interactionId: Int) : ElementName { SEARCH_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEARCH_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEARCH_BUTTON), CONNECTED_APP_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CONNECTED_APP_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CONNECTED_APP_BUTTON), NOT_CONNECTED_APP_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__NOT_CONNECTED_APP_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__NOT_CONNECTED_APP_BUTTON), INACTIVE_APP_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__INACTIVE_APP_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__INACTIVE_APP_BUTTON), INACTIVE_APP_DELETE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__INACTIVE_APP_DELETE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__INACTIVE_APP_DELETE_BUTTON), NEEDS_UPDATE_APP_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_APP_BUTTON, HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_APP_BUTTON), REMOVE_ALL_APPS_PERMISSIONS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REMOVE_ALL_APPS_PERMISSIONS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REMOVE_ALL_APPS_PERMISSIONS_BUTTON), HELP_AND_FEEDBACK_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__HELP_AND_FEEDBACK_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__HELP_AND_FEEDBACK_BUTTON), CHECK_FOR_UPDATES_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHECK_FOR_UPDATES_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHECK_FOR_UPDATES_BUTTON), SEE_ALL_COMPATIBLE_APPS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_COMPATIBLE_APPS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_COMPATIBLE_APPS_BUTTON), SEND_FEEDBACK_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEND_FEEDBACK_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEND_FEEDBACK_BUTTON), } /** Loggable elements in the App Access page. */ enum class AppAccessElement(override val impressionId: Int, override val interactionId: Int) : ElementName { ALLOW_ALL_PERMISSIONS_SWITCH_ACTIVE( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_ACTIVE, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_ACTIVE), ALLOW_ALL_PERMISSIONS_SWITCH_INACTIVE( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_INACTIVE, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_ALL_PERMISSIONS_SWITCH_INACTIVE), PERMISSION_SWITCH_ACTIVE( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_SWITCH_ACTIVE, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_SWITCH_ACTIVE), PERMISSION_SWITCH_INACTIVE( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_SWITCH_INACTIVE, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_SWITCH_INACTIVE), DELETE_APP_DATA_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_APP_DATA_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_APP_DATA_BUTTON), PRIVACY_POLICY_LINK( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PRIVACY_POLICY_LINK, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PRIVACY_POLICY_LINK), ADDITIONAL_ACCESS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ADDITIONAL_ACCESS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ADDITIONAL_ACCESS_BUTTON), } /** Loggable elements in the Permission types page. */ enum class PermissionTypesElement(override val impressionId: Int, override val interactionId: Int) : ElementName { APP_FILTER_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_FILTER_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_FILTER_BUTTON), PERMISSION_TYPE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_TYPE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_TYPE_BUTTON), SET_APP_PRIORITY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SET_APP_PRIORITY_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SET_APP_PRIORITY_BUTTON), DELETE_CATEGORY_DATA_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_CATEGORY_DATA_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_CATEGORY_DATA_BUTTON), // App priority dialog // TODO (b/270966817) SET_APP_PRIORITY_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN), SET_APP_PRIORITY_DIALOG_CANCEL_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN), SET_APP_PRIORITY_DIALOG_SAVE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN), // New app priority DATA_SOURCES_AND_PRIORITY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_SOURCES_AND_PRIORITY_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_SOURCES_AND_PRIORITY_BUTTON), } /** Loggable elements in the Data access page. */ enum class DataAccessElement(override val impressionId: Int, override val interactionId: Int) : ElementName { DATA_ACCESS_APP_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ACCESS_APP_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ACCESS_APP_BUTTON), DATA_ACCESS_INACTIVE_APP_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ACCESS_INACTIVE_APP_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ACCESS_INACTIVE_APP_BUTTON), SEE_ALL_ENTRIES_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SEE_ALL_ENTRIES_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SEE_ALL_ENTRIES_BUTTON), DELETE_THIS_DATA_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETE_THIS_DATA_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETE_THIS_DATA_BUTTON), } /** Loggable elements in the Data entries page. */ enum class DataEntriesElement(override val impressionId: Int, override val interactionId: Int) : ElementName { AGGREGATION_DATA_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AGGREGATION_DATA_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AGGREGATION_DATA_VIEW), DATA_ENTRY_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ENTRY_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ENTRY_VIEW), DATA_ENTRY_DELETE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_ENTRY_DELETE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_ENTRY_DELETE_BUTTON), EXERCISE_SESSION_ENTRY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_SESSION_ENTRY_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_SESSION_ENTRY_BUTTON), EXERCISE_SESSION_MAP_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_SESSION_MAP_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_SESSION_MAP_VIEW), SLEEP_SESSION_ENTRY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SLEEP_SESSION_ENTRY_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SLEEP_SESSION_ENTRY_BUTTON), NEXT_DAY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__NEXT_DAY_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__NEXT_DAY_BUTTON), PREVIOUS_DAY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PREVIOUS_DAY_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PREVIOUS_DAY_BUTTON), SELECT_DATE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SELECT_DATE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SELECT_DATE_BUTTON), PLANNED_EXERCISE_SESSION_ENTRY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PLANNED_EXERCISE_SESSION_ENTRY_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PLANNED_EXERCISE_SESSION_ENTRY_BUTTON), } /** Loggable elements in the Entry details page. */ enum class EntryDetailsElement(override val impressionId: Int, override val interactionId: Int) : ElementName { SESSION_DETAIL_ENTRY_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SESSION_DETAIL_ENTRY_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SESSION_DETAIL_ENTRY_VIEW), SESSION_DETAIL_HEADER_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__SESSION_DETAIL_HEADER_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__SESSION_DETAIL_HEADER_VIEW), REVERSE_SESSION_DETAIL_ENTRY_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REVERSE_SESSION_DETAIL_ENTRY_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REVERSE_SESSION_DETAIL_ENTRY_VIEW), FORMATTED_SECTION_TITLE_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FORMATTED_SECTION_TITLE_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FORMATTED_SECTION_TITLE_VIEW), FORMATTED_SECTION_CONTENT_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FORMATTED_SECTION_CONTENT_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FORMATTED_SECTION_CONTENT_VIEW), PLANNED_EXERCISE_BLOCK_ENTRY_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PLANNED_EXERCISE_BLOCK_ENTRY_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PLANNED_EXERCISE_BLOCK_ENTRY_VIEW), PLANNED_EXERCISE_STEP_ENTRY_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PLANNED_EXERCISE_STEP_ENTRY_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PLANNED_EXERCISE_STEP_ENTRY_VIEW), EXERCISE_PERFORMANCE_GOAL_ENTRY_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_PERFORMANCE_GOAL_ENTRY_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_PERFORMANCE_GOAL_ENTRY_VIEW), } /** Loggable elements in the Units page. */ enum class UnitsElement(override val impressionId: Int, override val interactionId: Int) : ElementName { // Units CHANGE_UNITS_HEIGHT_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_HEIGHT_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_HEIGHT_BUTTON), CHANGE_UNITS_WEIGHT_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_WEIGHT_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_WEIGHT_BUTTON), CHANGE_UNITS_DISTANCE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_DISTANCE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_DISTANCE_BUTTON), CHANGE_UNITS_ENERGY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_ENERGY_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_ENERGY_BUTTON), CHANGE_UNITS_TEMPERATURE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CHANGE_UNITS_TEMPERATURE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CHANGE_UNITS_TEMPERATURE_BUTTON), CANCEL_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_BUTTON), // Height CENTIMETERS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CENTIMETERS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CENTIMETERS_BUTTON), FEET_AND_INCHES_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FEET_AND_INCHES_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FEET_AND_INCHES_BUTTON), // Weight KILOGRAMS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KILOGRAMS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KILOGRAMS_BUTTON), POUNDS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__POUNDS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__POUNDS_BUTTON), STONES_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__STONES_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__STONES_BUTTON), // Distance KILOMETERS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KILOMETERS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KILOMETERS_BUTTON), MILES_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MILES_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MILES_BUTTON), // Energy CALORIES_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CALORIES_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CALORIES_BUTTON), KILOJOULES_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KILOJOULES_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KILOJOULES_BUTTON), // Temperature CELSIUS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CELSIUS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CELSIUS_BUTTON), FAHRENHEIT_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__FAHRENHEIT_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__FAHRENHEIT_BUTTON), KELVIN_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__KELVIN_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__KELVIN_BUTTON), } /** Loggable elements in the Auto delete page. */ enum class AutoDeleteElement(override val impressionId: Int, override val interactionId: Int) : ElementName { AUTO_DELETE_3_MONTHS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_THREE_MONTHS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_THREE_MONTHS_BUTTON), AUTO_DELETE_18_MONTHS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_EIGHTEEN_MONTHS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_EIGHTEEN_MONTHS_BUTTON), AUTO_DELETE_NEVER_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_NEVER_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_NEVER_BUTTON), // Auto-delete dialog AUTO_DELETE_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_DIALOG_CONTAINER), AUTO_DELETE_DIALOG_CANCEL_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_DIALOG_CANCEL_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_DIALOG_CANCEL_BUTTON), AUTO_DELETE_DIALOG_CONFIRM_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_DIALOG_CONFIRM_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_DIALOG_CONFIRM_BUTTON), AUTO_DELETE_CONFIRMATION_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_CONTAINER, ), AUTO_DELETE_CONFIRMATION_DIALOG_DONE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_DONE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__AUTO_DELETE_CONFIRMATION_DIALOG_DONE_BUTTON), } /** Loggable elements in the Disconnect app dialog. */ enum class DisconnectAppDialogElement( override val impressionId: Int, override val interactionId: Int ) : ElementName { DISCONNECT_APP_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_CONTAINER), DISCONNECT_APP_DIALOG_CANCEL_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_CANCEL_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_CANCEL_BUTTON), DISCONNECT_APP_DIALOG_CONFIRM_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_CONFIRM_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_CONFIRM_BUTTON), DISCONNECT_APP_DIALOG_DELETE_CHECKBOX( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_APP_DIALOG_DELETE_CHECKBOX, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_APP_DIALOG_DELETE_CHECKBOX), } /** Loggable elements in the Disconnect all apps dialog. */ enum class DisconnectAllAppsDialogElement( override val impressionId: Int, override val interactionId: Int ) : ElementName { DISCONNECT_ALL_APPS_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CONTAINER), DISCONNECT_ALL_APPS_DIALOG_CANCEL_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CANCEL_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_CANCEL_BUTTON), DISCONNECT_ALL_APPS_DIALOG_REMOVE_ALL_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_REMOVE_ALL_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISCONNECT_ALL_APPS_DIALOG_REMOVE_ALL_BUTTON), } /** Loggable elements in the Deletion dialog time range picker dialog. */ enum class DeletionDialogTimeRangeElement( override val impressionId: Int, override val interactionId: Int ) : ElementName { // Deletion time range dialog DELETION_DIALOG_TIME_RANGE_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CONTAINER), DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_24_HOURS_BUTTON), DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_7_DAYS_BUTTON), DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_LAST_30_DAYS_BUTTON), DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_ALL_DATA_BUTTON), DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_CANCEL_BUTTON), DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_TIME_RANGE_NEXT_BUTTON, ), } /** Loggable elements in the Deletion dialog confirmation dialog. */ enum class DeletionDialogConfirmationElement( override val impressionId: Int, override val interactionId: Int ) : ElementName { DELETION_DIALOG_CONFIRMATION_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CONTAINER), DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_GO_BACK_BUTTON), DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_CANCEL_BUTTON), DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_DELETE_BUTTON), DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_CONFIRMATION_REMOVE_APP_PERMISSIONS_BUTTON), } /** Loggable elements in the Progress dialog. */ enum class ProgressDialogElement(override val impressionId: Int, override val interactionId: Int) : ElementName { DELETION_DIALOG_IN_PROGRESS_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_IN_PROGRESS_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_IN_PROGRESS_CONTAINER), } /** Loggable elements in the Success dialog. */ enum class SuccessDialogElement(override val impressionId: Int, override val interactionId: Int) : ElementName { DELETION_DIALOG_SUCCESS_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_SUCCESS_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_SUCCESS_CONTAINER), DELETION_DIALOG_SUCCESS_DONE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_SUCCESS_DONE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_SUCCESS_DONE_BUTTON), } /** Loggable elements in the Failed dialog. */ enum class FailedDialogElement(override val impressionId: Int, override val interactionId: Int) : ElementName { DELETION_DIALOG_ERROR_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_CONTAINER), DELETION_DIALOG_ERROR_CLOSE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_CLOSE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_CLOSE_BUTTON), DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DELETION_DIALOG_ERROR_TRY_AGAIN_BUTTON), } /** Loggable elements in the Request and Manage permissions pages. */ enum class PermissionsElement(override val impressionId: Int, override val interactionId: Int) : ElementName { ALLOW_PERMISSIONS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_PERMISSIONS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_PERMISSIONS_BUTTON), CANCEL_PERMISSIONS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_PERMISSIONS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_PERMISSIONS_BUTTON), ALLOW_ALL_SWITCH( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_ALL_SWITCH, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_ALL_SWITCH), PERMISSION_SWITCH( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__PERMISSION_SWITCH, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__PERMISSION_SWITCH), APP_RATIONALE_LINK( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_RATIONALE_LINK, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_RATIONALE_LINK), } /** Loggable elements in the Request Combined Additional Permissions page. */ enum class RequestCombinedAdditionalPermissionsElement( override val impressionId: Int, override val interactionId: Int ) : ElementName { ALLOW_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON), CANCEL_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_COMBINED_ADDITIONAL_PERMISSIONS_BUTTON), BACKGROUND_READ_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__BACKGROUND_READ_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__BACKGROUND_READ_BUTTON), HISTORY_READ_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__HISTORY_READ_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__HISTORY_READ_BUTTON) } /** Loggable elements in the Request Background Read permission page. */ enum class RequestBackgroundReadPermissionElement( override val impressionId: Int, override val interactionId: Int ) : ElementName { ALLOW_BACKGROUND_READ_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_BACKGROUND_READ_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_BACKGROUND_READ_BUTTON), CANCEL_BACKGROUND_READ_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_BACKGROUND_READ_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_BACKGROUND_READ_BUTTON) } /** Loggable elements in the Request History Read permission page. */ enum class RequestHistoryReadPermissionElement( override val impressionId: Int, override val interactionId: Int ) : ElementName { ALLOW_HISTORY_READ_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_HISTORY_READ_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_HISTORY_READ_BUTTON), CANCEL_HISTORY_READ_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__CANCEL_HISTORY_READ_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__CANCEL_HISTORY_READ_BUTTON) } enum class AdditionalAccessElement( override val impressionId: Int, override val interactionId: Int ) : ElementName { EXERCISE_ROUTES_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_BUTTON), HISTORY_READ_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ALLOW_HISTORY_READ_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ALLOW_HISTORY_READ_BUTTON), BACKGROUND_READ_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__BACKGROUND_READ_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__BACKGROUND_READ_BUTTON), EXERCISE_ROUTES_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_CONTAINER), EXERCISE_ROUTES_ALLOW_ALL_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_ALLOW_ALL_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_ALLOW_ALL_BUTTON), EXERCISE_ROUTES_ASK_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_ASK_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_ASK_BUTTON), EXERCISE_ROUTES_DIALOG_DENY_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTES_DIALOG_DENY_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTES_DIALOG_DENY_BUTTON), ENABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER), ENABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON), ENABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ENABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON), DISABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_CONTAINER), DISABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_POSITIVE_BUTTON), DISABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DISABLE_EXERCISE_PERMISSION_DIALOG_NEGATIVE_BUTTON) } /** Loggable elements in the toolbar. */ enum class ToolbarElement(override val impressionId: Int, override val interactionId: Int) : ElementName { // Represents main menu TOOLBAR_SETTINGS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_SETTINGS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_SETTINGS_BUTTON), TOOLBAR_HELP_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_HELP_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_HELP_BUTTON), // TODO update TOOLBAR_UNITS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN), // TODO not sure if this will be needed TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__TOOLBAR_OPEN_SOURCE_LICENSE_BUTTON), } /** Loggable elements in the Entry details page. */ enum class MigrationElement(override val impressionId: Int, override val interactionId: Int) : ElementName { MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_UPDATE_NEEDED_UPDATE_BUTTON), MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_UPDATE_NEEDED_CANCEL_BUTTON), MIGRATION_PAUSED_CONTINUE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PAUSED_CONTINUE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PAUSED_CONTINUE_BUTTON), MIGRATION_DONE_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_DONE_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_DONE_DIALOG_CONTAINER), MIGRATION_DONE_DIALOG_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_DONE_DIALOG_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_DONE_DIALOG_BUTTON), MIGRATION_IN_PROGRESS_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_CONTAINER), MIGRATION_IN_PROGRESS_DIALOG_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_IN_PROGRESS_DIALOG_BUTTON), MIGRATION_PENDING_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTAINER), MIGRATION_PENDING_DIALOG_CANCEL_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CANCEL_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CANCEL_BUTTON), MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_PENDING_DIALOG_CONTINUE_BUTTON), MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_CONTAINER), MIGRATION_NOT_COMPLETE_DIALOG_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_NOT_COMPLETE_DIALOG_BUTTON), MIGRATION_RESUME_BANNER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_RESUME_BANNER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_RESUME_BANNER), MIGRATION_RESUME_BANNER_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_RESUME_BANNER_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_RESUME_BANNER_BUTTON), MIGRATION_APP_UPDATE_BANNER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_BANNER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_APP_UPDATE_BANNER), MIGRATION_APP_UPDATE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_APP_UPDATE_BUTTON), MIGRATION_APP_UPDATE_LEARN_MORE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_LEARN_MORE_BUTTON, HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_LEARN_MORE_BUTTON), MIGRATION_APP_UPDATE_BANNER_DISMISS_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__MIGRATION_APP_UPDATE_DISMISS_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__MIGRATION_APP_UPDATE_DISMISS_BUTTON) } enum class DataRestoreElement(override val impressionId: Int, override val interactionId: Int) : ElementName { RESTORE_IN_PROGRESS_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_CONTAINER), RESTORE_IN_PROGRESS_DIALOG_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_IN_PROGRESS_DIALOG_BUTTON), RESTORE_PENDING_BANNER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER), RESTORE_PENDING_BANNER_UPDATE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER_UPDATE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_RESTORE_UPDATE_NEEDED_BANNER_UPDATE_BUTTON) } /** Loggable elements in the Data sources page. */ enum class DataSourcesElement(override val impressionId: Int, override val interactionId: Int) : ElementName { DATA_TYPE_SPINNER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_TYPE_SPINNER_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_TYPE_SPINNER_BUTTON), DATA_TOTALS_CARD( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__DATA_TOTALS_CARD, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__DATA_TOTALS_CARD), APP_SOURCE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__APP_SOURCE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__APP_SOURCE_BUTTON), ADD_AN_APP_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ADD_AN_APP_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ADD_AN_APP_BUTTON), EDIT_SOURCE_LIST_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EDIT_SOURCE_LIST_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EDIT_SOURCE_LIST_BUTTON), REORDER_APP_SOURCE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REORDER_APP_SOURCE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REORDER_APP_SOURCE_BUTTON), REMOVE_APP_SOURCE_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__REMOVE_APP_SOURCE_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__REMOVE_APP_SOURCE_BUTTON) } /** Loggable elements in the Add an app page. */ enum class AddAnAppElement(override val impressionId: Int, override val interactionId: Int) : ElementName { POTENTIAL_PRIORITY_APP_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__POTENTIAL_PRIORITY_APP_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__POTENTIAL_PRIORITY_APP_BUTTON) } enum class RouteRequestElement(override val impressionId: Int, override val interactionId: Int) : ElementName { EXERCISE_ROUTE_REQUEST_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_CONTAINER), EXERCISE_ROUTE_DIALOG_INFORMATION_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_INFORMATION_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_INFORMATION_BUTTON), EXERCISE_ROUTE_DIALOG_ROUTE_VIEW( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_ROUTE_VIEW, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_ROUTE_VIEW), EXERCISE_ROUTE_DIALOG_ALLOW_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALLOW_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALLOW_BUTTON), EXERCISE_ROUTE_DIALOG_ALWAYS_ALLOW_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALWAYS_ALLOW_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_ALWAYS_ALLOW_BUTTON), EXERCISE_ROUTE_DIALOG_DONT_ALLOW_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_DIALOG_DONT_ALLOW_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_DIALOG_DONT_ALLOW_BUTTON), EXERCISE_ROUTE_EDUCATION_DIALOG_CONTAINER( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_CONTAINER, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_CONTAINER), EXERCISE_ROUTE_EDUCATION_DIALOG_BACK_BUTTON( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_BACK_BUTTON, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__EXERCISE_ROUTE_EDUCATION_DIALOG_BACK_BUTTON), } /** Loggable elements belonging to the error page, and the unknown element. */ enum class ErrorPageElement(override val impressionId: Int, override val interactionId: Int) : ElementName { UNKNOWN_ELEMENT( HEALTH_CONNECT_UI_IMPRESSION__ELEMENT__ELEMENT_UNKNOWN, HEALTH_CONNECT_UI_INTERACTION__ELEMENT__ELEMENT_UNKNOWN) } @EntryPoint @InstallIn(SingletonComponent::class) interface HealthConnectLoggerEntryPoint { fun logger(): HealthConnectLogger }