From 4d2b2ff94970d3e8851dc7c4b0a37a961200ce9a Mon Sep 17 00:00:00 2001 From: kean Date: Mon, 7 Apr 2025 08:28:50 -0400 Subject: [PATCH 1/2] Rewrite WPAnalyticsTrackerAutomatticTracks in Swift --- .../Classes/Models/Blog/Blog+Lookup.swift | 12 - .../System/WordPressAppDelegate+openURL.swift | 6 - .../AnalyticsTrackerAutomatticTracks.swift | 239 ++ .../Utility/Analytics/TracksMappedEvent.swift | 1263 ++++++++++ .../Analytics/WPAnalytics+Domains.swift | 8 - .../WPAnalyticsTrackerAutomatticTracks.h | 10 - .../WPAnalyticsTrackerAutomatticTracks.m | 2087 ----------------- .../Utility/Analytics/WPAppAnalytics.m | 3 +- WordPress/WordPress.xcodeproj/project.pbxproj | 8 +- .../WordPressTest/TrackMappedEventTests.swift | 21 + .../WPAnalyticsTrackerAutomatticTracksTests.m | 62 - 11 files changed, 1528 insertions(+), 2191 deletions(-) create mode 100644 WordPress/Classes/Utility/Analytics/AnalyticsTrackerAutomatticTracks.swift create mode 100644 WordPress/Classes/Utility/Analytics/TracksMappedEvent.swift delete mode 100644 WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.h delete mode 100644 WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m create mode 100644 WordPress/WordPressTest/TrackMappedEventTests.swift delete mode 100644 WordPress/WordPressTest/WPAnalyticsTrackerAutomatticTracksTests.m diff --git a/WordPress/Classes/Models/Blog/Blog+Lookup.swift b/WordPress/Classes/Models/Blog/Blog+Lookup.swift index df5170114ca5..7e0feb581cf2 100644 --- a/WordPress/Classes/Models/Blog/Blog+Lookup.swift +++ b/WordPress/Classes/Models/Blog/Blog+Lookup.swift @@ -101,16 +101,10 @@ public extension Blog { return blogToReturn } - @objc(countInContext:) static func count(in context: NSManagedObjectContext) -> Int { BlogQuery().count(in: context) } - @objc(wpComBlogCountInContext:) - static func wpComBlogCount(in context: NSManagedObjectContext) -> Int { - BlogQuery().hostedByWPCom(true).count(in: context) - } - static func hasAnyJetpackBlogs(in context: NSManagedObjectContext) throws -> Bool { let fetchRequest = NSFetchRequest(entityName: Blog.entityName()) fetchRequest.predicate = NSPredicate(format: "account != NULL AND isHostedAtWPcom = NO") @@ -123,12 +117,6 @@ public extension Blog { .count > 0 } - @available(swift, obsoleted: 1.0) - @objc(hasAnyJetpackBlogsInContext:) - static func objc_hasAnyJetpackBlogs(in context: NSManagedObjectContext) -> Bool { - (try? hasAnyJetpackBlogs(in: context)) == true - } - @objc(selfHostedInContext:) static func selfHosted(in context: NSManagedObjectContext) -> [Blog] { (try? BlogQuery().hostedByWPCom(false).blogs(in: context)) ?? [] diff --git a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift index 5e9c3ca66862..0834ba0e298b 100644 --- a/WordPress/Classes/System/WordPressAppDelegate+openURL.swift +++ b/WordPress/Classes/System/WordPressAppDelegate+openURL.swift @@ -236,9 +236,3 @@ private extension URL { return queryItems } } - -extension WordPressAppDelegate { - @objc class var appURLScheme: String { - BuildSettings.current.appURLScheme - } -} diff --git a/WordPress/Classes/Utility/Analytics/AnalyticsTrackerAutomatticTracks.swift b/WordPress/Classes/Utility/Analytics/AnalyticsTrackerAutomatticTracks.swift new file mode 100644 index 000000000000..167976979992 --- /dev/null +++ b/WordPress/Classes/Utility/Analytics/AnalyticsTrackerAutomatticTracks.swift @@ -0,0 +1,239 @@ +import Foundation +import AutomatticTracks +import WordPressShared +import BuildSettingsKit + +@objc public final class AnalyticsTrackerAutomatticTracks: NSObject, WPAnalyticsTracker { + private let contextManager: TracksContextManager + private let tracksService: TracksService + private var userProperties: [String: Any] = [:] + private var appURLScheme: String + private var cachedAnonymousUserID: String? + private var cachedCurrentUserID: String? + + @objc convenience public override init() { + let settings = BuildSettings.current + self.init( + eventNamePrefix: WPAnalyticsTesting.eventNamePrefix ?? settings.eventNamePrefix, + platform: WPAnalyticsTesting.explatPlatform ?? settings.explatPlatform, + appURLScheme: settings.appURLScheme + ) + } + + init( + eventNamePrefix: String, + platform: String, + appURLScheme: String + ) { + contextManager = TracksContextManager() + tracksService = TracksService(contextManager: contextManager) + tracksService.eventNamePrefix = eventNamePrefix + tracksService.platform = platform + self.appURLScheme = appURLScheme + } + + // MARK: - WPAnalyticsTracker + + public func track(_ stat: WPAnalyticsStat) { + track(stat, withProperties: nil) + } + + public func track(_ stat: WPAnalyticsStat, withProperties properties: [AnyHashable: Any]?) { + guard let event = TracksMappedEvent.make(for: stat) else { + DDLogInfo("WPAnalyticsStat not supported by AnalyticsTrackerAutomatticTracks: \(stat)") + return + } + + let properties = (event.properties ?? [:]) + .merging(properties ?? [:]) { _, new in new } + trackString(event.name, withProperties: properties) + } + + public func trackString(_ event: String) { + trackString(event, withProperties: nil) + } + + public func trackString(_ event: String, withProperties properties: [AnyHashable: Any]?) { + if properties == nil { + DDLogInfo("🔵 Tracked: \(event)") + } else { + let description = (properties ?? [:]) + .map { (key: "\($0)", value: $1) } + .sorted { + $0.key.localizedCaseInsensitiveCompare($1.key) == .orderedAscending + } + .map { key, value in "\(key): \(value)" } + .joined(separator: ", ") + DDLogInfo("🔵 Tracked: \(event) <\(description)>") + } + tracksService.trackEventName(event, withCustomProperties: properties) + } + + // MARK: - Session Management + + @objc public func beginSession() { + if let currentUserID, !currentUserID.isEmpty { + tracksService.switchToAuthenticatedUser( + withUsername: currentUserID, + userID: nil, + wpComToken: try? WPAccount.token(forUsername: currentUserID), + skipAliasEventCreation: true + ) + } else { + tracksService.switchToAnonymousUser(withAnonymousID: anonymousUserID) + } + refreshMetadata() + } + + @objc public func clearQueuedEvents() { + tracksService.clearQueuedEvents() + } + + @objc public func refreshMetadata() { + let session = getSessionInfo(in: ContextManager.shared.mainContext) + + if let username = session.username, UUID(uuidString: username) != nil { + // User has authenticated but we're waiting for account details to sync. + // Once details are synced this method will be called again with the actual + // username. For now just exit without making changes. + return + } + + let userProperties = makeUserProperties(with: session) + tracksService.userProperties.removeAllObjects() + tracksService.userProperties.addEntries(from: userProperties) + + startTracksSession(with: session) + } + + private func startTracksSession(with session: SessionInfo) { + guard session.isDotcomUser, let username = session.username else { + // User is not authenticated, switch to an anonymous mode + tracksService.switchToAnonymousUser(withAnonymousID: anonymousUserID) + currentUserID = nil + return + } + + if currentUserID?.isEmpty == true { + // No previous username logged + currentUserID = username + removeAnonymousID() + + tracksService.switchToAuthenticatedUser( + withUsername: username, + userID: "", + wpComToken: try? WPAccount.token(forUsername: username), + skipAliasEventCreation: false + ) + } else if currentUserID == username { + // Username did not change from last refreshMetadata - just make sure Tracks client has it + tracksService.switchToAuthenticatedUser( + withUsername: username, + userID: "", + wpComToken: try? WPAccount.token(forUsername: username), + skipAliasEventCreation: true + ) + } else { + // Username changed for some reason - switch back to anonymous first + tracksService.switchToAnonymousUser(withAnonymousID: anonymousUserID) + tracksService.switchToAuthenticatedUser( + withUsername: username, + userID: "", + wpComToken: try? WPAccount.token(forUsername: username), + skipAliasEventCreation: false + ) + currentUserID = username + removeAnonymousID() + } + } + + // MARK: - SessionInfo + + private struct SessionInfo { + var blogCount: Int + var username: String? + var isDotcomUser: Bool + var hasJetpackBlogs: Bool + var isGutenbergEnabled: Bool + } + + private func getSessionInfo(in context: NSManagedObjectContext) -> SessionInfo { + context.performAndWait { + let account = try? WPAccount.lookupDefaultWordPressComAccount(in: context) + return SessionInfo( + blogCount: Blog.count(in: context), + username: account?.username, + isDotcomUser: account?.username.isEmpty == false, + hasJetpackBlogs: (try? Blog.hasAnyJetpackBlogs(in: context)) == true, + isGutenbergEnabled: (account?.blogs ?? []).contains(where: \.isGutenbergEnabled) + ) + } + } + + private func makeUserProperties(with info: SessionInfo) -> [String: Any] { + return [ + "app_scheme": WPAnalyticsTesting.appURLScheme ?? appURLScheme, + "platform": "iOS", + "dotcom_user": info.isDotcomUser, + "jetpack_user": info.hasJetpackBlogs, + "number_of_blogs": info.blogCount, + "accessibility_voice_over_enabled": UIAccessibility.isVoiceOverRunning, + "is_rtl_language": UIApplication.shared.userInterfaceLayoutDirection == .rightToLeft, + "gutenberg_enabled": info.isGutenbergEnabled, + ] + } + + // MARK: - Private + + private var anonymousUserID: String { + if cachedAnonymousUserID == nil || cachedAnonymousUserID?.isEmpty == true { + let userDefaults = UserPersistentStoreFactory.instance() + var anonymousID = userDefaults.string(forKey: Constants.tracksUserDefaultsAnonymousUserIDKey) + + if anonymousID == nil { + anonymousID = UUID().uuidString + userDefaults.set(anonymousID, forKey: Constants.tracksUserDefaultsAnonymousUserIDKey) + } + + cachedAnonymousUserID = anonymousID + } + + return cachedAnonymousUserID! + } + + private func removeAnonymousID() { + cachedAnonymousUserID = nil + UserPersistentStoreFactory.instance() + .removeObject(forKey: Constants.tracksUserDefaultsAnonymousUserIDKey) + } + + private var currentUserID: String? { + get { + if cachedCurrentUserID == nil || cachedCurrentUserID?.isEmpty == true { + let userDefaults = UserPersistentStoreFactory.instance() + let loggedInID = userDefaults.string(forKey: Constants.tracksUserDefaultsLoggedInUserIDKey) + + if loggedInID != nil { + cachedCurrentUserID = loggedInID + } + } + + return cachedCurrentUserID + } + set { + cachedCurrentUserID = newValue + + let userDefaults = UserPersistentStoreFactory.instance() + if let newValue { + userDefaults.set(newValue, forKey: Constants.tracksUserDefaultsLoggedInUserIDKey) + } else { + userDefaults.removeObject(forKey: Constants.tracksUserDefaultsLoggedInUserIDKey) + } + } + } +} + +private enum Constants { + static let tracksUserDefaultsAnonymousUserIDKey = "TracksAnonymousUserID" + static let tracksUserDefaultsLoggedInUserIDKey = "TracksLoggedInUserID" +} diff --git a/WordPress/Classes/Utility/Analytics/TracksMappedEvent.swift b/WordPress/Classes/Utility/Analytics/TracksMappedEvent.swift new file mode 100644 index 000000000000..7faecfc99a1e --- /dev/null +++ b/WordPress/Classes/Utility/Analytics/TracksMappedEvent.swift @@ -0,0 +1,1263 @@ +import Foundation +import WordPressShared + +struct TracksMappedEvent { + let name: String + let properties: [AnyHashable: Any]? +} + +extension TracksMappedEvent { + static func make(for stat: WPAnalyticsStat) -> TracksMappedEvent? { + let name: String + var properties: [AnyHashable: Any]? + + switch stat { + case .abTestStart: + name = "abtest_start" + case .addedSelfHostedSite: + name = "self_hosted_blog_added" + case .addedSelfHostedSiteButJetpackNotConnectedToWPCom: + name = "self_hosted_blog_added_jetpack_not_connected" + case .activityLogViewed: + name = "activity_log_list_opened" + case .activityLogDetailViewed: + name = "activity_log_detail_opened" + case .activityLogRewindStarted: + name = "activity_log_rewind_started" + case .appIconChanged: + name = "app_icon_changed" + case .appIconReset: + name = "app_icon_reset" + case .appInstalled: + name = "application_installed" + case .appUpgraded: + name = "application_upgraded" + case .applicationOpened: + name = "application_opened" + case .autoUploadPostInvoked: + name = "auto_upload_post_invoked" + case .applicationClosed: + name = "application_closed" + case .appReviewsCanceledFeedbackScreen: + name = "app_reviews_feedback_screen_canceled" + case .appReviewsDeclinedToRateApp: + name = "app_reviews_declined_to_rate_app" + case .appReviewsDidntLikeApp: + name = "app_reviews_didnt_like_app" + case .appReviewsLikedApp: + name = "app_reviews_liked_app" + case .appReviewsOpenedFeedbackScreen: + name = "app_reviews_feedback_screen_opened" + case .appReviewsRatedApp: + name = "app_reviews_rated_app" + case .appReviewsSawPrompt: + name = "app_reviews_saw_prompt" + case .appReviewsSentFeedback: + name = "app_reviews_feedback_sent" + case .appSettingsImageOptimizationChanged: + name = "app_settings_image_optimization_changed" + case .appSettingsMediaRemoveLocationChanged: + name = "app_settings_media_remove_location_changed" + case .appSettingsVideoOptimizationChanged: + name = "app_settings_video_optimization_changed" + case .appSettingsGutenbergEnabled: + name = "gutenberg_setting_enabled" + case .appSettingsGutenbergDisabled: + name = "gutenberg_setting_disabled" + case .automatedTransferCustomDomainDialogShown: + name = "automated_transfer_custom_domain_dialog_shown" + case .automatedTransferCustomDomainDialogCancelled: + name = "automated_transfer_custom_domain_dialog_cancelled" + case .automatedTransferCustomDomainSuggestionQueried: + name = "automated_transfer_custom_domain_suggestion_queried" + case .automatedTransferCustomDomainSuggestionSelected: + name = "automated_transfer_custom_domain_suggestion_selected" + case .automatedTransferCustomDomainContactInfoValidated: + name = "automated_transfer_custom_domain_contact_information_validated" + case .automatedTransferCustomDomainContactInfoValidationFailed: + name = "automated_transfer_custom_domain_contact_information_validation_failed" + case .automatedTransferCustomDomainPurchased: + name = "automated_transfer_custom_domain_purchased" + case .automatedTransferCustomDomainPurchaseFailed: + name = "automated_transfer_custom_domain_purchase_failed" + case .automatedTransferDialogShown: + name = "automated_transfer_confirm_dialog_shown" + case .automatedTransferDialogCancelled: + name = "automated_transfer_confirm_dialog_cancelled" + case .automatedTransferEligibilityCheckInitiated: + name = "automated_transfer_check_eligibility" + case .automatedTransferSiteIneligible: + name = "automated_transfer_not_eligible" + case .automatedTransferInitiate: + name = "automated_transfer_initiate" + case .automatedTransferInitiated: + name = "automated_transfer_initiated" + case .automatedTransferInitiationFailed: + name = "automated_transfer_initiation_failed" + case .automatedTransferStatusComplete: + name = "automated_transfer_status_complete" + case .automatedTransferStatusFailed: + name = "automated_transfer_status_failed" + case .automatedTransferFlowComplete: + name = "automated_transfer_flow_complete" + case .createAccountInitiated: + name = "account_create_initiated" + case .createAccountEmailExists: + name = "account_create_email_exists" + case .createAccountUsernameExists: + name = "account_create_username_exists" + case .createAccountFailed: + name = "account_create_failed" + case .createdAccount: + name = "account_created" + case .createdSite: + name = "site_created" + case .createSiteProcessBegun: + name = "site_creation_accessed" + case .createSiteCategoryViewed: + name = "site_creation_category_viewed" + case .createSiteDetailsViewed: + name = "site_creation_details_viewed" + case .createSiteDomainViewed: + name = "site_creation_domain_viewed" + case .createSiteThemeViewed: + name = "site_creation_theme_viewed" + case .createSiteRequestInitiated: + name = "site_creation_creating_viewed" + case .createSiteSuccessViewed: + name = "site_creation_success_viewed" + case .createSiteCreationFailed: + name = "create_site_creation_failed" + case .createSiteSetTaglineFailed: + name = "create_site_set_tagline_failed" + case .createSiteSetThemeFailed: + name = "create_site_set_theme_failed" + case .createSiteValidationFailed: + name = "create_site_validation_failed" + case .deepLinked: + name = "deep_linked" + case .deepLinkFailed: + name = "deep_link_failed" + case .domainCreditPromptShown: + name = "domain_credit_prompt_shown" + case .domainCreditRedemptionSuccess: + name = "domain_credit_redemption_success" + case .domainCreditRedemptionTapped: + name = "domain_credit_redemption_tapped" + case .editorAddedPhotoViaLocalLibrary: + name = "editor_photo_added" + properties = [Constants.tracksEventPropertyViaKey: "local_library"] + case .editorAddedPhotoViaWPMediaLibrary: + name = "editor_photo_added" + properties = [Constants.tracksEventPropertyViaKey: "media_library"] + case .editorAddedVideoViaLocalLibrary: + name = "editor_video_added" + properties = [Constants.tracksEventPropertyViaKey: "local_library"] + case .editorAddedVideoViaWPMediaLibrary: + name = "editor_video_added" + properties = [Constants.tracksEventPropertyViaKey: "media_library"] + case .editorAddedOtherMediaViaWPMediaLibrary: + name = "editor_other_media_added" + properties = [Constants.tracksEventPropertyViaKey: "media_library"] + case .editorAddedVideoViaOtherApps: + name = "editor_video_added" + properties = [Constants.tracksEventPropertyViaKey: "other_apps"] + case .editorAddedPhotoViaOtherApps: + name = "editor_photo_added" + properties = [Constants.tracksEventPropertyViaKey: "other_apps"] + case .editorAddedPhotoViaStockPhotos: + name = "editor_photo_added" + properties = [Constants.tracksEventPropertyViaKey: "stock_photos"] + case .editorAddedPhotoViaMediaEditor: + name = "editor_photo_added" + properties = [Constants.tracksEventPropertyViaKey: "media_editor"] + case .editorAztecBetaLink: + name = "editor_aztec_beta_link" + case .editorAztecPromoLink: + name = "editor_aztec_promo_link" + case .editorAztecPromoPositive: + name = "editor_aztec_promo_positive" + case .editorAztecPromoNegative: + name = "editor_aztec_promo_negative" + case .editorClosed: + name = "editor_closed" + case .editorCreatedPost: + name = "editor_post_created" + case .editorDiscardedChanges: + name = "editor_discarded_changes" + case .editorEditedImage: + name = "editor_image_edited" + case .editorEnabledNewVersion: + name = "editor_enabled_new_version" + case .editorResizedPhoto: + name = "editor_resized_photo" + case .editorResizedPhotoError: + name = "editor_resized_photo_error" + case .editorSavedDraft: + name = "editor_draft_saved" + case .editorScheduledPost: + name = "editor_post_scheduled" + case .editorSessionStart: + name = "editor_session_start" + case .editorSessionSwitchEditor: + name = "editor_session_switch_editor" + case .editorSessionEnd: + name = "editor_session_end" + case .editorSessionTemplateApply: + name = "editor_session_template_apply" + case .editorPublishedPost: + name = "editor_post_published" + case .editorQuickPublishedPost: + name = "editor_quick_post_published" + case .editorQuickSavedDraft: + name = "editor_quick_draft_saved" + case .editorTappedBlockquote: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "blockquote"] + case .editorTappedBold: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "bold"] + case .editorTappedHeader: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "header"] + case .editorTappedHeaderSelection: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "header_selection"] + case .editorTappedHorizontalRule: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "horizontal_rule"] + case .editorTappedHTML: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "html"] + case .editorTappedImage: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "image"] + case .editorMediaPickerTappedDismiss: + name = "media_picker_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "cancel"] + case .editorMediaPickerTappedDevicePhotos: + name = "media_picker_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "device_photos"] + case .editorMediaPickerTappedCamera: + name = "media_picker_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "camera"] + case .editorMediaPickerTappedMediaLibrary: + name = "media_picker_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "media_library"] + case .editorMediaPickerTappedOtherApps: + name = "media_picker_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "other_apps"] + case .editorTappedItalic: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "italic"] + case .editorTappedLink: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "link"] + case .editorTappedMore: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "more"] + case .editorTappedMoreItems: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "overflow_ellipsis"] + case .editorTappedOrderedList: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "ordered_list"] + case .editorTappedStrikethrough: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "strikethrough"] + case .editorTappedUnderline: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "underline"] + case .editorTappedUnlink: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "unlink"] + case .editorTappedUnorderedList: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "unordered_list"] + case .editorTappedList: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "list"] + case .editorTappedUndo: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "undo"] + case .editorTappedRedo: + name = "editor_button_tapped" + properties = [Constants.tracksEventPropertyButtonKey: "redo"] + case .editorToggledOff: + name = "editor_toggled_off" + case .editorToggledOn: + name = "editor_toggled_on" + case .editorUpdatedPost: + name = "editor_post_update" + case .editorUploadMediaFailed: + name = "editor_upload_media_failed" + case .editorUploadMediaPaused: + name = "editor_upload_media_paused" + case .editorUploadMediaRetried: + name = "editor_upload_media_retried" + case .enhancedSiteCreationAccessed: + name = "enhanced_site_creation_accessed" + case .enhancedSiteCreationSegmentsViewed: + name = "enhanced_site_creation_segments_viewed" + case .enhancedSiteCreationSegmentsSelected: + name = "enhanced_site_creation_segments_selected" + case .enhancedSiteCreationSiteDesignViewed: + name = "enhanced_site_creation_site_design_viewed" + case .enhancedSiteCreationSiteDesignSelected: + name = "enhanced_site_creation_site_design_selected" + case .enhancedSiteCreationSiteDesignSkipped: + name = "enhanced_site_creation_site_design_skipped" + case .enhancedSiteCreationSiteDesignPreviewViewed: + name = "enhanced_site_creation_site_design_preview_viewed" + case .enhancedSiteCreationSiteDesignPreviewLoading: + name = "enhanced_site_creation_site_design_preview_loading" + case .enhancedSiteCreationSiteDesignPreviewLoaded: + name = "enhanced_site_creation_site_design_preview_loaded" + case .enhancedSiteCreationSiteDesignPreviewModeButtonTapped: + name = "enhanced_site_creation_site_design_preview_mode_button_tapped" + case .enhancedSiteCreationSiteDesignPreviewModeChanged: + name = "enhanced_site_creation_site_design_preview_mode_changed" + case .enhancedSiteCreationVerticalsViewed: + name = "enhanced_site_creation_verticals_viewed" + case .enhancedSiteCreationVerticalsSelected: + name = "enhanced_site_creation_verticals_selected" + case .enhancedSiteCreationVerticalsSkipped: + name = "enhanced_site_creation_verticals_skipped" + case .enhancedSiteCreationBasicInformationViewed: + name = "enhanced_site_creation_basic_information_viewed" + case .enhancedSiteCreationBasicInformationCompleted: + name = "enhanced_site_creation_basic_information_completed" + case .enhancedSiteCreationBasicInformationSkipped: + name = "enhanced_site_creation_basic_information_skipped" + case .enhancedSiteCreationDomainsAccessed: + name = "enhanced_site_creation_domains_accessed" + case .enhancedSiteCreationDomainsSelected: + name = "enhanced_site_creation_domains_selected" + case .enhancedSiteCreationSuccessLoading: + name = "enhanced_site_creation_success_loading" + case .enhancedSiteCreationSuccessPreviewViewed: + name = "enhanced_site_creation_preview_viewed" + case .enhancedSiteCreationSuccessPreviewLoaded: + name = "enhanced_site_creation_preview_loaded" + case .enhancedSiteCreationSuccessPreviewOkButtonTapped: + name = "enhanced_site_creation_preview_ok_button_tapped" + case .enhancedSiteCreationErrorShown: + name = "enhanced_site_creation_error_shown" + case .gravatarCropped: + name = "me_gravatar_cropped" + case .gravatarTapped: + name = "me_gravatar_tapped" + case .gravatarUploaded: + name = "me_gravatar_uploaded" + case .gutenbergWarningConfirmDialogShown: + name = "gutenberg_warning_confirm_dialog_shown" + case .gutenbergWarningConfirmDialogYesTapped: + name = "gutenberg_warning_confirm_dialog_yes_tapped" + case .gutenbergWarningConfirmDialogCancelTapped: + name = "gutenberg_warning_confirm_dialog_cancel_tapped" + case .gutenbergWarningConfirmDialogDontShowAgainChecked: + name = "gutenberg_warning_confirm_dialog_dont_show_again_checked" + case .gutenbergWarningConfirmDialogDontShowAgainUnchecked: + name = "gutenberg_warning_confirm_dialog_dont_show_again_unchecked" + case .gutenbergWarningConfirmDialogLearnMoreTapped: + name = "gutenberg_warning_confirm_dialog_learn_more_tapped" + case .installJetpackCanceled: + name = "install_jetpack_canceled" + case .installJetpackCompleted: + name = "install_jetpack_completed" + case .installJetpackRemoteStart: + name = "install_jetpack_remote_start" + case .installJetpackRemoteCompleted: + name = "install_jetpack_remote_completed" + case .installJetpackRemoteFailed: + name = "install_jetpack_remote_failed" + case .installJetpackRemoteRetry: + name = "install_jetpack_remote_restart" + case .installJetpackRemoteConnect: + name = "install_jetpack_remote_connect" + case .installJetpackRemoteLogin: + name = "install_jetpack_remote_login" + case .installJetpackRemoteStartManualFlow: + name = "install_jetpack_remote_start_manual_flow" + case .installJetpackWebviewSelect: + name = "connect_jetpack_selected" + case .installJetpackWebviewFailed: + name = "connect_jetpack_failed" + case .landingEditorShown: + name = "landing_editor_shown" + case .layoutPickerPreviewErrorShown: + name = "layout_picker_preview_error_shown" + case .layoutPickerPreviewLoaded: + name = "layout_picker_preview_loaded" + case .layoutPickerPreviewLoading: + name = "layout_picker_preview_loading" + case .layoutPickerPreviewModeButtonTapped: + name = "layout_picker_preview_mode_button_tapped" + case .layoutPickerPreviewModeChanged: + name = "layout_picker_preview_mode_changed" + case .layoutPickerPreviewViewed: + name = "layout_picker_preview_viewed" + case .layoutPickerThumbnailModeButtonTapped: + name = "layout_picker_thumbnail_mode_button_tapped" + case .logSpecialCondition: + name = "log_special_condition" + case .loginFailed: + name = "login_failed_to_login" + case .loginFailedToGuessXMLRPC: + name = "login_failed_to_guess_xmlrpc" + case .loginAutoFillCredentialsFilled: + name = "login_autofill_credentials_filled" + case .loginAutoFillCredentialsUpdated: + name = "login_autofill_credentials_updated" + case .loginProloguePaged: + name = "login_prologue_paged" + case .loginPrologueViewed: + name = "login_prologue_viewed" + case .loginEmailFormViewed: + name = "login_email_form_viewed" + case .loginMagicLinkOpenEmailClientViewed: + name = "login_magic_link_open_email_client_viewed" + case .loginMagicLinkRequestFormViewed: + name = "login_magic_link_request_form_viewed" + case .loginPasswordFormViewed: + name = "login_password_form_viewed" + case .loginURLFormViewed: + name = "login_url_form_viewed" + case .loginURLHelpScreenViewed: + name = "login_url_help_screen_viewed" + case .loginUsernamePasswordFormViewed: + name = "login_username_password_form_viewed" + case .loginTwoFactorFormViewed: + name = "login_two_factor_form_viewed" + case .loginEpilogueViewed: + name = "login_epilogue_viewed" + case .loginForgotPasswordClicked: + name = "login_forgot_password_clicked" + case .loginSocialButtonClick: + name = "login_social_button_click" + case .loginSocialButtonFailure: + name = "login_social_button_failure" + case .loginSocialConnectSuccess: + name = "login_social_connect_success" + case .loginSocialConnectFailure: + name = "login_social_connect_failure" + case .loginSocialSuccess: + name = "login_social_login_success" + case .loginSocialFailure: + name = "login_social_login_failure" + case .loginSocial2faNeeded: + name = "login_social_2fa_needed" + case .loginSocialAccountsNeedConnecting: + name = "login_social_accounts_need_connecting" + case .loginSocialErrorUnknownUser: + name = "login_social_error_unknown_user" + case .logout: + name = "account_logout" + case .lowMemoryWarning: + name = "application_low_memory_warning" + case .mediaLibraryDeletedItems: + name = "media_library_deleted_items" + case .mediaLibraryEditedItemMetadata: + name = "media_library_edited_item_metadata" + case .mediaLibraryPreviewedItem: + name = "media_library_previewed_item" + case .mediaLibrarySharedItemLink: + name = "media_library_shared_item_link" + case .mediaLibraryAddedPhoto: + name = "media_library_photo_added" + case .mediaLibraryAddedPhotoViaDeviceLibrary: + name = "media_library_photo_added" + properties = [Constants.tracksEventPropertyViaKey: "device_library"] + case .mediaLibraryAddedPhotoViaOtherApps: + name = "media_library_photo_added" + properties = [Constants.tracksEventPropertyViaKey: "other_library"] + case .mediaLibraryAddedPhotoViaStockPhotos: + name = "media_library_photo_added" + properties = [Constants.tracksEventPropertyViaKey: "stock_photos"] + case .mediaLibraryAddedPhotoViaCamera: + name = "media_library_photo_added" + properties = [Constants.tracksEventPropertyViaKey: "camera"] + case .mediaLibraryAddedVideo: + name = "media_library_video_added" + case .mediaLibraryAddedVideoViaDeviceLibrary: + name = "media_library_video_added" + properties = [Constants.tracksEventPropertyViaKey: "device_library"] + case .mediaLibraryAddedVideoViaCamera: + name = "media_library_video_added" + properties = [Constants.tracksEventPropertyViaKey: "camera"] + case .mediaLibraryAddedVideoViaOtherApps: + name = "media_library_video_added" + properties = [Constants.tracksEventPropertyViaKey: "other_apps"] + case .mediaLibraryUploadMediaRetried: + name = "media_library_upload_media_retried" + case .mediaServiceUploadStarted: + name = "media_service_upload_started" + case .mediaServiceUploadFailed: + name = "media_service_upload_failed" + case .mediaServiceUploadSuccessful: + name = "media_service_upload_successful" + case .mediaServiceUploadCanceled: + name = "media_service_upload_canceled" + case .menusAccessed: + name = "menus_accessed" + case .menusCreatedItem: + name = "menus_created_item" + case .menusCreatedMenu: + name = "menus_created_menu" + case .menusDeletedMenu: + name = "menus_deleted_menu" + case .menusDeletedItem: + name = "menus_deleted_item" + case .menusDiscardedChanges: + name = "menus_discarded_changes" + case .menusEditedItem: + name = "menus_edited_item" + case .menusOpenedItemEditor: + name = "menus_opened_item_editor" + case .menusOrderedItems: + name = "menus_ordered_items" + case .menusSavedMenu: + name = "menus_saved_menu" + case .meTabAccessed: + name = "me_tab_accessed" + case .mySitesTabAccessed: + name = "my_site_tab_accessed" + case .notificationsCommentApproved: + name = "notifications_comment_approved" + case .notificationsCommentFlaggedAsSpam: + name = "notifications_flagged_as_spam" + case .notificationsSiteFollowAction: + name = "notifications_follow_action" + case .notificationsCommentLiked: + name = "notifications_comment_liked" + case .notificationsCommentRepliedTo: + name = "notifications_replied_to" + case .notificationsCommentTrashed: + name = "notifications_comment_trashed" + case .notificationsCommentUnapproved: + name = "notifications_comment_unapproved" + case .notificationsSiteUnfollowAction: + name = "notifications_unfollow_action" + case .notificationsCommentUnliked: + name = "notifications_comment_unliked" + case .notificationsMissingSyncWarning: + name = "notifications_missing_sync_warning" + case .notificationsSettingsUpdated: + name = "notification_settings_updated" + case .notificationsSettingsBlogNotificationsOn: + name = "followed_blog_notifications_settings_on" + case .notificationsSettingsBlogNotificationsOff: + name = "followed_blog_notifications_settings_off" + case .notificationsSettingsEmailNotificationsOn: + name = "followed_blog_notifications_settings_email_on" + case .notificationsSettingsEmailNotificationsOff: + name = "followed_blog_notifications_settings_email_off" + case .notificationsSettingsEmailDeliveryInstantly: + name = "followed_blog_notifications_settings_email_instantly" + case .notificationsSettingsEmailDeliveryDaily: + name = "followed_blog_notifications_settings_email_daily" + case .notificationsSettingsEmailDeliveryWeekly: + name = "followed_blog_notifications_settings_email_weekly" + case .notificationsSettingsCommentsNotificationsOn: + name = "followed_blog_notifications_settings_comments_on" + case .notificationsSettingsCommentsNotificationsOff: + name = "followed_blog_notifications_settings_comments_off" + case .notificationsTappedNewPost: + name = "notification_tapped_new_post" + case .notificationsTappedViewReader: + name = "notification_tapped_view_reader" + case .notificationsTappedSegmentedControl: + name = "notification_tapped_segmented_control" + case .notificationsUploadMediaSuccessWritePost: + name = "notifications_upload_media_success_write_post" + case .notificationsShareSuccessEditPost: + name = "notifications_share_success_edit_post" + case .onePasswordFailed: + name = "one_password_failed" + case .onePasswordLogin: + name = "one_password_login" + case .onePasswordSignup: + name = "one_password_signup" + case .openedComments: + name = "site_menu_opened" + properties = [Constants.tracksEventPropertyMenuItemKey: "comments"] + case .openedLogin: + name = "login_accessed" + case .openedMediaLibrary: + name = "site_menu_opened" + properties = [Constants.tracksEventPropertyMenuItemKey: "library"] + case .openedNotificationsList: + name = "notifications_accessed" + case .openedNotificationDetails: + name = "notifications_notification_details_opened" + case .openedNotificationSettingsList: + name = "notification_settings_list_opened" + case .openedNotificationSettingStreams: + name = "notification_settings_streams_opened" + case .openedNotificationSettingDetails: + name = "notification_settings_details_opened" + case .openedPages: + name = "site_menu_opened" + properties = [Constants.tracksEventPropertyMenuItemKey: "pages"] + case .openedPeople: + name = "people_management_list_opened" + case .openedPerson: + name = "people_management_details_opened" + case .openedPlans: + name = "site_menu_opened" + properties = [Constants.tracksEventPropertyMenuItemKey: "plans"] + case .openedPlansComparison: + name = "plans_compare" + case .openedPluginDirectory: + name = "plugin_directory_opened" + case .openedPluginList: + name = "plugin_list_opened" + case .openedPosts: + name = "site_menu_opened" + properties = [Constants.tracksEventPropertyMenuItemKey: "posts"] + case .openedSiteSettings: + name = "site_menu_opened" + properties = [Constants.tracksEventPropertyMenuItemKey: "settings"] + case .openedSharingManagement: + name = "site_menu_opened" + properties = [Constants.tracksEventPropertyMenuItemKey: "sharing_management"] + case .openedSupport: + name = "support_opened" + case .openedViewAdmin: + name = "site_menu_view_admin_opened" + case .openedViewSite: + name = "site_menu_view_site_opened" + case .personRemoved: + name = "people_management_person_removed" + case .personUpdated: + name = "people_management_person_updated" + case .pluginUpdated: + name = "plugin_updated" + case .pluginRemoved: + name = "plugin_removed" + case .pluginInstalled: + name = "plugin_installed" + case .pluginActivated: + name = "plugin_activated" + case .pluginDeactivated: + name = "plugin_deactivated" + case .pluginAutoupdateEnabled: + name = "plugin_autoupdate_enabled" + case .pluginAutoupdateDisabled: + name = "plugin_autoupdate_disabled" + case .pluginSearchPerformed: + name = "plugin_search_performed" + case .pageSetParentViewed: + name = "site_pages_set_parent_viewed" + case .pageSetParentSearchAccessed: + name = "site_pages_set_parent_search_accessed" + case .pageSetParentDonePressed: + name = "site_pages_set_parent_done_pressed" + case .postEpilogueDisplayed: + name = "post_epilogue_displayed" + case .postEpilogueEdit: + name = "post_epilogue_edit" + case .postEpilogueShare: + name = "post_epilogue_share" + case .postEpilogueView: + name = "post_epilogue_view" + case .postListAuthorFilterChanged: + name = "post_list_author_filter_changed" + case .postListDraftAction: + name = "post_list_button_pressed" + properties = [Constants.tracksEventPropertyButtonKey: "draft"] + case .postListEditAction: + name = "post_list_button_pressed" + properties = [Constants.tracksEventPropertyButtonKey: "edit"] + case .postListDuplicateAction: + name = "post_list_button_pressed" + properties = [Constants.tracksEventPropertyButtonKey: "copy"] // Property aligned with Android + case .postListExcessiveLoadMoreDetected: + name = "post_list_excessive_load_more_detected" + case .postListLoadedMore: + name = "post_list_load_more_triggered" + case .postListNoResultsButtonPressed: + name = "post_list_create_post_tapped" + case .postListOpenedCellMenu: + name = "post_list_cell_menu_opened" + case .postListPublishAction: + name = "post_list_button_pressed" + properties = [Constants.tracksEventPropertyButtonKey: "publish"] + case .postListScheduleAction: + name = "post_list_button_pressed" + properties = [Constants.tracksEventPropertyButtonKey: "schedule"] + case .postListPullToRefresh: + name = "post_list_pull_to_refresh_triggered" + case .postListRestoreAction: + name = "post_list_button_pressed" + properties = [Constants.tracksEventPropertyButtonKey: "restore"] + case .postListSearchOpened: + name = "post_list_search_opened" + case .postListStatsAction: + name = "post_list_button_pressed" + properties = [Constants.tracksEventPropertyButtonKey: "stats"] + case .postListStatusFilterChanged: + name = "post_list_status_filter_changed" + case .postListTrashAction: + name = "post_list_button_pressed" + properties = [Constants.tracksEventPropertyButtonKey: "trash"] + case .postListViewAction: + name = "post_list_button_pressed" + properties = [Constants.tracksEventPropertyButtonKey: "view"] + case .postListToggleButtonPressed: + name = "post_list_toggle_button_pressed" + case .postRevisionsListViewed: + name = "revisions_list_viewed" + case .postRevisionsDetailViewed: + name = "revisions_detail_viewed" + case .postRevisionsDetailCancelled: + name = "revisions_detail_cancelled" + case .postRevisionsRevisionLoaded: + name = "revisions_revision_loaded" + case .postRevisionsLoadUndone: + name = "revisions_load_undone" + case .postSettingsShown: + name = "post_settings_shown" + case .postSettingsAddTagsShown: + name = "post_settings_add_tags_shown" + case .postSettingsTagsAdded: + name = "post_settings_tags_added" + case .pushAuthenticationApproved: + name = "push_authentication_approved" + case .pushAuthenticationExpired: + name = "push_authentication_expired" + case .pushAuthenticationFailed: + name = "push_authentication_failed" + case .pushAuthenticationIgnored: + name = "push_authentication_ignored" + case .pushNotificationAlertPressed: + name = "push_notification_alert_tapped" + case .pushNotificationReceived: + name = "push_notification_received" + case .pushNotificationQuickActionCompleted: + name = "quick_action_touched" + case .pushNotificationPrimerSeen: + name = "notifications_primer_seen" + case .pushNotificationPrimerAllowTapped: + name = "notifications_primer_allow_tapped" + case .pushNotificationPrimerNoTapped: + name = "notifications_primer_no_tapped" + case .pushNotificationWinbackShown: + name = "notifications_winback_shown" + case .pushNotificationWinbackNoTapped: + name = "notifications_winback_no_tapped" + case .pushNotificationWinbackSettingsTapped: + name = "notifications_winback_settings_tapped" + case .pushNotificationOSAlertShown: + name = "notifications_os_alert_shown" + case .pushNotificationOSAlertAllowed: + name = "notifications_os_alert_allowed" + case .pushNotificationOSAlertDenied: + name = "notifications_os_alert_denied" + case .quickStartAllToursCompleted: + name = "quick_start_all_tasks_completed" + case .quickStartChecklistItemTapped: + name = "quick_start_list_item_tapped" + case .quickStartChecklistSkippedAll: + name = "quick_start_list_all_tasks_skipped" + case .quickStartChecklistViewed: + name = "quick_start_list_viewed" + case .quickStartCongratulationsViewed: + name = "quick_start_list_completed_viewed" + case .quickStartRequestAlertButtonTapped: + name = "quick_start_request_dialog_button_tapped" + case .quickStartRequestAlertViewed: + name = "quick_start_request_dialog_viewed" + case .quickStartSuggestionButtonTapped: + name = "quick_start_dialog_button_tapped" + case .quickStartSuggestionViewed: + name = "quick_start_dialog_viewed" + case .quickStartTourCompleted: + name = "quick_start_task_completed" + case .quickStartMigrationDialogViewed: + name = "quick_start_migration_dialog_viewed" + case .quickStartMigrationDialogPositiveTapped: + name = "quick_start_migration_dialog_button_tapped" + properties = ["type": "positive"] + case .quickStartRemoveDialogButtonRemoveTapped: + name = "quick_start_remove_dialog_button_tapped" + properties = ["type": "positive"] + case .quickStartRemoveDialogButtonCancelTapped: + name = "quick_start_remove_dialog_button_tapped" + properties = ["type": "negative"] + case .quickStartTypeDismissed: + name = "quick_start_type_dismissed" + case .quickStartListCollapsed: + name = "quick_start_list_collapsed" + case .quickStartListExpanded: + name = "quick_start_list_expanded" + case .quickStartListItemSkipped: + name = "quick_start_list_item_skipped" + case .quickStartNotificationStarted: + name = "quick_start_notification_sent" + case .quickStartNotificationTapped: + name = "quick_start_notification_tapped" + case .readerAccessed: + name = "reader_accessed" + case .readerArticleCommentedOn: + name = "reader_article_commented_on" + case .readerArticleCommentLiked: + name = "reader_article_comment_liked" + case .readerArticleCommentUnliked: + name = "reader_article_comment_unliked" + case .readerArticleCommentsOpened: + name = "reader_article_comments_opened" + case .readerArticleLiked: + name = "reader_article_liked" + case .readerArticleReblogged: + name = "reader_article_reblogged" + case .readerArticleDetailReblogged: + name = "reader_article_detail_reblogged" + case .readerArticleOpened: + name = "reader_article_opened" + case .readerArticleUnliked: + name = "reader_article_unliked" + case .readerArticleDetailLiked: + name = "reader_article_detail_liked" + case .readerArticleDetailUnliked: + name = "reader_article_detail_unliked" + case .readerDiscoverViewed: + name = "reader_discover_viewed" + case .readerFreshlyPressedLoaded: + name = "reader_freshly_pressed_loaded" + case .readerInfiniteScroll: + name = "reader_infinite_scroll_performed" + case .readerListFollowed: + name = "reader_list_followed" + case .readerListLoaded: + name = "reader_list_loaded" + case .readerListPreviewed: + name = "reader_list_preview" + case .readerListUnfollowed: + name = "reader_list_unfollowed" + case .readerListNotificationMenuOn: + name = "followed_blog_notifications_reader_menu_on" + case .readerListNotificationMenuOff: + name = "followed_blog_notifications_reader_menu_off" + case .readerListNotificationEnabled: + name = "followed_blog_notifications_reader_enabled" + case .readerPostSaved: + name = "reader_post_saved" + case .readerPostUnsaved: + name = "reader_post_unsaved" + case .readerSavedPostOpened: + name = "reader_saved_post_opened" + case .readerSavedListViewed: + name = "reader_saved_list_viewed" + case .readerSearchLoaded: + name = "reader_search_loaded" + case .readerSearchPerformed: + name = "reader_search_performed" + case .readerSearchResultTapped: + name = "reader_searchcard_clicked" + case .readerSiteBlocked: + name = "reader_blog_blocked" + case .readerSiteFollowed: + name = "reader_site_followed" + case .readerSitePreviewed: + name = "reader_blog_preview" + case .readerSiteUnfollowed: + name = "reader_site_unfollowed" + case .readerSiteShared: + name = "reader_site_shared" + case .readerTagFollowed: + name = "reader_reader_tag_followed" + properties = ["source": "unknown"] + case .readerTagLoaded: + name = "reader_tag_loaded" + case .readerTagPreviewed: + name = "reader_tag_preview" + case .readerTagUnfollowed: + name = "reader_reader_tag_unfollowed" + case .selectedInstallJetpack: + name = "install_jetpack_selected" + case .sentItemToGooglePlus: + name = "sent_item_to_google_plus" + case .sentItemToInstapaper: + name = "sent_item_to_instapaper" + case .sentItemToPocket: + name = "sent_item_to_pocket" + case .sentItemToWordPress: + name = "sent_item_to_wordpress" + case .sharedItem: + name = "shared_item" + case .sharedItemViaEmail: + name = "shared_item_via_email" + case .sharedItemViaFacebook: + name = "shared_item_via_facebook" + case .sharedItemViaSMS: + name = "shared_item_via_sms" + case .sharedItemViaTwitter: + name = "shared_item_via_twitter" + case .sharedItemViaWeibo: + name = "shared_item_via_weibo" + case .shortcutLogIn: + name = "3d_touch_shortcut_log_in" + case .shortcutNewPost: + name = "3d_touch_shortcut_new_post" + case .shortcutNotifications: + name = "3d_touch_shortcut_notifications" + case .shortcutNewPhotoPost: + name = "3d_touch_shortcut_new_photo_post" + case .shortcutStats: + name = "3d_touch_shortcut_stats" + case .signedIn: + name = "signed_in" + case .signedInToJetpack: + name = "signed_into_jetpack" + case .signupButtonTapped: + name = "signup_button_tapped" + case .signupCancelled: + name = "signup_cancelled" + case .signupEmailButtonTapped: + name = "signup_email_button_tapped" + case .signupEmailToLogin: + name = "signup_email_to_login" + case .signupEpilogueViewed: + name = "signup_epilogue_viewed" + case .signupEpilogueUnchanged: + name = "signup_epilogue_unchanged" + case .signupEpilogueDisplayNameUpdateSucceeded: + name = "signup_epilogue_update_display_name_succeeded" + case .signupEpilogueDisplayNameUpdateFailed: + name = "signup_epilogue_update_display_name_failed" + case .signupEpiloguePasswordUpdateSucceeded: + name = "signup_epilogue_update_password_succeeded" + case .signupEpiloguePasswordUpdateFailed: + name = "signup_epilogue_update_password_failed" + case .signupEpilogueUsernameTapped: + name = "signup_epilogue_username_tapped" + case .signupEpilogueUsernameSuggestionsFailed: + name = "signup_epilogue_username_suggestions_failed" + case .signupEpilogueUsernameUpdateSucceeded: + name = "signup_epilogue_update_username_succeeded" + case .signupEpilogueUsernameUpdateFailed: + name = "signup_epilogue_update_username_failed" + case .signupMagicLinkFailed: + name = "signup_magic_link_failed" + case .signupMagicLinkOpenEmailClientViewed: + name = "signup_magic_link_open_email_client_viewed" + case .signupMagicLinkOpened: + name = "signup_magic_link_opened" + case .signupMagicLinkSucceeded: + name = "signup_magic_link_succeeded" + case .signupSocialSuccess: + name = "signup_social_success" + case .signupSocialFailure: + name = "signup_social_failure" + case .signupSocialButtonFailure: + name = "signup_social_button_failure" + case .signupSocialButtonTapped: + name = "signup_social_button_tapped" + case .signupSocialToLogin: + name = "signup_social_to_login" + case .signupMagicLinkRequested: + name = "signup_magic_link_requested" + case .signupTermsButtonTapped: + name = "signup_terms_of_service_tapped" + case .siteSettingsSiteIconTapped: + name = "my_site_icon_tapped" + case .siteSettingsSiteIconRemoved: + name = "my_site_icon_removed" + case .siteSettingsSiteIconShotNew: + name = "my_site_icon_shot_new" + case .siteSettingsSiteIconGalleryPicked: + name = "my_site_icon_gallery_picked" + case .siteSettingsSiteIconCropped: + name = "my_site_icon_cropped" + case .siteSettingsSiteIconUploaded: + name = "my_site_icon_uploaded" + case .siteSettingsSiteIconUploadFailed: + name = "my_site_icon_upload_unsuccessful" + case .siteSettingsDeleteSiteAccessed: + name = "site_settings_delete_site_accessed" + case .siteSettingsDeleteSitePurchasesRequested: + name = "site_settings_delete_site_purchases_requested" + case .siteSettingsDeleteSitePurchasesShowClicked: + name = "site_settings_delete_site_purchases_show_clicked" + case .siteSettingsDeleteSitePurchasesShown: + name = "site_settings_delete_site_purchases_shown" + case .siteSettingsDeleteSiteRequested: + name = "site_settings_delete_site_requested" + case .siteSettingsDeleteSiteResponseError: + name = "site_settings_delete_site_response_error" + case .siteSettingsDeleteSiteResponseOK: + name = "site_settings_delete_site_response_ok" + case .siteSettingsExportSiteAccessed: + name = "site_settings_export_site_accessed" + case .siteSettingsExportSiteRequested: + name = "site_settings_export_site_requested" + case .siteSettingsExportSiteResponseError: + name = "site_settings_export_site_response_error" + case .siteSettingsExportSiteResponseOK: + name = "site_settings_export_site_response_ok" + case .siteSettingsStartOverAccessed: + name = "site_settings_start_over_accessed" + case .siteSettingsStartOverContactSupportClicked: + name = "site_settings_start_over_contact_support_clicked" + case .spotlightSearchOpenedApp: + name = "spotlight_search_opened_app" + case .spotlightSearchOpenedPost: + name = "spotlight_search_opened_post" + case .spotlightSearchOpenedPage: + name = "spotlight_search_opened_page" + case .spotlightSearchOpenedReaderPost: + name = "spotlight_search_opened_reader_post" + case .skippedConnectingToJetpack: + name = "skipped_connecting_to_jetpack" + case .statsAccessed: + name = "stats_accessed" + case .statsSubscribersAccessed: + name = "stats_subscribers_accessed" + case .statsDateTappedBackward: + name = "stats_date_tapped_backward" + case .statsDateTappedForward: + name = "stats_date_tapped_forward" + case .statsInsightsAccessed: + name = "stats_insights_accessed" + case .statsItemSelectedAddInsight: + name = "stats_add_insight_item_selected" + case .statsItemTappedAuthors: + name = "stats_authors_view_post_tapped" + case .statsItemTappedClicks: + name = "stats_clicks_item_tapped" + case .statsItemTappedInsightMoveDown: + name = "stats_insight_move_down_tapped" + case .statsItemTappedInsightMoveUp: + name = "stats_insight_move_up_tapped" + case .statsItemTappedInsightRemove: + name = "stats_insight_remove_tapped" + case .statsItemTappedInsightsAddStat: + name = "stats_add_insight_item_tapped" + case .statsItemTappedPostStatsMonthsYears: + name = "stats_posts_and_pages_months_years_item_tapped" + case .statsItemTappedPostStatsRecentWeeks: + name = "stats_posts_and_pages_recent_weeks_item_tapped" + case .statsItemTappedInsightsCustomizeDismiss: + name = "stats_customize_insights_dismiss_item_tapped" + case .statsItemTappedInsightsCustomizeTry: + name = "stats_customize_insights_try_item_tapped" + case .statsItemTappedLatestPostSummaryNewPost: + name = "stats_latest_post_summary_add_new_post_tapped" + case .statsItemTappedLatestPostSummarySharePost: + name = "stats_latest_post_summary_share_post_tapped" + case .statsItemTappedLatestPostSummaryPost: + name = "stats_latest_post_summary_post_item_tapped" + case .statsItemTappedLatestPostSummaryViewPostDetails: + name = "stats_latest_post_summary_view_post_details_tapped" + case .statsItemTappedManageInsight: + name = "stats_manage_insight_tapped" + case .statsItemTappedPostsAndPages: + name = "stats_posts_and_pages_item_tapped" + case .statsItemTappedPostingActivityDay: + name = "stats_posting_activity_day_tapped" + case .statsItemTappedSearchTerms: + name = "stats_search_terms_item_tapped" + case .statsItemTappedTagsAndCategories: + name = "stats_tags_and_categories_view_tag_tapped" + case .statsItemTappedVideoTapped: + name = "stats_video_plays_video_tapped" + case .statsOverviewBarChartTapped: + name = "stats_overview_bar_chart_tapped" + case .statsOverviewTypeTappedComments: + name = "stats_overview_type_tapped_comments" + case .statsOverviewTypeTappedLikes: + name = "stats_overview_type_tapped_likes" + case .statsOverviewTypeTappedViews: + name = "stats_overview_type_tapped_views" + case .statsOverviewTypeTappedVisitors: + name = "stats_overview_type_tapped_visitors" + case .statsPeriodDaysAccessed: + name = "stats_period_accessed" + properties = ["period": "days"] + case .statsPeriodMonthsAccessed: + name = "stats_period_accessed" + properties = ["period": "months"] + case .statsPeriodWeeksAccessed: + name = "stats_period_accessed" + properties = ["period": "weeks"] + case .statsPeriodYearsAccessed: + name = "stats_period_accessed" + properties = ["period": "years"] + case .statsScrolledToBottom: + name = "stats_scrolled_to_bottom" + case .statsSinglePostAccessed: + name = "stats_single_post_accessed" + case .statsTappedBarChart: + name = "stats_bar_chart_tapped" + case .statsViewAllAccessed: + name = "stats_view_all_accessed" + case .statsViewMoreTappedAuthors: + name = "stats_authors_view_more_tapped" + case .statsViewMoreTappedClicks: + name = "stats_clicks_view_more_tapped" + case .statsViewMoreTappedComments: + name = "stats_comments_view_more_tapped" + case .statsViewMoreTappedCountries: + name = "stats_countries_view_more_tapped" + case .statsViewMoreTappedFileDownloads: + name = "stats_file_downloads_view_more_tapped" + case .statsViewMoreTappedFollowers: + name = "stats_followers_view_more_tapped" + case .statsViewMoreTappedPostsAndPages: + name = "stats_posts_and_pages_view_more_tapped" + case .statsViewMoreTappedPostingActivity: + name = "stats_posting_activity_view_more_tapped" + case .statsViewMoreTappedPublicize: + name = "stats_publicize_view_more_tapped" + case .statsViewMoreTappedReferrers: + name = "stats_referrers_view_more_tapped" + case .statsViewMoreTappedSearchTerms: + name = "stats_search_terms_view_more_tapped" + case .statsViewMoreTappedTagsAndCategories: + name = "stats_tags_and_categories_view_more_tapped" + case .statsViewMoreTappedThisYear: + name = "stats_this_year_view_more_tapped" + case .statsViewMoreTappedVideoPlays: + name = "stats_video_plays_view_more_tapped" + case .stockMediaAccessed: + name = "stock_media_accessed" + case .stockMediaSearched: + name = "stock_media_searched" + case .stockMediaUploaded: + name = "stock_media_uploaded" + case .supportReceivedResponseFromSupport: + name = "support_received_response_from_support" + case .supportHelpCenterUserSearched: + name = "support_help_center_user_searched" + case .supportIdentityFormViewed: + name = "support_identity_form_viewed" + case .supportIdentitySet: + name = "support_identity_set" + case .supportHelpCenterViewed: + name = "support_help_center_viewed" + case .supportNewRequestViewed: + name = "support_new_request_viewed" + case .supportTicketListViewed: + name = "support_ticket_list_viewed" + case .supportNewRequestCreated: + name = "support_new_request_created" + case .supportNewRequestFailed: + name = "support_new_request_failed" + case .supportNewRequestFileAttached: + name = "support_new_request_file_attached" + case .supportNewRequestFileAttachmentFailed: + name = "support_new_request_file_attachment_failed" + case .supportTicketUserReplied: + name = "support_ticket_user_replied" + case .supportTicketUserReplyFailed: + name = "support_ticket_user_reply_failed" + case .supportTicketListViewFailed: + name = "support_ticket_list_view_failed" + case .supportTicketUserViewed: + name = "support_ticket_user_viewed" + case .supportTicketViewFailed: + name = "support_ticket_view_failed" + case .themesAccessedThemeBrowser: + name = "themes_theme_browser_accessed" + case .themesAccessedSearch: + name = "themes_search_accessed" + case .themesChangedTheme: + name = "themes_theme_changed" + case .themesCustomizeAccessed: + name = "themes_customize_accessed" + case .themesDemoAccessed: + name = "themes_demo_accessed" + case .themesDetailsAccessed: + name = "themes_details_accessed" + case .themesPreviewedSite: + name = "themes_theme_for_site_previewed" + case .themesSupportAccessed: + name = "themes_support_accessed" + case .trainTracksInteract: + name = "traintracks_interact" + case .trainTracksRender: + name = "traintracks_render" + case .twoFactorCodeRequested: + name = "two_factor_code_requested" + case .twoFactorSentSMS: + name = "two_factor_sent_sms" + case .openedAccountSettings: + name = "account_settings_opened" + case .accountSettingsChangeUsernameSucceeded: + name = "account_settings_change_username_succeeded" + case .accountSettingsChangeUsernameFailed: + name = "account_settings_change_username_failed" + case .accountSettingsChangeUsernameSuggestionsFailed: + name = "account_settings_change_username_suggestions_failed" + case .openedAppSettings: + name = "app_settings_opened" + case .openedWebPreview: + name = "web_preview_opened" + case .openedMyProfile: + name = "my_profile_opened" + case .sharingButtonSettingsChanged: + name = "sharing_buttons_settings_changed" + case .sharingButtonOrderChanged: + name = "sharing_buttons_order_changed" + case .sharingButtonShowReblogChanged: + name = "sharing_buttons_show_reblog_changed" + case .sharingOpenedPublicize: + name = "publicize_opened" + case .sharingOpenedSharingButtonSettings: + name = "sharing_buttons_opened" + case .sharingPublicizeConnected: + name = "publicize_service_connected" + case .sharingPublicizeDisconnected: + name = "publicize_service_disconnected" + case .sharingPublicizeConnectionAvailableToAllChanged: + name = "publicize_connection_availability_changed" + case .loginMagicLinkExited: + name = "login_magic_link_exited" + case .loginMagicLinkFailed: + name = "login_magic_link_failed" + case .loginMagicLinkOpened: + name = "login_magic_link_opened" + case .loginMagicLinkRequested: + name = "login_magic_link_requested" + case .loginMagicLinkSucceeded: + name = "login_magic_link_succeeded" + case .shareExtensionError: + name = "share_extension_error" + case .searchAdsAttribution: + name = "searchads_attribution_detail_received" + case .debugDeletedOrphanedEntities: + name = "debug_deleted_orphaned_entities" + case .widgetActiveSiteChanged: + name = "widget_active_site_changed" + case .welcomeNoSitesInterstitialShown: + name = "welcome_no_sites_interstitial_shown" + case .welcomeNoSitesInterstitialButtonTapped: + name = "welcome_no_sites_interstitial_button_tapped" + case .welcomeNoSitesInterstitialDismissed: + name = "welcome_no_sites_interstitial_dismissed" + + // The following are yet to be implemented. + // + // If you get test failures in AnalyticsTrackerAutomatticTracks, it's most likely + // because there are new . enum values. This can mean that somebody is + // currently working on it. In cases like this, add the enum values here, returning + // as `nil`. The tests should pass. + case .defaultAccountChanged, + .noStat, + .performedCoreDataMigrationFixFor45, + .maxValue: + return nil + @unknown default: + return nil + } + + return TracksMappedEvent(name: name, properties: properties) + } +} + +private enum Constants { + static let tracksEventPropertyButtonKey = "button" + static let tracksEventPropertyMenuItemKey = "menu_item" + static let tracksEventPropertyViaKey = "via" +} diff --git a/WordPress/Classes/Utility/Analytics/WPAnalytics+Domains.swift b/WordPress/Classes/Utility/Analytics/WPAnalytics+Domains.swift index 08f522c0c5f0..b2aacd81e898 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalytics+Domains.swift +++ b/WordPress/Classes/Utility/Analytics/WPAnalytics+Domains.swift @@ -3,14 +3,6 @@ import BuildSettingsKit import WordPressShared extension WPAnalytics { - @objc public class var eventNamePrefix: String { - WPAnalyticsTesting.eventNamePrefix ?? BuildSettings.current.eventNamePrefix - } - - @objc public class var explatPlatform: String { - WPAnalyticsTesting.explatPlatform ?? BuildSettings.current.explatPlatform - } - /// Checks if the Domain Purchasing Feature Flag is enabled. private static var domainPurchasingEnabled: Bool { RemoteFeatureFlag.plansInSiteCreation.enabled() diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.h b/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.h deleted file mode 100644 index 74db20457132..000000000000 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.h +++ /dev/null @@ -1,10 +0,0 @@ -#import -@import WordPressSharedObjC; - -@interface WPAnalyticsTrackerAutomatticTracks : NSObject - -+ (NSString *)eventNameForStat:(WPAnalyticsStat)stat; - -- (instancetype)initWithEventNamePrefix:(NSString *)eventNamePrefix platform:(NSString *)platform; - -@end diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m b/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m deleted file mode 100644 index 80806bdf7912..000000000000 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsTrackerAutomatticTracks.m +++ /dev/null @@ -1,2087 +0,0 @@ -#import "WPAnalyticsTrackerAutomatticTracks.h" -#import "AccountService.h" -#import "BlogService.h" -#import "WPAccount.h" -#import "Blog.h" -#ifdef KEYSTONE -#import "Keystone-Swift.h" -#else -#import "WordPress-Swift.h" -#endif -@import AutomatticTracks; -@import AutomatticTracksEvents; - -@interface TracksEventPair : NSObject -@property (nonatomic, copy) NSString *eventName; -@property (nonatomic, strong) NSDictionary *properties; -@end - -@implementation TracksEventPair -@end - - -@interface WPAnalyticsTrackerAutomatticTracks () - -@property (nonatomic, strong) TracksContextManager *contextManager; -@property (nonatomic, strong) TracksService *tracksService; -@property (nonatomic, strong) NSDictionary *userProperties; -@property (nonatomic, strong) NSString *anonymousID; -@property (nonatomic, strong) NSString *loggedInID; - -@end - -NSString *const TracksEventPropertyButtonKey = @"button"; -NSString *const TracksEventPropertyMenuItemKey = @"menu_item"; -NSString *const TracksUserDefaultsAnonymousUserIDKey = @"TracksAnonymousUserID"; -NSString *const TracksUserDefaultsLoggedInUserIDKey = @"TracksLoggedInUserID"; - -@implementation WPAnalyticsTrackerAutomatticTracks - -@synthesize loggedInID = _loggedInID; -@synthesize anonymousID = _anonymousID; - -+ (NSString *)eventNameForStat:(WPAnalyticsStat)stat -{ - return [self eventPairForStat:stat].eventName; -} - -- (instancetype)init { - return [self initWithEventNamePrefix:[WPAnalytics eventNamePrefix] platform:[WPAnalytics explatPlatform]]; -} - -- (instancetype)initWithEventNamePrefix:(NSString *)eventNamePrefix platform:(NSString *)platform -{ - self = [super init]; - if (self) { - _contextManager = [TracksContextManager new]; - _tracksService = [[TracksService alloc] initWithContextManager:_contextManager]; - _tracksService.eventNamePrefix = eventNamePrefix; - _tracksService.platform = platform; - } - return self; -} - -- (void)track:(WPAnalyticsStat)stat -{ - [self track:stat withProperties:nil]; -} - -- (void)track:(WPAnalyticsStat)stat withProperties:(NSDictionary *)properties -{ - TracksEventPair *eventPair = [[self class] eventPairForStat:stat]; - if (!eventPair) { - DDLogInfo(@"WPAnalyticsStat not supported by WPAnalyticsTrackerAutomatticTracks: %@", @(stat)); - return; - } - - NSMutableDictionary *mergedProperties = [NSMutableDictionary new]; - - [mergedProperties addEntriesFromDictionary:eventPair.properties]; - [mergedProperties addEntriesFromDictionary:properties]; - - [self trackString:eventPair.eventName withProperties:mergedProperties]; -} - -- (void)trackString:(NSString *)event -{ - [self trackString:event withProperties:nil]; -} - -- (void)trackString:(NSString *)event withProperties:(NSDictionary *)properties { - if (properties == nil) { - DDLogInfo(@"🔵 Tracked: %@", event); - } else { - NSArray *propertyKeys = [[properties allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; - NSString *propertiesDescription = [[propertyKeys wp_map:^NSString *(NSString *key) { - return [NSString stringWithFormat:@"%@: %@", key, properties[key]]; - }] componentsJoinedByString:@", "]; - DDLogInfo(@"🔵 Tracked: %@ <%@>", event, propertiesDescription); - } - - [self.tracksService trackEventName:event withCustomProperties:properties]; -} - -- (void)beginSession -{ - if (self.loggedInID.length > 0) { - [self.tracksService switchToAuthenticatedUserWithUsername:self.loggedInID userID:nil wpComToken:[WPAccount tokenForUsername:self.loggedInID] skipAliasEventCreation:YES]; - } else { - [self.tracksService switchToAnonymousUserWithAnonymousID:self.anonymousID]; - } - - [self refreshMetadata]; -} - -- (void)clearQueuedEvents -{ - [self.tracksService clearQueuedEvents]; -} - -- (void)refreshMetadata -{ - NSManagedObjectContext *context = [[ContextManager sharedInstance] mainContext]; - __block NSUInteger blogCount; - __block NSString *username; - __block NSNumber *userID; - __block NSString *emailAddress; - __block BOOL accountPresent = NO; - __block BOOL jetpackBlogsPresent = NO; - __block WPAccount *account; - - [context performBlockAndWait:^{ - account = [WPAccount lookupDefaultWordPressComAccountInContext:context]; - - blogCount = [Blog countInContext:context]; - jetpackBlogsPresent = [Blog hasAnyJetpackBlogsInContext:context]; - if (account != nil) { - username = account.username; - userID = nil; - emailAddress = account.email; - accountPresent = YES; - } - }]; - - if ([[NSUUID alloc] initWithUUIDString:username]) { - // User has authenticated but we're waiting for account details to sync. - // Once details are synced this method will be called again with the actual - // username. For now just exit without making changes. - return; - } - - BOOL dotcom_user = (accountPresent && username.length > 0); - - // The user "uses" gutenberg if it is enabled on any of their sites. - __block BOOL gutenbergEnabled = NO; - [account.blogs enumerateObjectsUsingBlock:^(Blog * _Nonnull blog, BOOL * _Nonnull stop) { - if (blog.isGutenbergEnabled) { - gutenbergEnabled = YES; - *stop = YES; - } - }]; - - NSMutableDictionary *userProperties = [NSMutableDictionary new]; - userProperties[@"app_scheme"] = WPAnalyticsTesting.appURLScheme ?: WordPressAppDelegate.appURLScheme; - userProperties[@"platform"] = @"iOS"; - userProperties[@"dotcom_user"] = @(dotcom_user); - userProperties[@"jetpack_user"] = @(jetpackBlogsPresent); - userProperties[@"number_of_blogs"] = @(blogCount); - userProperties[@"accessibility_voice_over_enabled"] = @(UIAccessibilityIsVoiceOverRunning()); - userProperties[@"is_rtl_language"] = @(UIApplication.sharedApplication.userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft); - userProperties[@"gutenberg_enabled"] = @(gutenbergEnabled); - - [self.tracksService.userProperties removeAllObjects]; - [self.tracksService.userProperties addEntriesFromDictionary:userProperties]; - - // Tell the client what kind of user - if (dotcom_user == YES) { - if (self.loggedInID.length == 0) { - // No previous username logged - self.loggedInID = username; - self.anonymousID = nil; - - [self.tracksService switchToAuthenticatedUserWithUsername:username userID:@"" wpComToken:[WPAccount tokenForUsername:username] skipAliasEventCreation:NO]; - } else if ([self.loggedInID isEqualToString:username]){ - // Username did not change from last refreshMetadata - just make sure Tracks client has it - [self.tracksService switchToAuthenticatedUserWithUsername:username userID:@"" wpComToken:[WPAccount tokenForUsername:username] skipAliasEventCreation:YES]; - } else { - // Username changed for some reason - switch back to anonymous first - [self.tracksService switchToAnonymousUserWithAnonymousID:self.anonymousID]; - [self.tracksService switchToAuthenticatedUserWithUsername:username userID:@"" wpComToken:[WPAccount tokenForUsername:username] skipAliasEventCreation:NO]; - self.loggedInID = username; - self.anonymousID = nil; - } - } else { - // User is not authenticated, switch to an anonymous mode - [self.tracksService switchToAnonymousUserWithAnonymousID:self.anonymousID]; - self.loggedInID = nil; - } -} - -#pragma mark - Private methods - -- (NSString *)anonymousID -{ - if (_anonymousID == nil || _anonymousID.length == 0) { - NSString *anonymousID = [[UserPersistentStoreFactory userDefaultsInstance] stringForKey:TracksUserDefaultsAnonymousUserIDKey]; - if (anonymousID == nil) { - anonymousID = [[NSUUID UUID] UUIDString]; - [[UserPersistentStoreFactory userDefaultsInstance] setObject:anonymousID forKey:TracksUserDefaultsAnonymousUserIDKey]; - } - - _anonymousID = anonymousID; - } - - return _anonymousID; -} - -- (void)setAnonymousID:(NSString *)anonymousID -{ - _anonymousID = anonymousID; - - if (anonymousID == nil) { - [[UserPersistentStoreFactory userDefaultsInstance] removeObjectForKey:TracksUserDefaultsAnonymousUserIDKey]; - return; - } - - [[UserPersistentStoreFactory userDefaultsInstance] setObject:anonymousID forKey:TracksUserDefaultsAnonymousUserIDKey]; -} - -- (NSString *)loggedInID -{ - if (_loggedInID == nil || _loggedInID.length == 0) { - NSString *loggedInID = [[UserPersistentStoreFactory userDefaultsInstance] stringForKey:TracksUserDefaultsLoggedInUserIDKey]; - if (loggedInID != nil) { - _loggedInID = loggedInID; - } - } - - return _loggedInID; -} - -- (void)setLoggedInID:(NSString *)loggedInID -{ - _loggedInID = loggedInID; - - if (loggedInID == nil) { - [[UserPersistentStoreFactory userDefaultsInstance] removeObjectForKey:TracksUserDefaultsLoggedInUserIDKey]; - return; - } - - [[UserPersistentStoreFactory userDefaultsInstance] setObject:loggedInID forKey:TracksUserDefaultsLoggedInUserIDKey]; -} - -+ (TracksEventPair *)eventPairForStat:(WPAnalyticsStat)stat -{ - NSString *eventName; - NSDictionary *eventProperties; - - switch (stat) { - case WPAnalyticsStatABTestStart: - eventName = @"abtest_start"; - break; - case WPAnalyticsStatAddedSelfHostedSite: - eventName = @"self_hosted_blog_added"; - break; - case WPAnalyticsStatAddedSelfHostedSiteButJetpackNotConnectedToWPCom: - eventName = @"self_hosted_blog_added_jetpack_not_connected"; - break; - case WPAnalyticsStatActivityLogViewed: - eventName = @"activity_log_list_opened"; - break; - case WPAnalyticsStatActivityLogDetailViewed: - eventName = @"activity_log_detail_opened"; - break; - case WPAnalyticsStatActivityLogRewindStarted: - eventName = @"activity_log_rewind_started"; - break; - case WPAnalyticsStatAppIconChanged: - eventName = @"app_icon_changed"; - break; - case WPAnalyticsStatAppIconReset: - eventName = @"app_icon_reset"; - break; - case WPAnalyticsStatAppInstalled: - eventName = @"application_installed"; - break; - case WPAnalyticsStatAppUpgraded: - eventName = @"application_upgraded"; - break; - case WPAnalyticsStatApplicationOpened: - eventName = @"application_opened"; - break; - case WPAnalyticsStatAutoUploadPostInvoked: - eventName = @"auto_upload_post_invoked"; - break; - case WPAnalyticsStatApplicationClosed: - eventName = @"application_closed"; - break; - case WPAnalyticsStatAppReviewsCanceledFeedbackScreen: - eventName = @"app_reviews_feedback_screen_canceled"; - break; - case WPAnalyticsStatAppReviewsDeclinedToRateApp: - eventName = @"app_reviews_declined_to_rate_app"; - break; - case WPAnalyticsStatAppReviewsDidntLikeApp: - eventName = @"app_reviews_didnt_like_app"; - break; - case WPAnalyticsStatAppReviewsLikedApp: - eventName = @"app_reviews_liked_app"; - break; - case WPAnalyticsStatAppReviewsOpenedFeedbackScreen: - eventName = @"app_reviews_feedback_screen_opened"; - break; - case WPAnalyticsStatAppReviewsRatedApp: - eventName = @"app_reviews_rated_app"; - break; - case WPAnalyticsStatAppReviewsSawPrompt: - eventName = @"app_reviews_saw_prompt"; - break; - case WPAnalyticsStatAppReviewsSentFeedback: - eventName = @"app_reviews_feedback_sent"; - break; - case WPAnalyticsStatAppSettingsImageOptimizationChanged: - eventName = @"app_settings_image_optimization_changed"; - break; - case WPAnalyticsStatAppSettingsMediaRemoveLocationChanged: - eventName = @"app_settings_media_remove_location_changed"; - break; - case WPAnalyticsStatAppSettingsVideoOptimizationChanged: - eventName = @"app_settings_video_optimization_changed"; - break; - case WPAnalyticsStatAppSettingsGutenbergEnabled: - eventName = @"gutenberg_setting_enabled"; - break; - case WPAnalyticsStatAppSettingsGutenbergDisabled: - eventName = @"gutenberg_setting_disabled"; - break; - case WPAnalyticsStatAutomatedTransferCustomDomainDialogShown: - eventName = @"automated_transfer_custom_domain_dialog_shown"; - break; - case WPAnalyticsStatAutomatedTransferCustomDomainDialogCancelled: - eventName = @"automated_transfer_custom_domain_dialog_cancelled"; - break; - case WPAnalyticsStatAutomatedTransferCustomDomainSuggestionQueried: - eventName = @"automated_transfer_custom_domain_suggestion_queried"; - break; - case WPAnalyticsStatAutomatedTransferCustomDomainSuggestionSelected: - eventName = @"automated_transfer_custom_domain_suggestion_selected"; - break; - case WPAnalyticsStatAutomatedTransferCustomDomainContactInfoValidated: - eventName = @"automated_transfer_custom_domain_contact_information_validated"; - break; - case WPAnalyticsStatAutomatedTransferCustomDomainContactInfoValidationFailed: - eventName = @"automated_transfer_custom_domain_contact_information_validation_failed"; - break; - case WPAnalyticsStatAutomatedTransferCustomDomainPurchased: - eventName = @"automated_transfer_custom_domain_purchased"; - break; - case WPAnalyticsStatAutomatedTransferCustomDomainPurchaseFailed: - eventName = @"automated_transfer_custom_domain_purchase_failed"; - break; - case WPAnalyticsStatAutomatedTransferDialogShown: - eventName = @"automated_transfer_confirm_dialog_shown"; - break; - case WPAnalyticsStatAutomatedTransferDialogCancelled: - eventName = @"automated_transfer_confirm_dialog_cancelled"; - break; - case WPAnalyticsStatAutomatedTransferEligibilityCheckInitiated: - eventName = @"automated_transfer_check_eligibility"; - break; - case WPAnalyticsStatAutomatedTransferSiteIneligible: - eventName = @"automated_transfer_not_eligible"; - break; - case WPAnalyticsStatAutomatedTransferInitiate: - eventName = @"automated_transfer_initiate"; - break; - case WPAnalyticsStatAutomatedTransferInitiated: - eventName = @"automated_transfer_initiated"; - break; - case WPAnalyticsStatAutomatedTransferInitiationFailed: - eventName = @"automated_transfer_initiation_failed"; - break; - case WPAnalyticsStatAutomatedTransferStatusComplete: - eventName = @"automated_transfer_status_complete"; - break; - case WPAnalyticsStatAutomatedTransferStatusFailed: - eventName = @"automated_transfer_status_failed"; - break; - case WPAnalyticsStatAutomatedTransferFlowComplete: - eventName = @"automated_transfer_flow_complete"; - break; - case WPAnalyticsStatCreateAccountInitiated: - eventName = @"account_create_initiated"; - break; - case WPAnalyticsStatCreateAccountEmailExists: - eventName = @"account_create_email_exists"; - break; - case WPAnalyticsStatCreateAccountUsernameExists: - eventName = @"account_create_username_exists"; - break; - case WPAnalyticsStatCreateAccountFailed: - eventName = @"account_create_failed"; - break; - case WPAnalyticsStatCreatedAccount: - eventName = @"account_created"; - break; - case WPAnalyticsStatCreatedSite: - eventName = @"site_created"; - break; - case WPAnalyticsStatCreateSiteProcessBegun: - eventName = @"site_creation_accessed"; - break; - case WPAnalyticsStatCreateSiteCategoryViewed: - eventName = @"site_creation_category_viewed"; - break; - case WPAnalyticsStatCreateSiteDetailsViewed: - eventName = @"site_creation_details_viewed"; - break; - case WPAnalyticsStatCreateSiteDomainViewed: - eventName = @"site_creation_domain_viewed"; - break; - case WPAnalyticsStatCreateSiteThemeViewed: - eventName = @"site_creation_theme_viewed"; - break; - case WPAnalyticsStatCreateSiteRequestInitiated: - eventName = @"site_creation_creating_viewed"; - break; - case WPAnalyticsStatCreateSiteSuccessViewed: - eventName = @"site_creation_success_viewed"; - break; - case WPAnalyticsStatCreateSiteCreationFailed: - eventName = @"create_site_creation_failed"; - break; - case WPAnalyticsStatCreateSiteSetTaglineFailed: - eventName = @"create_site_set_tagline_failed"; - break; - case WPAnalyticsStatCreateSiteSetThemeFailed: - eventName = @"create_site_set_theme_failed"; - break; - case WPAnalyticsStatCreateSiteValidationFailed: - eventName = @"create_site_validation_failed"; - break; - case WPAnalyticsStatDeepLinked: - eventName = @"deep_linked"; - break; - case WPAnalyticsStatDeepLinkFailed: - eventName = @"deep_link_failed"; - break; - case WPAnalyticsStatDomainCreditPromptShown: - eventName = @"domain_credit_prompt_shown"; - break; - case WPAnalyticsStatDomainCreditRedemptionSuccess: - eventName = @"domain_credit_redemption_success"; - break; - case WPAnalyticsStatDomainCreditRedemptionTapped: - eventName = @"domain_credit_redemption_tapped"; - break; - case WPAnalyticsStatEditorAddedPhotoViaLocalLibrary: - eventName = @"editor_photo_added"; - eventProperties = @{ @"via" : @"local_library" }; - break; - case WPAnalyticsStatEditorAddedPhotoViaWPMediaLibrary: - eventName = @"editor_photo_added"; - eventProperties = @{ @"via" : @"media_library" }; - break; - case WPAnalyticsStatEditorAddedVideoViaLocalLibrary: - eventName = @"editor_video_added"; - eventProperties = @{ @"via" : @"local_library" }; - break; - case WPAnalyticsStatEditorAddedVideoViaWPMediaLibrary: - eventName = @"editor_video_added"; - eventProperties = @{ @"via" : @"media_library" }; - break; - case WPAnalyticsStatEditorAddedOtherMediaViaWPMediaLibrary: - eventName = @"editor_other_media_added"; - eventProperties = @{ @"via" : @"media_library" }; - break; - case WPAnalyticsStatEditorAddedVideoViaOtherApps: - eventName = @"editor_video_added"; - eventProperties = @{ @"via" : @"other_apps" }; - break; - case WPAnalyticsStatEditorAddedPhotoViaOtherApps: - eventName = @"editor_photo_added"; - eventProperties = @{ @"via" : @"other_apps" }; - break; - case WPAnalyticsStatEditorAddedPhotoViaStockPhotos: - eventName = @"editor_photo_added"; - eventProperties = @{ @"via" : @"stock_photos" }; - break; - case WPAnalyticsStatEditorAddedPhotoViaMediaEditor: - eventName = @"editor_photo_added"; - eventProperties = @{ @"via" : @"media_editor" }; - break; - case WPAnalyticsStatEditorAztecBetaLink: - eventName = @"editor_aztec_beta_link"; - break; - case WPAnalyticsStatEditorAztecPromoLink: - eventName = @"editor_aztec_promo_link"; - break; - case WPAnalyticsStatEditorAztecPromoPositive: - eventName = @"editor_aztec_promo_positive"; - break; - case WPAnalyticsStatEditorAztecPromoNegative: - eventName = @"editor_aztec_promo_negative"; - break; - case WPAnalyticsStatEditorClosed: - eventName = @"editor_closed"; - break; - case WPAnalyticsStatEditorCreatedPost: - eventName = @"editor_post_created"; - break; - case WPAnalyticsStatEditorDiscardedChanges: - eventName = @"editor_discarded_changes"; - break; - case WPAnalyticsStatEditorEditedImage: - eventName = @"editor_image_edited"; - break; - case WPAnalyticsStatEditorEnabledNewVersion: - eventName = @"editor_enabled_new_version"; - break; - case WPAnalyticsStatEditorResizedPhoto: - eventName = @"editor_resized_photo"; - break; - case WPAnalyticsStatEditorResizedPhotoError: - eventName = @"editor_resized_photo_error"; - break; - case WPAnalyticsStatEditorSavedDraft: - eventName = @"editor_draft_saved"; - break; - case WPAnalyticsStatEditorScheduledPost: - eventName = @"editor_post_scheduled"; - break; - case WPAnalyticsStatEditorSessionStart: - eventName = @"editor_session_start"; - break; - case WPAnalyticsStatEditorSessionSwitchEditor: - eventName = @"editor_session_switch_editor"; - break; - case WPAnalyticsStatEditorSessionEnd: - eventName = @"editor_session_end"; - break; - case WPAnalyticsStatEditorSessionTemplateApply: - eventName = @"editor_session_template_apply"; - break; - case WPAnalyticsStatEditorPublishedPost: - eventName = @"editor_post_published"; - break; - case WPAnalyticsStatEditorQuickPublishedPost: - eventName = @"editor_quick_post_published"; - break; - case WPAnalyticsStatEditorQuickSavedDraft: - eventName = @"editor_quick_draft_saved"; - break; - case WPAnalyticsStatEditorTappedBlockquote: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"blockquote" }; - break; - case WPAnalyticsStatEditorTappedBold: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"bold" }; - break; - case WPAnalyticsStatEditorTappedHeader: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"header" }; - break; - case WPAnalyticsStatEditorTappedHeaderSelection: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"header_selection" }; - break; - case WPAnalyticsStatEditorTappedHorizontalRule: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"horizontal_rule" }; - break; - case WPAnalyticsStatEditorTappedHTML: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"html" }; - break; - case WPAnalyticsStatEditorTappedImage: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"image" }; - break; - case WPAnalyticsStatEditorMediaPickerTappedDismiss: - eventName = @"media_picker_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"cancel" }; - break; - case WPAnalyticsStatEditorMediaPickerTappedDevicePhotos: - eventName = @"media_picker_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"device_photos" }; - break; - case WPAnalyticsStatEditorMediaPickerTappedCamera: - eventName = @"media_picker_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"camera" }; - break; - case WPAnalyticsStatEditorMediaPickerTappedMediaLibrary: - eventName = @"media_picker_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"media_library" }; - break; - case WPAnalyticsStatEditorMediaPickerTappedOtherApps: - eventName = @"media_picker_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"other_apps" }; - break; - case WPAnalyticsStatEditorTappedItalic: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"italic" }; - break; - case WPAnalyticsStatEditorTappedLink: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"link" }; - break; - case WPAnalyticsStatEditorTappedMore: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"more" }; - break; - case WPAnalyticsStatEditorTappedMoreItems: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"overflow_ellipsis" }; - break; - case WPAnalyticsStatEditorTappedOrderedList: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"ordered_list" }; - break; - case WPAnalyticsStatEditorTappedStrikethrough: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"strikethrough" }; - break; - case WPAnalyticsStatEditorTappedUnderline: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"underline" }; - break; - case WPAnalyticsStatEditorTappedUnlink: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"unlink" }; - break; - case WPAnalyticsStatEditorTappedUnorderedList: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"unordered_list" }; - break; - case WPAnalyticsStatEditorTappedList: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"list" }; - break; - case WPAnalyticsStatEditorTappedUndo: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"undo" }; - break; - case WPAnalyticsStatEditorTappedRedo: - eventName = @"editor_button_tapped"; - eventProperties = @{ TracksEventPropertyButtonKey : @"redo" }; - break; - case WPAnalyticsStatEditorToggledOff: - eventName = @"editor_toggled_off"; - break; - case WPAnalyticsStatEditorToggledOn: - eventName = @"editor_toggled_on"; - break; - case WPAnalyticsStatEditorUpdatedPost: - eventName = @"editor_post_update"; - break; - case WPAnalyticsStatEditorUploadMediaFailed: - eventName = @"editor_upload_media_failed"; - break; - case WPAnalyticsStatEditorUploadMediaPaused: - eventName = @"editor_upload_media_paused"; - break; - case WPAnalyticsStatEditorUploadMediaRetried: - eventName = @"editor_upload_media_retried"; - break; - case WPAnalyticsStatEnhancedSiteCreationAccessed: - eventName = @"enhanced_site_creation_accessed"; - break; - case WPAnalyticsStatEnhancedSiteCreationSegmentsViewed: - eventName = @"enhanced_site_creation_segments_viewed"; - break; - case WPAnalyticsStatEnhancedSiteCreationSegmentsSelected: - eventName = @"enhanced_site_creation_segments_selected"; - break; - case WPAnalyticsStatEnhancedSiteCreationSiteDesignViewed: - eventName = @"enhanced_site_creation_site_design_viewed"; - break; - case WPAnalyticsStatEnhancedSiteCreationSiteDesignSelected: - eventName = @"enhanced_site_creation_site_design_selected"; - break; - case WPAnalyticsStatEnhancedSiteCreationSiteDesignSkipped: - eventName = @"enhanced_site_creation_site_design_skipped"; - break; - case WPAnalyticsStatEnhancedSiteCreationSiteDesignPreviewViewed: - eventName = @"enhanced_site_creation_site_design_preview_viewed"; - break; - case WPAnalyticsStatEnhancedSiteCreationSiteDesignPreviewLoading: - eventName = @"enhanced_site_creation_site_design_preview_loading"; - break; - case WPAnalyticsStatEnhancedSiteCreationSiteDesignPreviewLoaded: - eventName = @"enhanced_site_creation_site_design_preview_loaded"; - break; - case WPAnalyticsStatEnhancedSiteCreationSiteDesignPreviewModeButtonTapped: - eventName = @"enhanced_site_creation_site_design_preview_mode_button_tapped"; - break; - case WPAnalyticsStatEnhancedSiteCreationSiteDesignPreviewModeChanged: - eventName = @"enhanced_site_creation_site_design_preview_mode_changed"; - break; - case WPAnalyticsStatEnhancedSiteCreationVerticalsViewed: - eventName = @"enhanced_site_creation_verticals_viewed"; - break; - case WPAnalyticsStatEnhancedSiteCreationVerticalsSelected: - eventName = @"enhanced_site_creation_verticals_selected"; - break; - case WPAnalyticsStatEnhancedSiteCreationVerticalsSkipped: - eventName = @"enhanced_site_creation_verticals_skipped"; - break; - case WPAnalyticsStatEnhancedSiteCreationBasicInformationViewed: - eventName = @"enhanced_site_creation_basic_information_viewed"; - break; - case WPAnalyticsStatEnhancedSiteCreationBasicInformationCompleted: - eventName = @"enhanced_site_creation_basic_information_completed"; - break; - case WPAnalyticsStatEnhancedSiteCreationBasicInformationSkipped: - eventName = @"enhanced_site_creation_basic_information_skipped"; - break; - case WPAnalyticsStatEnhancedSiteCreationDomainsAccessed: - eventName = @"enhanced_site_creation_domains_accessed"; - break; - case WPAnalyticsStatEnhancedSiteCreationDomainsSelected: - eventName = @"enhanced_site_creation_domains_selected"; - break; - case WPAnalyticsStatEnhancedSiteCreationSuccessLoading: - eventName = @"enhanced_site_creation_success_loading"; - break; - case WPAnalyticsStatEnhancedSiteCreationSuccessPreviewViewed: - eventName = @"enhanced_site_creation_preview_viewed"; - break; - case WPAnalyticsStatEnhancedSiteCreationSuccessPreviewLoaded: - eventName = @"enhanced_site_creation_preview_loaded"; - break; - case WPAnalyticsStatEnhancedSiteCreationSuccessPreviewOkButtonTapped: - eventName = @"enhanced_site_creation_preview_ok_button_tapped"; - break; - case WPAnalyticsStatEnhancedSiteCreationErrorShown: - eventName = @"enhanced_site_creation_error_shown"; - break; - case WPAnalyticsStatGravatarCropped: - eventName = @"me_gravatar_cropped"; - break; - case WPAnalyticsStatGravatarTapped: - eventName = @"me_gravatar_tapped"; - break; - case WPAnalyticsStatGravatarUploaded: - eventName = @"me_gravatar_uploaded"; - break; - case WPAnalyticsStatGutenbergWarningConfirmDialogShown: - eventName = @"gutenberg_warning_confirm_dialog_shown"; - break; - case WPAnalyticsStatGutenbergWarningConfirmDialogYesTapped: - eventName = @"gutenberg_warning_confirm_dialog_yes_tapped"; - break; - case WPAnalyticsStatGutenbergWarningConfirmDialogCancelTapped: - eventName = @"gutenberg_warning_confirm_dialog_cancel_tapped"; - break; - case WPAnalyticsStatGutenbergWarningConfirmDialogDontShowAgainChecked: - eventName = @"gutenberg_warning_confirm_dialog_dont_show_again_checked"; - break; - case WPAnalyticsStatGutenbergWarningConfirmDialogDontShowAgainUnchecked: - eventName = @"gutenberg_warning_confirm_dialog_dont_show_again_unchecked"; - break; - case WPAnalyticsStatGutenbergWarningConfirmDialogLearnMoreTapped: - eventName = @"gutenberg_warning_confirm_dialog_learn_more_tapped"; - break; - case WPAnalyticsStatInstallJetpackCanceled: - eventName = @"install_jetpack_canceled"; - break; - case WPAnalyticsStatInstallJetpackCompleted: - eventName = @"install_jetpack_completed"; - break; - case WPAnalyticsStatInstallJetpackRemoteStart: - eventName = @"install_jetpack_remote_start"; - break; - case WPAnalyticsStatInstallJetpackRemoteCompleted: - eventName = @"install_jetpack_remote_completed"; - break; - case WPAnalyticsStatInstallJetpackRemoteFailed: - eventName = @"install_jetpack_remote_failed"; - break; - case WPAnalyticsStatInstallJetpackRemoteRetry: - eventName = @"install_jetpack_remote_restart"; - break; - case WPAnalyticsStatInstallJetpackRemoteConnect: - eventName = @"install_jetpack_remote_connect"; - break; - case WPAnalyticsStatInstallJetpackRemoteLogin: - eventName = @"install_jetpack_remote_login"; - break; - case WPAnalyticsStatInstallJetpackRemoteStartManualFlow: - eventName = @"install_jetpack_remote_start_manual_flow"; - break; - case WPAnalyticsStatInstallJetpackWebviewSelect: - eventName = @"connect_jetpack_selected"; - break; - case WPAnalyticsStatInstallJetpackWebviewFailed: - eventName = @"connect_jetpack_failed"; - break; - case WPAnalyticsStatLandingEditorShown: - eventName = @"landing_editor_shown"; - break; - case WPAnalyticsStatLayoutPickerPreviewErrorShown: - eventName = @"layout_picker_preview_error_shown"; - break; - case WPAnalyticsStatLayoutPickerPreviewLoaded: - eventName = @"layout_picker_preview_loaded"; - break; - case WPAnalyticsStatLayoutPickerPreviewLoading: - eventName = @"layout_picker_preview_loading"; - break; - case WPAnalyticsStatLayoutPickerPreviewModeButtonTapped: - eventName = @"layout_picker_preview_mode_button_tapped"; - break; - case WPAnalyticsStatLayoutPickerPreviewModeChanged: - eventName = @"layout_picker_preview_mode_changed"; - break; - case WPAnalyticsStatLayoutPickerPreviewViewed: - eventName = @"layout_picker_preview_viewed"; - break; - case WPAnalyticsStatLayoutPickerThumbnailModeButtonTapped: - eventName = @"layout_picker_thumbnail_mode_button_tapped"; - break; - case WPAnalyticsStatLogSpecialCondition: - eventName = @"log_special_condition"; - break; - case WPAnalyticsStatLoginFailed: - eventName = @"login_failed_to_login"; - break; - case WPAnalyticsStatLoginFailedToGuessXMLRPC: - eventName = @"login_failed_to_guess_xmlrpc"; - break; - case WPAnalyticsStatLoginAutoFillCredentialsFilled: - eventName = @"login_autofill_credentials_filled"; - break; - case WPAnalyticsStatLoginAutoFillCredentialsUpdated: - eventName = @"login_autofill_credentials_updated"; - break; - case WPAnalyticsStatLoginProloguePaged: - eventName = @"login_prologue_paged"; - break; - case WPAnalyticsStatLoginPrologueViewed: - eventName = @"login_prologue_viewed"; - break; - case WPAnalyticsStatLoginEmailFormViewed: - eventName = @"login_email_form_viewed"; - break; - case WPAnalyticsStatLoginMagicLinkOpenEmailClientViewed: - eventName = @"login_magic_link_open_email_client_viewed"; - break; - case WPAnalyticsStatLoginMagicLinkRequestFormViewed: - eventName = @"login_magic_link_request_form_viewed"; - break; - case WPAnalyticsStatLoginPasswordFormViewed: - eventName = @"login_password_form_viewed"; - break; - case WPAnalyticsStatLoginURLFormViewed: - eventName = @"login_url_form_viewed"; - break; - case WPAnalyticsStatLoginURLHelpScreenViewed: - eventName = @"login_url_help_screen_viewed"; - break; - case WPAnalyticsStatLoginUsernamePasswordFormViewed: - eventName = @"login_username_password_form_viewed"; - break; - case WPAnalyticsStatLoginTwoFactorFormViewed: - eventName = @"login_two_factor_form_viewed"; - break; - case WPAnalyticsStatLoginEpilogueViewed: - eventName = @"login_epilogue_viewed"; - break; - case WPAnalyticsStatLoginForgotPasswordClicked: - eventName = @"login_forgot_password_clicked"; - break; - case WPAnalyticsStatLoginSocialButtonClick: - eventName = @"login_social_button_click"; - break; - case WPAnalyticsStatLoginSocialButtonFailure: - eventName = @"login_social_button_failure"; - break; - case WPAnalyticsStatLoginSocialConnectSuccess: - eventName = @"login_social_connect_success"; - break; - case WPAnalyticsStatLoginSocialConnectFailure: - eventName = @"login_social_connect_failure"; - break; - case WPAnalyticsStatLoginSocialSuccess: - eventName = @"login_social_login_success"; - break; - case WPAnalyticsStatLoginSocialFailure: - eventName = @"login_social_login_failure"; - break; - case WPAnalyticsStatLoginSocial2faNeeded: - eventName = @"login_social_2fa_needed"; - break; - case WPAnalyticsStatLoginSocialAccountsNeedConnecting: - eventName = @"login_social_accounts_need_connecting"; - break; - case WPAnalyticsStatLoginSocialErrorUnknownUser: - eventName = @"login_social_error_unknown_user"; - break; - case WPAnalyticsStatLogout: - eventName = @"account_logout"; - break; - case WPAnalyticsStatLowMemoryWarning: - eventName = @"application_low_memory_warning"; - break; - case WPAnalyticsStatMediaLibraryDeletedItems: - eventName = @"media_library_deleted_items"; - break; - case WPAnalyticsStatMediaLibraryEditedItemMetadata: - eventName = @"media_library_edited_item_metadata"; - break; - case WPAnalyticsStatMediaLibraryPreviewedItem: - eventName = @"media_library_previewed_item"; - break; - case WPAnalyticsStatMediaLibrarySharedItemLink: - eventName = @"media_library_shared_item_link"; - break; - case WPAnalyticsStatMediaLibraryAddedPhoto: - eventName = @"media_library_photo_added"; - break; - case WPAnalyticsStatMediaLibraryAddedPhotoViaDeviceLibrary: - eventName = @"media_library_photo_added"; - eventProperties = @{ @"via" : @"device_library" }; - break; - case WPAnalyticsStatMediaLibraryAddedPhotoViaOtherApps: - eventName = @"media_library_photo_added"; - eventProperties = @{ @"via" : @"other_library" }; - break; - case WPAnalyticsStatMediaLibraryAddedPhotoViaStockPhotos: - eventName = @"media_library_photo_added"; - eventProperties = @{ @"via" : @"stock_photos" }; - break; - case WPAnalyticsStatMediaLibraryAddedPhotoViaCamera: - eventName = @"media_library_photo_added"; - eventProperties = @{ @"via" : @"camera" }; - break; - case WPAnalyticsStatMediaLibraryAddedVideo: - eventName = @"media_library_video_added"; - break; - case WPAnalyticsStatMediaLibraryAddedVideoViaDeviceLibrary: - eventName = @"media_library_video_added"; - eventProperties = @{ @"via" : @"device_library" }; - break; - case WPAnalyticsStatMediaLibraryAddedVideoViaCamera: - eventName = @"media_library_video_added"; - eventProperties = @{ @"via" : @"camera" }; - break; - case WPAnalyticsStatMediaLibraryAddedVideoViaOtherApps: - eventName = @"media_library_video_added"; - eventProperties = @{ @"via" : @"other_apps" }; - break; - case WPAnalyticsStatMediaLibraryUploadMediaRetried: - eventName = @"media_library_upload_media_retried"; - break; - case WPAnalyticsStatMediaServiceUploadStarted: - eventName = @"media_service_upload_started"; - break; - case WPAnalyticsStatMediaServiceUploadFailed: - eventName = @"media_service_upload_failed"; - break; - case WPAnalyticsStatMediaServiceUploadSuccessful: - eventName = @"media_service_upload_successful"; - break; - case WPAnalyticsStatMediaServiceUploadCanceled: - eventName = @"media_service_upload_canceled"; - break; - case WPAnalyticsStatMenusAccessed: - eventName = @"menus_accessed"; - break; - case WPAnalyticsStatMenusCreatedItem: - eventName = @"menus_created_item"; - break; - case WPAnalyticsStatMenusCreatedMenu: - eventName = @"menus_created_menu"; - break; - case WPAnalyticsStatMenusDeletedMenu: - eventName = @"menus_deleted_menu"; - break; - case WPAnalyticsStatMenusDeletedItem: - eventName = @"menus_deleted_item"; - break; - case WPAnalyticsStatMenusDiscardedChanges: - eventName = @"menus_discarded_changes"; - break; - case WPAnalyticsStatMenusEditedItem: - eventName = @"menus_edited_item"; - break; - case WPAnalyticsStatMenusOpenedItemEditor: - eventName = @"menus_opened_item_editor"; - break; - case WPAnalyticsStatMenusOrderedItems: - eventName = @"menus_ordered_items"; - break; - case WPAnalyticsStatMenusSavedMenu: - eventName = @"menus_saved_menu"; - break; - case WPAnalyticsStatMeTabAccessed: - eventName = @"me_tab_accessed"; - break; - case WPAnalyticsStatMySitesTabAccessed: - eventName = @"my_site_tab_accessed"; - break; - case WPAnalyticsStatNotificationsCommentApproved: - eventName = @"notifications_comment_approved"; - break; - case WPAnalyticsStatNotificationsCommentFlaggedAsSpam: - eventName = @"notifications_flagged_as_spam"; - break; - case WPAnalyticsStatNotificationsSiteFollowAction: - eventName = @"notifications_follow_action"; - break; - case WPAnalyticsStatNotificationsCommentLiked: - eventName = @"notifications_comment_liked"; - break; - case WPAnalyticsStatNotificationsCommentRepliedTo: - eventName = @"notifications_replied_to"; - break; - case WPAnalyticsStatNotificationsCommentTrashed: - eventName = @"notifications_comment_trashed"; - break; - case WPAnalyticsStatNotificationsCommentUnapproved: - eventName = @"notifications_comment_unapproved"; - break; - case WPAnalyticsStatNotificationsSiteUnfollowAction: - eventName = @"notifications_unfollow_action"; - break; - case WPAnalyticsStatNotificationsCommentUnliked: - eventName = @"notifications_comment_unliked"; - break; - case WPAnalyticsStatNotificationsMissingSyncWarning: - eventName = @"notifications_missing_sync_warning"; - break; - case WPAnalyticsStatNotificationsSettingsUpdated: - eventName = @"notification_settings_updated"; - break; - case WPAnalyticsStatNotificationsSettingsBlogNotificationsOn: - eventName = @"followed_blog_notifications_settings_on"; - break; - case WPAnalyticsStatNotificationsSettingsBlogNotificationsOff: - eventName = @"followed_blog_notifications_settings_off"; - break; - case WPAnalyticsStatNotificationsSettingsEmailNotificationsOn: - eventName = @"followed_blog_notifications_settings_email_on"; - break; - case WPAnalyticsStatNotificationsSettingsEmailNotificationsOff: - eventName = @"followed_blog_notifications_settings_email_off"; - break; - case WPAnalyticsStatNotificationsSettingsEmailDeliveryInstantly: - eventName = @"followed_blog_notifications_settings_email_instantly"; - break; - case WPAnalyticsStatNotificationsSettingsEmailDeliveryDaily: - eventName = @"followed_blog_notifications_settings_email_daily"; - break; - case WPAnalyticsStatNotificationsSettingsEmailDeliveryWeekly: - eventName = @"followed_blog_notifications_settings_email_weekly"; - break; - case WPAnalyticsStatNotificationsSettingsCommentsNotificationsOn: - eventName = @"followed_blog_notifications_settings_comments_on"; - break; - case WPAnalyticsStatNotificationsSettingsCommentsNotificationsOff: - eventName = @"followed_blog_notifications_settings_comments_off"; - break; - case WPAnalyticsStatNotificationsTappedNewPost: - eventName = @"notification_tapped_new_post"; - break; - case WPAnalyticsStatNotificationsTappedViewReader: - eventName = @"notification_tapped_view_reader"; - break; - case WPAnalyticsStatNotificationsTappedSegmentedControl: - eventName = @"notification_tapped_segmented_control"; - break; - case WPAnalyticsStatNotificationsUploadMediaSuccessWritePost: - eventName = @"notifications_upload_media_success_write_post"; - break; - case WPAnalyticsStatNotificationsShareSuccessEditPost: - eventName = @"notifications_share_success_edit_post"; - break; - case WPAnalyticsStatOnePasswordFailed: - eventName = @"one_password_failed"; - break; - case WPAnalyticsStatOnePasswordLogin: - eventName = @"one_password_login"; - break; - case WPAnalyticsStatOnePasswordSignup: - eventName = @"one_password_signup"; - break; - case WPAnalyticsStatOpenedComments: - eventName = @"site_menu_opened"; - eventProperties = @{ TracksEventPropertyMenuItemKey : @"comments" }; - break; - case WPAnalyticsStatOpenedLogin: - eventName = @"login_accessed"; - break; - case WPAnalyticsStatOpenedMediaLibrary: - eventName = @"site_menu_opened"; - eventProperties = @{ TracksEventPropertyMenuItemKey : @"library" }; - break; - case WPAnalyticsStatOpenedNotificationsList: - eventName = @"notifications_accessed"; - break; - case WPAnalyticsStatOpenedNotificationDetails: - eventName = @"notifications_notification_details_opened"; - break; - case WPAnalyticsStatOpenedNotificationSettingsList: - eventName = @"notification_settings_list_opened"; - break; - case WPAnalyticsStatOpenedNotificationSettingStreams: - eventName = @"notification_settings_streams_opened"; - break; - case WPAnalyticsStatOpenedNotificationSettingDetails: - eventName = @"notification_settings_details_opened"; - break; - case WPAnalyticsStatOpenedPages: - eventName = @"site_menu_opened"; - eventProperties = @{ TracksEventPropertyMenuItemKey : @"pages" }; - break; - case WPAnalyticsStatOpenedPeople: - eventName = @"people_management_list_opened"; - break; - case WPAnalyticsStatOpenedPerson: - eventName = @"people_management_details_opened"; - break; - case WPAnalyticsStatOpenedPlans: - eventName = @"site_menu_opened"; - eventProperties = @{ TracksEventPropertyMenuItemKey : @"plans" }; - break; - case WPAnalyticsStatOpenedPlansComparison: - eventName = @"plans_compare"; - break; - case WPAnalyticsStatOpenedPluginDirectory: - eventName = @"plugin_directory_opened"; - break; - case WPAnalyticsStatOpenedPluginList: - eventName = @"plugin_list_opened"; - break; - case WPAnalyticsStatOpenedPosts: - eventName = @"site_menu_opened"; - eventProperties = @{ TracksEventPropertyMenuItemKey : @"posts" }; - break; - case WPAnalyticsStatOpenedSiteSettings: - eventName = @"site_menu_opened"; - eventProperties = @{ TracksEventPropertyMenuItemKey : @"settings" }; - break; - case WPAnalyticsStatOpenedSharingManagement: - eventName = @"site_menu_opened"; - eventProperties = @{ TracksEventPropertyMenuItemKey : @"sharing_management" }; - break; - case WPAnalyticsStatOpenedSupport: - eventName = @"support_opened"; - break; - case WPAnalyticsStatOpenedViewAdmin: - eventName = @"site_menu_view_admin_opened"; - break; - case WPAnalyticsStatOpenedViewSite: - eventName = @"site_menu_view_site_opened"; - break; - case WPAnalyticsStatPersonRemoved: - eventName = @"people_management_person_removed"; - break; - case WPAnalyticsStatPersonUpdated: - eventName = @"people_management_person_updated"; - break; - case WPAnalyticsStatPluginUpdated: - eventName = @"plugin_updated"; - break; - case WPAnalyticsStatPluginRemoved: - eventName = @"plugin_removed"; - break; - case WPAnalyticsStatPluginInstalled: - eventName = @"plugin_installed"; - break; - case WPAnalyticsStatPluginActivated: - eventName = @"plugin_activated"; - break; - case WPAnalyticsStatPluginDeactivated: - eventName = @"plugin_deactivated"; - break; - case WPAnalyticsStatPluginAutoupdateEnabled: - eventName = @"plugin_autoupdate_enabled"; - break; - case WPAnalyticsStatPluginAutoupdateDisabled: - eventName = @"plugin_autoupdate_disabled"; - break; - case WPAnalyticsStatPluginSearchPerformed: - eventName = @"plugin_search_performed"; - break; - case WPAnalyticsStatPageSetParentViewed: - eventName = @"site_pages_set_parent_viewed"; - break; - case WPAnalyticsStatPageSetParentSearchAccessed: - eventName = @"site_pages_set_parent_search_accessed"; - break; - case WPAnalyticsStatPageSetParentDonePressed: - eventName = @"site_pages_set_parent_done_pressed"; - break; - case WPAnalyticsStatPostEpilogueDisplayed: - eventName = @"post_epilogue_displayed"; - break; - case WPAnalyticsStatPostEpilogueEdit: - eventName = @"post_epilogue_edit"; - break; - case WPAnalyticsStatPostEpilogueShare: - eventName = @"post_epilogue_share"; - break; - case WPAnalyticsStatPostEpilogueView: - eventName = @"post_epilogue_view"; - break; - case WPAnalyticsStatPostListAuthorFilterChanged: - eventName = @"post_list_author_filter_changed"; - break; - case WPAnalyticsStatPostListDraftAction: - eventName = @"post_list_button_pressed"; - eventProperties = @{ TracksEventPropertyButtonKey : @"draft" }; - break; - case WPAnalyticsStatPostListEditAction: - eventName = @"post_list_button_pressed"; - eventProperties = @{ TracksEventPropertyButtonKey : @"edit" }; - break; - case WPAnalyticsStatPostListDuplicateAction: - eventName = @"post_list_button_pressed"; - eventProperties = @{ TracksEventPropertyButtonKey : @"copy" }; // Property aligned with Android - break; - case WPAnalyticsStatPostListExcessiveLoadMoreDetected: - eventName = @"post_list_excessive_load_more_detected"; - break; - case WPAnalyticsStatPostListLoadedMore: - eventName = @"post_list_load_more_triggered"; - break; - case WPAnalyticsStatPostListNoResultsButtonPressed: - eventName = @"post_list_create_post_tapped"; - break; - case WPAnalyticsStatPostListOpenedCellMenu: - eventName = @"post_list_cell_menu_opened"; - break; - case WPAnalyticsStatPostListPublishAction: - eventName = @"post_list_button_pressed"; - eventProperties = @{ TracksEventPropertyButtonKey : @"publish" }; - break; - case WPAnalyticsStatPostListScheduleAction: - eventName = @"post_list_button_pressed"; - eventProperties = @{ TracksEventPropertyButtonKey : @"schedule" }; - break; - case WPAnalyticsStatPostListPullToRefresh: - eventName = @"post_list_pull_to_refresh_triggered"; - break; - case WPAnalyticsStatPostListRestoreAction: - eventName = @"post_list_button_pressed"; - eventProperties = @{ TracksEventPropertyButtonKey : @"restore" }; - break; - case WPAnalyticsStatPostListSearchOpened: - eventName = @"post_list_search_opened"; - break; - case WPAnalyticsStatPostListStatsAction: - eventName = @"post_list_button_pressed"; - eventProperties = @{ TracksEventPropertyButtonKey : @"stats" }; - break; - case WPAnalyticsStatPostListStatusFilterChanged: - eventName = @"post_list_status_filter_changed"; - break; - case WPAnalyticsStatPostListTrashAction: - eventName = @"post_list_button_pressed"; - eventProperties = @{ TracksEventPropertyButtonKey : @"trash" }; - break; - case WPAnalyticsStatPostListViewAction: - eventName = @"post_list_button_pressed"; - eventProperties = @{ TracksEventPropertyButtonKey : @"view" }; - break; - case WPAnalyticsStatPostListToggleButtonPressed: - eventName = @"post_list_toggle_button_pressed"; - break; - case WPAnalyticsStatPostRevisionsListViewed: - eventName = @"revisions_list_viewed"; - break; - case WPAnalyticsStatPostRevisionsDetailViewed: - eventName = @"revisions_detail_viewed"; - break; - case WPAnalyticsStatPostRevisionsDetailCancelled: - eventName = @"revisions_detail_cancelled"; - break; - case WPAnalyticsStatPostRevisionsRevisionLoaded: - eventName = @"revisions_revision_loaded"; - break; - case WPAnalyticsStatPostRevisionsLoadUndone: - eventName = @"revisions_load_undone"; - break; - case WPAnalyticsStatPostSettingsShown: - eventName = @"post_settings_shown"; - break; - case WPAnalyticsStatPostSettingsAddTagsShown: - eventName = @"post_settings_add_tags_shown"; - break; - case WPAnalyticsStatPostSettingsTagsAdded: - eventName = @"post_settings_tags_added"; - break; - case WPAnalyticsStatPushAuthenticationApproved: - eventName = @"push_authentication_approved"; - break; - case WPAnalyticsStatPushAuthenticationExpired: - eventName = @"push_authentication_expired"; - break; - case WPAnalyticsStatPushAuthenticationFailed: - eventName = @"push_authentication_failed"; - break; - case WPAnalyticsStatPushAuthenticationIgnored: - eventName = @"push_authentication_ignored"; - break; - case WPAnalyticsStatPushNotificationAlertPressed: - eventName = @"push_notification_alert_tapped"; - break; - case WPAnalyticsStatPushNotificationReceived: - eventName = @"push_notification_received"; - break; - case WPAnalyticsStatPushNotificationQuickActionCompleted: - eventName = @"quick_action_touched"; - break; - case WPAnalyticsStatPushNotificationPrimerSeen: - eventName = @"notifications_primer_seen"; - break; - case WPAnalyticsStatPushNotificationPrimerAllowTapped: - eventName = @"notifications_primer_allow_tapped"; - break; - case WPAnalyticsStatPushNotificationPrimerNoTapped: - eventName = @"notifications_primer_no_tapped"; - break; - case WPAnalyticsStatPushNotificationWinbackShown: - eventName = @"notifications_winback_shown"; - break; - case WPAnalyticsStatPushNotificationWinbackNoTapped: - eventName = @"notifications_winback_no_tapped"; - break; - case WPAnalyticsStatPushNotificationWinbackSettingsTapped: - eventName = @"notifications_winback_settings_tapped"; - break; - case WPAnalyticsStatPushNotificationOSAlertShown: - eventName = @"notifications_os_alert_shown"; - break; - case WPAnalyticsStatPushNotificationOSAlertAllowed: - eventName = @"notifications_os_alert_allowed"; - break; - case WPAnalyticsStatPushNotificationOSAlertDenied: - eventName = @"notifications_os_alert_denied"; - break; - case WPAnalyticsStatQuickStartAllToursCompleted: - eventName = @"quick_start_all_tasks_completed"; - break; - case WPAnalyticsStatQuickStartChecklistItemTapped: - eventName = @"quick_start_list_item_tapped"; - break; - case WPAnalyticsStatQuickStartChecklistSkippedAll: - eventName = @"quick_start_list_all_tasks_skipped"; - break; - case WPAnalyticsStatQuickStartChecklistViewed: - eventName = @"quick_start_list_viewed"; - break; - case WPAnalyticsStatQuickStartCongratulationsViewed: - eventName = @"quick_start_list_completed_viewed"; - break; - case WPAnalyticsStatQuickStartRequestAlertButtonTapped: - eventName = @"quick_start_request_dialog_button_tapped"; - break; - case WPAnalyticsStatQuickStartRequestAlertViewed: - eventName = @"quick_start_request_dialog_viewed"; - break; - case WPAnalyticsStatQuickStartSuggestionButtonTapped: - eventName = @"quick_start_dialog_button_tapped"; - break; - case WPAnalyticsStatQuickStartSuggestionViewed: - eventName = @"quick_start_dialog_viewed"; - break; - case WPAnalyticsStatQuickStartTourCompleted: - eventName = @"quick_start_task_completed"; - break; - case WPAnalyticsStatQuickStartMigrationDialogViewed: - eventName = @"quick_start_migration_dialog_viewed"; - break; - case WPAnalyticsStatQuickStartMigrationDialogPositiveTapped: - eventName = @"quick_start_migration_dialog_button_tapped"; - eventProperties = @{ @"type" : @"positive" }; - break; - case WPAnalyticsStatQuickStartRemoveDialogButtonRemoveTapped: - eventName = @"quick_start_remove_dialog_button_tapped"; - eventProperties = @{ @"type" : @"positive" }; - break; - case WPAnalyticsStatQuickStartRemoveDialogButtonCancelTapped: - eventName = @"quick_start_remove_dialog_button_tapped"; - eventProperties = @{ @"type" : @"negative" }; - break; - case WPAnalyticsStatQuickStartTypeDismissed: - eventName = @"quick_start_type_dismissed"; - break; - case WPAnalyticsStatQuickStartListCollapsed: - eventName = @"quick_start_list_collapsed"; - break; - case WPAnalyticsStatQuickStartListExpanded: - eventName = @"quick_start_list_expanded"; - break; - case WPAnalyticsStatQuickStartListItemSkipped: - eventName = @"quick_start_list_item_skipped"; - break; - case WPAnalyticsStatQuickStartNotificationStarted: - eventName = @"quick_start_notification_sent"; - break; - case WPAnalyticsStatQuickStartNotificationTapped: - eventName = @"quick_start_notification_tapped"; - break; - case WPAnalyticsStatReaderAccessed: - eventName = @"reader_accessed"; - break; - case WPAnalyticsStatReaderArticleCommentedOn: - eventName = @"reader_article_commented_on"; - break; - case WPAnalyticsStatReaderArticleCommentLiked: - eventName = @"reader_article_comment_liked"; - break; - case WPAnalyticsStatReaderArticleCommentUnliked: - eventName = @"reader_article_comment_unliked"; - break; - case WPAnalyticsStatReaderArticleCommentsOpened: - eventName = @"reader_article_comments_opened"; - break; - case WPAnalyticsStatReaderArticleLiked: - eventName = @"reader_article_liked"; - break; - case WPAnalyticsStatReaderArticleReblogged: - eventName = @"reader_article_reblogged"; - break; - case WPAnalyticsStatReaderArticleDetailReblogged: - eventName = @"reader_article_detail_reblogged"; - break; - case WPAnalyticsStatReaderArticleOpened: - eventName = @"reader_article_opened"; - break; - case WPAnalyticsStatReaderArticleUnliked: - eventName = @"reader_article_unliked"; - break; - case WPAnalyticsStatReaderArticleDetailLiked: - eventName = @"reader_article_detail_liked"; - break; - case WPAnalyticsStatReaderArticleDetailUnliked: - eventName = @"reader_article_detail_unliked"; - break; - case WPAnalyticsStatReaderDiscoverViewed: - eventName = @"reader_discover_viewed"; - break; - case WPAnalyticsStatReaderFreshlyPressedLoaded: - eventName = @"reader_freshly_pressed_loaded"; - break; - case WPAnalyticsStatReaderInfiniteScroll: - eventName = @"reader_infinite_scroll_performed"; - break; - case WPAnalyticsStatReaderListFollowed: - eventName = @"reader_list_followed"; - break; - case WPAnalyticsStatReaderListLoaded: - eventName = @"reader_list_loaded"; - break; - case WPAnalyticsStatReaderListPreviewed: - eventName = @"reader_list_preview"; - break; - case WPAnalyticsStatReaderListUnfollowed: - eventName = @"reader_list_unfollowed"; - break; - case WPAnalyticsStatReaderListNotificationMenuOn: - eventName = @"followed_blog_notifications_reader_menu_on"; - break; - case WPAnalyticsStatReaderListNotificationMenuOff: - eventName = @"followed_blog_notifications_reader_menu_off"; - break; - case WPAnalyticsStatReaderListNotificationEnabled: - eventName = @"followed_blog_notifications_reader_enabled"; - break; - case WPAnalyticsStatReaderPostSaved: - eventName = @"reader_post_saved"; - break; - case WPAnalyticsStatReaderPostUnsaved: - eventName = @"reader_post_unsaved"; - break; - case WPAnalyticsStatReaderSavedPostOpened: - eventName = @"reader_saved_post_opened"; - break; - case WPAnalyticsStatReaderSavedListViewed: - eventName = @"reader_saved_list_viewed"; - break; - case WPAnalyticsStatReaderSearchLoaded: - eventName = @"reader_search_loaded"; - break; - case WPAnalyticsStatReaderSearchPerformed: - eventName = @"reader_search_performed"; - break; - case WPAnalyticsStatReaderSearchResultTapped: - eventName = @"reader_searchcard_clicked"; - break; - case WPAnalyticsStatReaderSiteBlocked: - eventName = @"reader_blog_blocked"; - break; - case WPAnalyticsStatReaderSiteFollowed: - eventName = @"reader_site_followed"; - break; - case WPAnalyticsStatReaderSitePreviewed: - eventName = @"reader_blog_preview"; - break; - case WPAnalyticsStatReaderSiteUnfollowed: - eventName = @"reader_site_unfollowed"; - break; - case WPAnalyticsStatReaderSiteShared: - eventName = @"reader_site_shared"; - break; - case WPAnalyticsStatReaderTagFollowed: - eventName = @"reader_reader_tag_followed"; - eventProperties = @{ @"source" : @"unknown" }; - break; - case WPAnalyticsStatReaderTagLoaded: - eventName = @"reader_tag_loaded"; - break; - case WPAnalyticsStatReaderTagPreviewed: - eventName = @"reader_tag_preview"; - break; - case WPAnalyticsStatReaderTagUnfollowed: - eventName = @"reader_reader_tag_unfollowed"; - break; - case WPAnalyticsStatSelectedInstallJetpack: - eventName = @"install_jetpack_selected"; - break; - case WPAnalyticsStatSentItemToGooglePlus: - eventName = @"sent_item_to_google_plus"; - break; - case WPAnalyticsStatSentItemToInstapaper: - eventName = @"sent_item_to_instapaper"; - break; - case WPAnalyticsStatSentItemToPocket: - eventName = @"sent_item_to_pocket"; - break; - case WPAnalyticsStatSentItemToWordPress: - eventName = @"sent_item_to_wordpress"; - break; - case WPAnalyticsStatSharedItem: - eventName = @"shared_item"; - break; - case WPAnalyticsStatSharedItemViaEmail: - eventName = @"shared_item_via_email"; - break; - case WPAnalyticsStatSharedItemViaFacebook: - eventName = @"shared_item_via_facebook"; - break; - case WPAnalyticsStatSharedItemViaSMS: - eventName = @"shared_item_via_sms"; - break; - case WPAnalyticsStatSharedItemViaTwitter: - eventName = @"shared_item_via_twitter"; - break; - case WPAnalyticsStatSharedItemViaWeibo: - eventName = @"shared_item_via_weibo"; - break; - case WPAnalyticsStatShortcutLogIn: - eventName = @"3d_touch_shortcut_log_in"; - break; - case WPAnalyticsStatShortcutNewPost: - eventName = @"3d_touch_shortcut_new_post"; - break; - case WPAnalyticsStatShortcutNotifications: - eventName = @"3d_touch_shortcut_notifications"; - break; - case WPAnalyticsStatShortcutNewPhotoPost: - eventName = @"3d_touch_shortcut_new_photo_post"; - break; - case WPAnalyticsStatShortcutStats: - eventName = @"3d_touch_shortcut_stats"; - break; - case WPAnalyticsStatSignedIn: - eventName = @"signed_in"; - break; - case WPAnalyticsStatSignedInToJetpack: - eventName = @"signed_into_jetpack"; - break; - case WPAnalyticsStatSignupButtonTapped: - eventName = @"signup_button_tapped"; - break; - case WPAnalyticsStatSignupCancelled: - eventName = @"signup_cancelled"; - break; - case WPAnalyticsStatSignupEmailButtonTapped: - eventName = @"signup_email_button_tapped"; - break; - case WPAnalyticsStatSignupEmailToLogin: - eventName = @"signup_email_to_login"; - break; - case WPAnalyticsStatSignupEpilogueViewed: - eventName = @"signup_epilogue_viewed"; - break; - case WPAnalyticsStatSignupEpilogueUnchanged: - eventName = @"signup_epilogue_unchanged"; - break; - case WPAnalyticsStatSignupEpilogueDisplayNameUpdateSucceeded: - eventName = @"signup_epilogue_update_display_name_succeeded"; - break; - case WPAnalyticsStatSignupEpilogueDisplayNameUpdateFailed: - eventName = @"signup_epilogue_update_display_name_failed"; - break; - case WPAnalyticsStatSignupEpiloguePasswordUpdateSucceeded: - eventName = @"signup_epilogue_update_password_succeeded"; - break; - case WPAnalyticsStatSignupEpiloguePasswordUpdateFailed: - eventName = @"signup_epilogue_update_password_failed"; - break; - case WPAnalyticsStatSignupEpilogueUsernameTapped: - eventName = @"signup_epilogue_username_tapped"; - break; - case WPAnalyticsStatSignupEpilogueUsernameSuggestionsFailed: - eventName = @"signup_epilogue_username_suggestions_failed"; - break; - case WPAnalyticsStatSignupEpilogueUsernameUpdateSucceeded: - eventName = @"signup_epilogue_update_username_succeeded"; - break; - case WPAnalyticsStatSignupEpilogueUsernameUpdateFailed: - eventName = @"signup_epilogue_update_username_failed"; - break; - case WPAnalyticsStatSignupMagicLinkFailed: - eventName = @"signup_magic_link_failed"; - break; - case WPAnalyticsStatSignupMagicLinkOpenEmailClientViewed: - eventName = @"signup_magic_link_open_email_client_viewed"; - break; - case WPAnalyticsStatSignupMagicLinkOpened: - eventName = @"signup_magic_link_opened"; - break; - case WPAnalyticsStatSignupMagicLinkSucceeded: - eventName = @"signup_magic_link_succeeded"; - break; - case WPAnalyticsStatSignupSocialSuccess: - eventName = @"signup_social_success"; - break; - case WPAnalyticsStatSignupSocialFailure: - eventName = @"signup_social_failure"; - break; - case WPAnalyticsStatSignupSocialButtonFailure: - eventName = @"signup_social_button_failure"; - break; - case WPAnalyticsStatSignupSocialButtonTapped: - eventName = @"signup_social_button_tapped"; - break; - case WPAnalyticsStatSignupSocialToLogin: - eventName = @"signup_social_to_login"; - break; - case WPAnalyticsStatSignupMagicLinkRequested: - eventName = @"signup_magic_link_requested"; - break; - case WPAnalyticsStatSignupTermsButtonTapped: - eventName = @"signup_terms_of_service_tapped"; - break; - case WPAnalyticsStatSiteSettingsSiteIconTapped: - eventName = @"my_site_icon_tapped"; - break; - case WPAnalyticsStatSiteSettingsSiteIconRemoved: - eventName = @"my_site_icon_removed"; - break; - case WPAnalyticsStatSiteSettingsSiteIconShotNew: - eventName = @"my_site_icon_shot_new"; - break; - case WPAnalyticsStatSiteSettingsSiteIconGalleryPicked: - eventName = @"my_site_icon_gallery_picked"; - break; - case WPAnalyticsStatSiteSettingsSiteIconCropped: - eventName = @"my_site_icon_cropped"; - break; - case WPAnalyticsStatSiteSettingsSiteIconUploaded: - eventName = @"my_site_icon_uploaded"; - break; - case WPAnalyticsStatSiteSettingsSiteIconUploadFailed: - eventName = @"my_site_icon_upload_unsuccessful"; - break; - case WPAnalyticsStatSiteSettingsDeleteSiteAccessed: - eventName = @"site_settings_delete_site_accessed"; - break; - case WPAnalyticsStatSiteSettingsDeleteSitePurchasesRequested: - eventName = @"site_settings_delete_site_purchases_requested"; - break; - case WPAnalyticsStatSiteSettingsDeleteSitePurchasesShowClicked: - eventName = @"site_settings_delete_site_purchases_show_clicked"; - break; - case WPAnalyticsStatSiteSettingsDeleteSitePurchasesShown: - eventName = @"site_settings_delete_site_purchases_shown"; - break; - case WPAnalyticsStatSiteSettingsDeleteSiteRequested: - eventName = @"site_settings_delete_site_requested"; - break; - case WPAnalyticsStatSiteSettingsDeleteSiteResponseError: - eventName = @"site_settings_delete_site_response_error"; - break; - case WPAnalyticsStatSiteSettingsDeleteSiteResponseOK: - eventName = @"site_settings_delete_site_response_ok"; - break; - case WPAnalyticsStatSiteSettingsExportSiteAccessed: - eventName = @"site_settings_export_site_accessed"; - break; - case WPAnalyticsStatSiteSettingsExportSiteRequested: - eventName = @"site_settings_export_site_requested"; - break; - case WPAnalyticsStatSiteSettingsExportSiteResponseError: - eventName = @"site_settings_export_site_response_error"; - break; - case WPAnalyticsStatSiteSettingsExportSiteResponseOK: - eventName = @"site_settings_export_site_response_ok"; - break; - case WPAnalyticsStatSiteSettingsStartOverAccessed: - eventName = @"site_settings_start_over_accessed"; - break; - case WPAnalyticsStatSiteSettingsStartOverContactSupportClicked: - eventName = @"site_settings_start_over_contact_support_clicked"; - break; - case WPAnalyticsStatSpotlightSearchOpenedApp: - eventName = @"spotlight_search_opened_app"; - break; - case WPAnalyticsStatSpotlightSearchOpenedPost: - eventName = @"spotlight_search_opened_post"; - break; - case WPAnalyticsStatSpotlightSearchOpenedPage: - eventName = @"spotlight_search_opened_page"; - break; - case WPAnalyticsStatSpotlightSearchOpenedReaderPost: - eventName = @"spotlight_search_opened_reader_post"; - break; - case WPAnalyticsStatSkippedConnectingToJetpack: - eventName = @"skipped_connecting_to_jetpack"; - break; - case WPAnalyticsStatStatsAccessed: - eventName = @"stats_accessed"; - break; - case WPAnalyticsStatStatsSubscribersAccessed: - eventName = @"stats_subscribers_accessed"; - break; - case WPAnalyticsStatStatsDateTappedBackward: - eventName = @"stats_date_tapped_backward"; - break; - case WPAnalyticsStatStatsDateTappedForward: - eventName = @"stats_date_tapped_forward"; - break; - case WPAnalyticsStatStatsInsightsAccessed: - eventName = @"stats_insights_accessed"; - break; - case WPAnalyticsStatStatsItemSelectedAddInsight: - eventName = @"stats_add_insight_item_selected"; - break; - case WPAnalyticsStatStatsItemTappedAuthors: - eventName = @"stats_authors_view_post_tapped"; - break; - case WPAnalyticsStatStatsItemTappedClicks: - eventName = @"stats_clicks_item_tapped"; - break; - case WPAnalyticsStatStatsItemTappedInsightMoveDown: - eventName = @"stats_insight_move_down_tapped"; - break; - case WPAnalyticsStatStatsItemTappedInsightMoveUp: - eventName = @"stats_insight_move_up_tapped"; - break; - case WPAnalyticsStatStatsItemTappedInsightRemove: - eventName = @"stats_insight_remove_tapped"; - break; - case WPAnalyticsStatStatsItemTappedInsightsAddStat: - eventName = @"stats_add_insight_item_tapped"; - break; - case WPAnalyticsStatStatsItemTappedPostStatsMonthsYears: - eventName = @"stats_posts_and_pages_months_years_item_tapped"; - break; - case WPAnalyticsStatStatsItemTappedPostStatsRecentWeeks: - eventName = @"stats_posts_and_pages_recent_weeks_item_tapped"; - break; - case WPAnalyticsStatStatsItemTappedInsightsCustomizeDismiss: - eventName = @"stats_customize_insights_dismiss_item_tapped"; - break; - case WPAnalyticsStatStatsItemTappedInsightsCustomizeTry: - eventName = @"stats_customize_insights_try_item_tapped"; - break; - case WPAnalyticsStatStatsItemTappedLatestPostSummaryNewPost: - eventName = @"stats_latest_post_summary_add_new_post_tapped"; - break; - case WPAnalyticsStatStatsItemTappedLatestPostSummarySharePost: - eventName = @"stats_latest_post_summary_share_post_tapped"; - break; - case WPAnalyticsStatStatsItemTappedLatestPostSummaryPost: - eventName = @"stats_latest_post_summary_post_item_tapped"; - break; - case WPAnalyticsStatStatsItemTappedLatestPostSummaryViewPostDetails: - eventName = @"stats_latest_post_summary_view_post_details_tapped"; - break; - case WPAnalyticsStatStatsItemTappedManageInsight: - eventName = @"stats_manage_insight_tapped"; - break; - case WPAnalyticsStatStatsItemTappedPostsAndPages: - eventName = @"stats_posts_and_pages_item_tapped"; - break; - case WPAnalyticsStatStatsItemTappedPostingActivityDay: - eventName = @"stats_posting_activity_day_tapped"; - break; - case WPAnalyticsStatStatsItemTappedSearchTerms: - eventName = @"stats_search_terms_item_tapped"; - break; - case WPAnalyticsStatStatsItemTappedTagsAndCategories: - eventName = @"stats_tags_and_categories_view_tag_tapped"; - break; - case WPAnalyticsStatStatsItemTappedVideoTapped: - eventName = @"stats_video_plays_video_tapped"; - break; - case WPAnalyticsStatStatsOverviewBarChartTapped: - eventName = @"stats_overview_bar_chart_tapped"; - break; - case WPAnalyticsStatStatsOverviewTypeTappedComments: - eventName = @"stats_overview_type_tapped_comments"; - break; - case WPAnalyticsStatStatsOverviewTypeTappedLikes: - eventName = @"stats_overview_type_tapped_likes"; - break; - case WPAnalyticsStatStatsOverviewTypeTappedViews: - eventName = @"stats_overview_type_tapped_views"; - break; - case WPAnalyticsStatStatsOverviewTypeTappedVisitors: - eventName = @"stats_overview_type_tapped_visitors"; - break; - case WPAnalyticsStatStatsPeriodDaysAccessed: - eventName = @"stats_period_accessed"; - eventProperties = @{ @"period" : @"days" }; - break; - case WPAnalyticsStatStatsPeriodMonthsAccessed: - eventName = @"stats_period_accessed"; - eventProperties = @{ @"period" : @"months" }; - break; - case WPAnalyticsStatStatsPeriodWeeksAccessed: - eventName = @"stats_period_accessed"; - eventProperties = @{ @"period" : @"weeks" }; - break; - case WPAnalyticsStatStatsPeriodYearsAccessed: - eventName = @"stats_period_accessed"; - eventProperties = @{ @"period" : @"years" }; - break; - case WPAnalyticsStatStatsScrolledToBottom: - eventName = @"stats_scrolled_to_bottom"; - break; - case WPAnalyticsStatStatsSinglePostAccessed: - eventName = @"stats_single_post_accessed"; - break; - case WPAnalyticsStatStatsTappedBarChart: - eventName = @"stats_bar_chart_tapped"; - break; - case WPAnalyticsStatStatsViewAllAccessed: - eventName = @"stats_view_all_accessed"; - break; - case WPAnalyticsStatStatsViewMoreTappedAuthors: - eventName = @"stats_authors_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedClicks: - eventName = @"stats_clicks_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedComments: - eventName = @"stats_comments_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedCountries: - eventName = @"stats_countries_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedFileDownloads: - eventName = @"stats_file_downloads_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedFollowers: - eventName = @"stats_followers_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedPostsAndPages: - eventName = @"stats_posts_and_pages_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedPostingActivity: - eventName = @"stats_posting_activity_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedPublicize: - eventName = @"stats_publicize_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedReferrers: - eventName = @"stats_referrers_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedSearchTerms: - eventName = @"stats_search_terms_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedTagsAndCategories: - eventName = @"stats_tags_and_categories_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedThisYear: - eventName = @"stats_this_year_view_more_tapped"; - break; - case WPAnalyticsStatStatsViewMoreTappedVideoPlays: - eventName = @"stats_video_plays_view_more_tapped"; - break; - case WPAnalyticsStatStockMediaAccessed: - eventName = @"stock_media_accessed"; - break; - case WPAnalyticsStatStockMediaSearched: - eventName = @"stock_media_searched"; - break; - case WPAnalyticsStatStockMediaUploaded: - eventName = @"stock_media_uploaded"; - break; - case WPAnalyticsStatSupportReceivedResponseFromSupport: - eventName = @"support_received_response_from_support"; - break; - case WPAnalyticsStatSupportHelpCenterUserSearched: - eventName = @"support_help_center_user_searched"; - break; - case WPAnalyticsStatSupportIdentityFormViewed: - eventName = @"support_identity_form_viewed"; - break; - case WPAnalyticsStatSupportIdentitySet: - eventName = @"support_identity_set"; - break; - case WPAnalyticsStatSupportHelpCenterViewed: - eventName = @"support_help_center_viewed"; - break; - case WPAnalyticsStatSupportNewRequestViewed: - eventName = @"support_new_request_viewed"; - break; - case WPAnalyticsStatSupportTicketListViewed: - eventName = @"support_ticket_list_viewed"; - break; - case WPAnalyticsStatSupportNewRequestCreated: - eventName = @"support_new_request_created"; - break; - case WPAnalyticsStatSupportNewRequestFailed: - eventName = @"support_new_request_failed"; - break; - case WPAnalyticsStatSupportNewRequestFileAttached: - eventName = @"support_new_request_file_attached"; - break; - case WPAnalyticsStatSupportNewRequestFileAttachmentFailed: - eventName = @"support_new_request_file_attachment_failed"; - break; - case WPAnalyticsStatSupportTicketUserReplied: - eventName = @"support_ticket_user_replied"; - break; - case WPAnalyticsStatSupportTicketUserReplyFailed: - eventName = @"support_ticket_user_reply_failed"; - break; - case WPAnalyticsStatSupportTicketListViewFailed: - eventName = @"support_ticket_list_view_failed"; - break; - case WPAnalyticsStatSupportTicketUserViewed: - eventName = @"support_ticket_user_viewed"; - break; - case WPAnalyticsStatSupportTicketViewFailed: - eventName = @"support_ticket_view_failed"; - break; - case WPAnalyticsStatThemesAccessedThemeBrowser: - eventName = @"themes_theme_browser_accessed"; - break; - case WPAnalyticsStatThemesAccessedSearch: - eventName = @"themes_search_accessed"; - break; - case WPAnalyticsStatThemesChangedTheme: - eventName = @"themes_theme_changed"; - break; - case WPAnalyticsStatThemesCustomizeAccessed: - eventName = @"themes_customize_accessed"; - break; - case WPAnalyticsStatThemesDemoAccessed: - eventName = @"themes_demo_accessed"; - break; - case WPAnalyticsStatThemesDetailsAccessed: - eventName = @"themes_details_accessed"; - break; - case WPAnalyticsStatThemesPreviewedSite: - eventName = @"themes_theme_for_site_previewed"; - break; - case WPAnalyticsStatThemesSupportAccessed: - eventName = @"themes_support_accessed"; - break; - case WPAnalyticsStatTrainTracksInteract: - eventName = @"traintracks_interact"; - break; - case WPAnalyticsStatTrainTracksRender: - eventName = @"traintracks_render"; - break; - case WPAnalyticsStatTwoFactorCodeRequested: - eventName = @"two_factor_code_requested"; - break; - case WPAnalyticsStatTwoFactorSentSMS: - eventName = @"two_factor_sent_sms"; - break; - case WPAnalyticsStatOpenedAccountSettings: - eventName = @"account_settings_opened"; - break; - case WPAnalyticsStatAccountSettingsChangeUsernameSucceeded: - eventName = @"account_settings_change_username_succeeded"; - break; - case WPAnalyticsStatAccountSettingsChangeUsernameFailed: - eventName = @"account_settings_change_username_failed"; - break; - case WPAnalyticsStatAccountSettingsChangeUsernameSuggestionsFailed: - eventName = @"account_settings_change_username_suggestions_failed"; - break; - case WPAnalyticsStatOpenedAppSettings: - eventName = @"app_settings_opened"; - break; - case WPAnalyticsStatOpenedWebPreview: - eventName = @"web_preview_opened"; - break; - case WPAnalyticsStatOpenedMyProfile: - eventName = @"my_profile_opened"; - break; - case WPAnalyticsStatSharingButtonSettingsChanged: - eventName = @"sharing_buttons_settings_changed"; - break; - case WPAnalyticsStatSharingButtonOrderChanged: - eventName = @"sharing_buttons_order_changed"; - break; - case WPAnalyticsStatSharingButtonShowReblogChanged: - eventName = @"sharing_buttons_show_reblog_changed"; - break; - case WPAnalyticsStatSharingOpenedPublicize: - eventName = @"publicize_opened"; - break; - case WPAnalyticsStatSharingOpenedSharingButtonSettings: - eventName = @"sharing_buttons_opened"; - break; - case WPAnalyticsStatSharingPublicizeConnected: - eventName = @"publicize_service_connected"; - break; - case WPAnalyticsStatSharingPublicizeDisconnected: - eventName = @"publicize_service_disconnected"; - break; - case WPAnalyticsStatSharingPublicizeConnectionAvailableToAllChanged: - eventName = @"publicize_connection_availability_changed"; - break; - case WPAnalyticsStatLoginMagicLinkExited: - eventName = @"login_magic_link_exited"; - break; - case WPAnalyticsStatLoginMagicLinkFailed: - eventName = @"login_magic_link_failed"; - break; - case WPAnalyticsStatLoginMagicLinkOpened: - eventName = @"login_magic_link_opened"; - break; - case WPAnalyticsStatLoginMagicLinkRequested: - eventName = @"login_magic_link_requested"; - break; - case WPAnalyticsStatLoginMagicLinkSucceeded: - eventName = @"login_magic_link_succeeded"; - break; - case WPAnalyticsStatShareExtensionError: - eventName = @"share_extension_error"; - break; - case WPAnalyticsStatSearchAdsAttribution: - eventName = @"searchads_attribution_detail_received"; - break; - case WPAnalyticsStatDebugDeletedOrphanedEntities: - eventName = @"debug_deleted_orphaned_entities"; - break; - case WPAnalyticsStatWidgetActiveSiteChanged: - eventName = @"widget_active_site_changed"; - break; - - case WPAnalyticsStatWelcomeNoSitesInterstitialShown: - eventName = @"welcome_no_sites_interstitial_shown"; - break; - - case WPAnalyticsStatWelcomeNoSitesInterstitialButtonTapped: - eventName = @"welcome_no_sites_interstitial_button_tapped"; - break; - - case WPAnalyticsStatWelcomeNoSitesInterstitialDismissed: - eventName = @"welcome_no_sites_interstitial_dismissed"; - break; - - // The following are yet to be implemented. - // - // If you get test failures in WPAnalyticsTrackerAutomatticTracksTests, it's most likely - // because there are new WPAnalyticsStat enum values. This can mean that somebody is - // currently working on it. In cases like this, add the enum values here, returning - // as `nil`. The tests should pass. - case WPAnalyticsStatDefaultAccountChanged: - case WPAnalyticsStatNoStat: - case WPAnalyticsStatPerformedCoreDataMigrationFixFor45: - case WPAnalyticsStatMaxValue: - return nil; - } - - TracksEventPair *eventPair = [TracksEventPair new]; - eventPair.eventName = eventName; - eventPair.properties = eventProperties; - - return eventPair; -} - -@end diff --git a/WordPress/Classes/Utility/Analytics/WPAppAnalytics.m b/WordPress/Classes/Utility/Analytics/WPAppAnalytics.m index 20e9be24220c..b5d8e4b31bf8 100644 --- a/WordPress/Classes/Utility/Analytics/WPAppAnalytics.m +++ b/WordPress/Classes/Utility/Analytics/WPAppAnalytics.m @@ -3,7 +3,6 @@ #import "WPAppAnalytics.h" #import "WPAnalyticsTrackerWPCom.h" -#import "WPAnalyticsTrackerAutomatticTracks.h" #ifdef KEYSTONE #import "Keystone-Swift.h" @@ -70,7 +69,7 @@ - (void)initializeAppTracking - (void)registerTrackers { [WPAnalytics registerTracker:[WPAnalyticsTrackerWPCom new]]; - [WPAnalytics registerTracker:[WPAnalyticsTrackerAutomatticTracks new]]; + [WPAnalytics registerTracker:[AnalyticsTrackerAutomatticTracks new]]; } - (void)clearTrackers diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 66b63fbb3bcd..870a24f2d066 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -128,6 +128,7 @@ 0C6C4CD42A4F0AD90049E762 /* blaze-search-page-1.json in Resources */ = {isa = PBXBuildFile; fileRef = 0C6C4CD32A4F0AD80049E762 /* blaze-search-page-1.json */; }; 0C6C4CD62A4F0AEE0049E762 /* blaze-search-page-2.json in Resources */ = {isa = PBXBuildFile; fileRef = 0C6C4CD52A4F0AEE0049E762 /* blaze-search-page-2.json */; }; 0C6C4CD82A4F0F2C0049E762 /* Bundle+TestExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C6C4CD72A4F0F2C0049E762 /* Bundle+TestExtensions.swift */; }; + 0C73654B2D9DAA3D0029BD42 /* TrackMappedEventTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C73654A2D9DAA3D0029BD42 /* TrackMappedEventTests.swift */; }; 0C77A5B32CDE7924005BC0DA /* ReaderPostTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C77A5B22CDE7924005BC0DA /* ReaderPostTests.swift */; }; 0C7D481A2A4DB9300023CF84 /* blaze-search-response.json in Resources */ = {isa = PBXBuildFile; fileRef = 0C7D48192A4DB9300023CF84 /* blaze-search-response.json */; }; 0C896DE72A3A832B00D7D4E7 /* SiteVisibilityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C896DE62A3A832B00D7D4E7 /* SiteVisibilityTests.swift */; }; @@ -442,7 +443,6 @@ 938466B92683CA0E00A538DC /* ReferrerDetailsViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 938466B82683CA0E00A538DC /* ReferrerDetailsViewModelTests.swift */; }; 93A379EC19FFBF7900415023 /* KeychainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 93A379EB19FFBF7900415023 /* KeychainTest.m */; }; 93A3F7DE1843F6F00082FEEA /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93A3F7DD1843F6F00082FEEA /* CoreTelephony.framework */; }; - 93B853231B4416A30064FE72 /* WPAnalyticsTrackerAutomatticTracksTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 93B853221B4416A30064FE72 /* WPAnalyticsTrackerAutomatticTracksTests.m */; }; 93C882A11EEB18D700227A59 /* html_page_with_link_to_rsd_non_standard.html in Resources */ = {isa = PBXBuildFile; fileRef = 93C882981EEB18D700227A59 /* html_page_with_link_to_rsd_non_standard.html */; }; 93C882A21EEB18D700227A59 /* html_page_with_link_to_rsd.html in Resources */ = {isa = PBXBuildFile; fileRef = 93C882991EEB18D700227A59 /* html_page_with_link_to_rsd.html */; }; 93C882A31EEB18D700227A59 /* plugin_redirect.html in Resources */ = {isa = PBXBuildFile; fileRef = 93C8829A1EEB18D700227A59 /* plugin_redirect.html */; }; @@ -1241,6 +1241,7 @@ 0C6C4CD32A4F0AD80049E762 /* blaze-search-page-1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "blaze-search-page-1.json"; sourceTree = ""; }; 0C6C4CD52A4F0AEE0049E762 /* blaze-search-page-2.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "blaze-search-page-2.json"; sourceTree = ""; }; 0C6C4CD72A4F0F2C0049E762 /* Bundle+TestExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+TestExtensions.swift"; sourceTree = ""; }; + 0C73654A2D9DAA3D0029BD42 /* TrackMappedEventTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackMappedEventTests.swift; sourceTree = ""; }; 0C77A5B22CDE7924005BC0DA /* ReaderPostTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReaderPostTests.swift; sourceTree = ""; }; 0C7D48192A4DB9300023CF84 /* blaze-search-response.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "blaze-search-response.json"; sourceTree = ""; }; 0C896DE62A3A832B00D7D4E7 /* SiteVisibilityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SiteVisibilityTests.swift; sourceTree = ""; }; @@ -1594,7 +1595,6 @@ 938466B82683CA0E00A538DC /* ReferrerDetailsViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReferrerDetailsViewModelTests.swift; sourceTree = ""; }; 93A379EB19FFBF7900415023 /* KeychainTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeychainTest.m; sourceTree = ""; }; 93A3F7DD1843F6F00082FEEA /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; - 93B853221B4416A30064FE72 /* WPAnalyticsTrackerAutomatticTracksTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WPAnalyticsTrackerAutomatticTracksTests.m; sourceTree = ""; }; 93C882981EEB18D700227A59 /* html_page_with_link_to_rsd_non_standard.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = html_page_with_link_to_rsd_non_standard.html; sourceTree = ""; }; 93C882991EEB18D700227A59 /* html_page_with_link_to_rsd.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = html_page_with_link_to_rsd.html; sourceTree = ""; }; 93C8829A1EEB18D700227A59 /* plugin_redirect.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = plugin_redirect.html; sourceTree = ""; }; @@ -3303,7 +3303,7 @@ children = ( 3F28CEA82A4ACB1000B79686 /* AnalyticsEventTrackingSpy.swift */, 3F28CEA42A4ABB8800B79686 /* PrivacySettingsAnalyticsTrackerTests.swift */, - 93B853221B4416A30064FE72 /* WPAnalyticsTrackerAutomatticTracksTests.m */, + 0C73654A2D9DAA3D0029BD42 /* TrackMappedEventTests.swift */, ); name = Analytics; sourceTree = ""; @@ -5705,7 +5705,6 @@ C8567496243F3D37001A995E /* TenorResultsPageTests.swift in Sources */, 01D7EBA82B7CD07E00F14992 /* SiteStatsPeriodViewModelTests.swift in Sources */, 3F28CEA92A4ACB1000B79686 /* AnalyticsEventTrackingSpy.swift in Sources */, - 93B853231B4416A30064FE72 /* WPAnalyticsTrackerAutomatticTracksTests.m in Sources */, C738CB0B28623CED001BE107 /* QRLoginCoordinatorTests.swift in Sources */, F41D98E12B39C5CE004EC050 /* BlogDashboardDynamicCardCoordinatorTests.swift in Sources */, FE2E3729281C839C00A1E82A /* BloggingPromptsServiceTests.swift in Sources */, @@ -5959,6 +5958,7 @@ 9A9D34FF2360A4E200BC95A3 /* StatsPeriodAsyncOperationTests.swift in Sources */, 8BE9AB8827B6B5A300708E45 /* BlogDashboardPersistenceTests.swift in Sources */, B5EFB1C91B333C5A007608A3 /* NotificationSettingsServiceTests.swift in Sources */, + 0C73654B2D9DAA3D0029BD42 /* TrackMappedEventTests.swift in Sources */, 3F16F0C62D9CD9A9008BC606 /* WPAccount+RestApiTests.swift in Sources */, AC68C9CA28E5DF14009030A9 /* NotificationsViewControllerTests.swift in Sources */, 179501CD27A01D4100882787 /* PublicizeAuthorizationURLComponentsTests.swift in Sources */, diff --git a/WordPress/WordPressTest/TrackMappedEventTests.swift b/WordPress/WordPressTest/TrackMappedEventTests.swift new file mode 100644 index 000000000000..f668d46f3c38 --- /dev/null +++ b/WordPress/WordPressTest/TrackMappedEventTests.swift @@ -0,0 +1,21 @@ +import Testing +import WordPressShared +import AutomatticTracks +import AutomatticTracksEvents + +@testable import WordPress + +struct TrackMappedEventTests { + @Test func verifyTrackEventNameMapping() throws { + for index in 0.. -#import -#import "WPAnalyticsTrackerAutomatticTracks.h" - -@import AutomatticTracks; -@import AutomatticTracksEvents; -@import OCMock; - -@interface WPAnalyticsTrackerAutomatticTracksTests : XCTestCase - -@property (nonatomic, strong) WPAnalyticsTrackerAutomatticTracks *subject; -@property (nonatomic, strong) id serviceMock; - -@end - -@interface WPAnalyticsTrackerAutomatticTracks (Testing) - -@property (nonatomic, strong) TracksService *tracksService; -@property (nonatomic, strong) TracksContextManager *contextManager; - -@end - -@implementation WPAnalyticsTrackerAutomatticTracksTests - -- (void)setUp { - [super setUp]; - - self.subject = [[WPAnalyticsTrackerAutomatticTracks alloc] initWithEventNamePrefix:@"xctest" platform:@"xctest"]; - self.serviceMock = OCMStrictClassMock([TracksService class]); - self.subject.tracksService = self.serviceMock; - self.subject.contextManager = nil; -} - -- (void)tearDown { - self.subject = nil; - self.serviceMock = nil; - [super tearDown]; -} - -- (void)testVerifyTracksNamesMappings { - for (NSUInteger x = 0; x <= WPAnalyticsStatMaxValue; ++x) { - OCMExpect(([self.serviceMock trackEventName:[OCMArg checkWithBlock:^BOOL(id obj) { - TracksEvent *tracksEvent = [TracksEvent new]; - tracksEvent.uuid = [NSUUID UUID]; - tracksEvent.eventName = [NSString stringWithFormat:@"wpios_%@", obj]; - - NSError *error; - BOOL isValid = [tracksEvent validateObject:&error]; - - if (!isValid) { - NSLog(@"Error when validating TracksEvent: %@", error); - } - - return isValid; - }] withCustomProperties:[OCMArg any]])); - - - [self.subject track:(WPAnalyticsStat)x]; - } -} - -@end From 84ffe73d5fb96fe9f8ba3b25e96853eaca8dcf4e Mon Sep 17 00:00:00 2001 From: kean Date: Mon, 7 Apr 2025 18:44:43 -0400 Subject: [PATCH 2/2] Fix condition --- .../Utility/Analytics/AnalyticsTrackerAutomatticTracks.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/Utility/Analytics/AnalyticsTrackerAutomatticTracks.swift b/WordPress/Classes/Utility/Analytics/AnalyticsTrackerAutomatticTracks.swift index 167976979992..5fe279d93ed0 100644 --- a/WordPress/Classes/Utility/Analytics/AnalyticsTrackerAutomatticTracks.swift +++ b/WordPress/Classes/Utility/Analytics/AnalyticsTrackerAutomatticTracks.swift @@ -114,7 +114,7 @@ import BuildSettingsKit return } - if currentUserID?.isEmpty == true { + if (currentUserID ?? "").isEmpty { // No previous username logged currentUserID = username removeAnonymousID()