diff options
Diffstat (limited to 'libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerMixpanel.java')
-rw-r--r-- | libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerMixpanel.java | 1172 |
1 files changed, 1172 insertions, 0 deletions
diff --git a/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerMixpanel.java b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerMixpanel.java new file mode 100644 index 000000000..1e1b278f8 --- /dev/null +++ b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerMixpanel.java @@ -0,0 +1,1172 @@ +package org.wordpress.android.analytics; + +import android.annotation.SuppressLint; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +import com.mixpanel.android.mpmetrics.MixpanelAPI; + +import org.json.JSONException; +import org.json.JSONObject; +import org.wordpress.android.util.AppLog; + +import java.util.EnumMap; +import java.util.Map; + +public class AnalyticsTrackerMixpanel extends Tracker { + public static final String SESSION_COUNT = "sessionCount"; + + private MixpanelAPI mMixpanel; + private EnumMap<AnalyticsTracker.Stat, JSONObject> mAggregatedProperties; + private static final String MIXPANEL_PLATFORM = "platform"; + private static final String MIXPANEL_SESSION_COUNT = "session_count"; + private static final String DOTCOM_USER = "dotcom_user"; + private static final String JETPACK_USER = "jetpack_user"; + private static final String MIXPANEL_NUMBER_OF_BLOGS = "number_of_blogs"; + private static final String APP_LOCALE = "app_locale"; + private static final String MIXPANEL_ANON_ID = "mixpanel_user_anon_id"; + + public AnalyticsTrackerMixpanel(Context context, String token) throws IllegalArgumentException { + super(context); + mAggregatedProperties = new EnumMap<>(AnalyticsTracker.Stat.class); + mMixpanel = MixpanelAPI.getInstance(context, token); + } + + @SuppressWarnings("deprecation") + @SuppressLint("NewApi") + public static void showNotification(Context context, PendingIntent intent, int notificationIcon, CharSequence title, + CharSequence message) { + final NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + final Notification.Builder builder = new Notification.Builder(context).setSmallIcon(notificationIcon) + .setTicker(message).setWhen(System.currentTimeMillis()).setContentTitle(title).setContentText(message) + .setContentIntent(intent); + Notification notification; + notification = builder.build(); + notification.flags |= Notification.FLAG_AUTO_CANCEL; + nm.notify(0, notification); + } + + String getAnonIdPrefKey() { + return MIXPANEL_ANON_ID; + } + + @Override + public void track(AnalyticsTracker.Stat stat) { + track(stat, null); + } + + @Override + public void track(AnalyticsTracker.Stat stat, Map<String, ?> properties) { + AnalyticsTrackerMixpanelInstructionsForStat instructions = instructionsForStat(stat); + + if (instructions == null) { + return; + } + + trackMixpanelDataForInstructions(instructions, properties); + } + + private void trackMixpanelDataForInstructions(AnalyticsTrackerMixpanelInstructionsForStat instructions, + Map<String, ?> properties) { + if (instructions.getDisableForSelfHosted()) { + return; + } + + // Just a security check we're tracking the correct user + if (getWordPressComUserName() == null && getAnonID() == null) { + this.clearAllData(); + generateNewAnonID(); + mMixpanel.identify(getAnonID()); + } + + trackMixpanelEventForInstructions(instructions, properties); + trackMixpanelPropertiesForInstructions(instructions); + } + + private void trackMixpanelPropertiesForInstructions(AnalyticsTrackerMixpanelInstructionsForStat instructions) { + if (instructions.getPeoplePropertyToIncrement() != null && !instructions.getPeoplePropertyToIncrement() + .isEmpty()) { + incrementPeopleProperty(instructions.getPeoplePropertyToIncrement()); + } + + if (instructions.getSuperPropertyToIncrement() != null && !instructions.getSuperPropertyToIncrement() + .isEmpty()) { + incrementSuperProperty(instructions.getSuperPropertyToIncrement()); + } + + if (instructions.getPropertyToIncrement() != null && !instructions.getPropertyToIncrement().isEmpty()) { + incrementProperty(instructions.getPropertyToIncrement(), instructions.getStatToAttachProperty()); + } + + if (instructions.getSuperPropertiesToFlag() != null && instructions.getSuperPropertiesToFlag().size() > 0) { + for (String superPropertyToFlag : instructions.getSuperPropertiesToFlag()) { + flagSuperProperty(superPropertyToFlag); + } + } + + if (instructions.getPeoplePropertiesToAssign() != null + && instructions.getPeoplePropertiesToAssign().size() > 0) { + for (Map.Entry<String, Object> entry: instructions.getPeoplePropertiesToAssign().entrySet()) { + setValueForPeopleProperty(entry.getKey(), entry.getValue()); + } + } + } + + private void setValueForPeopleProperty(String peopleProperty, Object value) { + try { + mMixpanel.getPeople().set(peopleProperty, value); + } catch (OutOfMemoryError outOfMemoryError) { + // ignore exception + } + } + + private void trackMixpanelEventForInstructions(AnalyticsTrackerMixpanelInstructionsForStat instructions, + Map<String, ?> properties) { + String eventName = instructions.getMixpanelEventName(); + if (eventName != null && !eventName.isEmpty()) { + JSONObject savedPropertiesForStat = propertiesForStat(instructions.getStat()); + if (savedPropertiesForStat == null) { + savedPropertiesForStat = new JSONObject(); + } + + // Retrieve properties user has already passed in and combine them with the saved properties + if (properties != null) { + for (Object o : properties.entrySet()) { + Map.Entry pairs = (Map.Entry) o; + String key = (String) pairs.getKey(); + try { + Object value = pairs.getValue(); + savedPropertiesForStat.put(key, value); + } catch (JSONException e) { + AppLog.e(AppLog.T.UTILS, e); + } + } + } + mMixpanel.track(eventName, savedPropertiesForStat); + removePropertiesForStat(instructions.getStat()); + } + } + + @Override + public void registerPushNotificationToken(String regId) { + try { + mMixpanel.getPeople().setPushRegistrationId(regId); + } catch (OutOfMemoryError outOfMemoryError) { + // ignore exception + } + } + + @Override + public void endSession() { + mAggregatedProperties.clear(); + mMixpanel.flush(); + } + + @Override + public void flush() { + mMixpanel.flush(); + } + + @Override + public void refreshMetadata(AnalyticsMetadata metadata) { + // Register super properties + try { + JSONObject properties = new JSONObject(); + properties.put(MIXPANEL_PLATFORM, "Android"); + properties.put(MIXPANEL_SESSION_COUNT, metadata.getSessionCount()); + properties.put(DOTCOM_USER, metadata.isUserConnected()); + properties.put(JETPACK_USER, metadata.isJetpackUser()); + properties.put(MIXPANEL_NUMBER_OF_BLOGS, metadata.getNumBlogs()); + properties.put(APP_LOCALE, mContext.getResources().getConfiguration().locale.toString()); + mMixpanel.registerSuperProperties(properties); + } catch (JSONException e) { + AppLog.e(AppLog.T.UTILS, e); + } + + + if (metadata.isUserConnected() && metadata.isWordPressComUser()) { + setWordPressComUserName(metadata.getUsername()); + // Re-unify the user + if (getAnonID() != null) { + mMixpanel.alias(getWordPressComUserName(), getAnonID()); + clearAnonID(); + } else { + mMixpanel.identify(metadata.getUsername()); + } + } else { + // Not wpcom connected. Check if anonID is already present + setWordPressComUserName(null); + if (getAnonID() == null) { + generateNewAnonID(); + } + mMixpanel.identify(getAnonID()); + } + + // Application opened and start. + if (metadata.isUserConnected()) { + try { + String userID = getWordPressComUserName() != null ? getWordPressComUserName() : getAnonID(); + if (userID == null) { + // This should not be an option here + return; + } + + mMixpanel.getPeople().identify(userID); + JSONObject jsonObj = new JSONObject(); + jsonObj.put("$username", userID); + if (metadata.getEmail() != null) { + jsonObj.put("$email", metadata.getEmail()); + } + jsonObj.put("$first_name", userID); + mMixpanel.getPeople().set(jsonObj); + } catch (JSONException e) { + AppLog.e(AppLog.T.UTILS, e); + } catch (OutOfMemoryError outOfMemoryError) { + // ignore exception + } + } + } + + @Override + public void clearAllData() { + super.clearAllData(); + mMixpanel.clearSuperProperties(); + try { + mMixpanel.getPeople().clearPushRegistrationId(); + } catch (OutOfMemoryError outOfMemoryError) { + // ignore exception + } + } + + private AnalyticsTrackerMixpanelInstructionsForStat instructionsForStat( + AnalyticsTracker.Stat stat) { + AnalyticsTrackerMixpanelInstructionsForStat instructions; + switch (stat) { + case APPLICATION_OPENED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Application Opened"); + instructions.setSuperPropertyToIncrement("Application Opened"); + incrementSessionCount(); + break; + case APPLICATION_CLOSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Application Closed"); + break; + case APPLICATION_INSTALLED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Application Installed"); + break; + case APPLICATION_UPGRADED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Application Upgraded"); + break; + case READER_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_reader"); + instructions.setCurrentDateForPeopleProperty("last_time_accessed_reader"); + break; + case READER_ARTICLE_COMMENTED_ON: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Commented on Article"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement( + "number_of_times_commented_on_reader_article"); + instructions.setCurrentDateForPeopleProperty("last_time_commented_on_article"); + break; + case READER_ARTICLE_LIKED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Liked Article"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_liked_article"); + instructions.setCurrentDateForPeopleProperty("last_time_liked_reader_article"); + break; + case READER_ARTICLE_OPENED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Opened Article"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_opened_article"); + instructions.setCurrentDateForPeopleProperty("last_time_opened_reader_article"); + break; + case READER_ARTICLE_UNLIKED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Unliked Article"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_unliked_article"); + instructions.setCurrentDateForPeopleProperty("last_time_unliked_reader_article"); + break; + case READER_BLOG_BLOCKED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Blocked Blog"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_blocked_a_blog"); + instructions.setCurrentDateForPeopleProperty("last_time_blocked_a_blog"); + break; + case READER_BLOG_FOLLOWED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Followed Site"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_followed_site"); + instructions.setCurrentDateForPeopleProperty("last_time_followed_site"); + break; + case READER_BLOG_PREVIEWED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Blog Preview"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_viewed_blog_preview"); + instructions.setCurrentDateForPeopleProperty("last_time_viewed_blog_preview"); + break; + case READER_BLOG_UNFOLLOWED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Unfollowed Site"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_unfollowed_site"); + instructions.setCurrentDateForPeopleProperty("last_time_unfollowed_site"); + break; + case READER_DISCOVER_VIEWED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Discover Content Viewed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement( + "number_of_times_discover_content_viewed"); + instructions.setCurrentDateForPeopleProperty("last_time_discover_content_viewed"); + break; + case READER_INFINITE_SCROLL: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Infinite Scroll"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement( + "number_of_times_reader_performed_infinite_scroll"); + instructions.setCurrentDateForPeopleProperty("last_time_performed_reader_infinite_scroll"); + break; + case READER_LIST_FOLLOWED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Followed List"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_followed_list"); + instructions.setCurrentDateForPeopleProperty("last_time_followed_list"); + break; + case READER_LIST_LOADED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Loaded List"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_loaded_list"); + instructions.setCurrentDateForPeopleProperty("last_time_loaded_list"); + break; + case READER_LIST_PREVIEWED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - List Preview"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_viewed_list_preview"); + instructions.setCurrentDateForPeopleProperty("last_time_viewed_list_preview"); + break; + case READER_LIST_UNFOLLOWED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Unfollowed List"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_unfollowed_list"); + instructions.setCurrentDateForPeopleProperty("last_time_unfollowed_list"); + break; + case READER_TAG_FOLLOWED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Followed Reader Tag"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_followed_reader_tag"); + instructions.setCurrentDateForPeopleProperty("last_time_followed_reader_tag"); + break; + case READER_TAG_LOADED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Loaded Tag"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_loaded_tag"); + instructions.setCurrentDateForPeopleProperty("last_time_loaded_tag"); + break; + case READER_TAG_PREVIEWED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Tag Preview"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_viewed_tag_preview"); + instructions.setCurrentDateForPeopleProperty("last_time_viewed_tag_preview"); + break; + case READER_TAG_UNFOLLOWED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Unfollowed Reader Tag"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_unfollowed_reader_tag"); + instructions.setCurrentDateForPeopleProperty("last_time_unfollowed_reader_tag"); + break; + case READER_SEARCH_LOADED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Loaded Search"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_reader_search_loaded"); + instructions.setCurrentDateForPeopleProperty("last_time_reader_search_loaded"); + break; + case READER_SEARCH_PERFORMED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Performed Search"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_reader_search_performed"); + instructions.setCurrentDateForPeopleProperty("last_time_reader_search_performed"); + break; + case READER_SEARCH_RESULT_TAPPED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Tapped Search Result"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_reader_search_result_tapped"); + instructions.setCurrentDateForPeopleProperty("last_time_reader_search_result_tapped"); + break; + case READER_RELATED_POST_CLICKED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Reader - Related Post Clicked"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_reader_related_post_clicked"); + instructions.setCurrentDateForPeopleProperty("last_time_reader_related_post_clicked"); + break; + case EDITOR_CREATED_POST: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Created Post"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_created_post"); + instructions.setCurrentDateForPeopleProperty("last_time_created_post_in_editor"); + break; + case EDITOR_SAVED_DRAFT: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Saved Draft"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_saved_draft"); + instructions.setCurrentDateForPeopleProperty("last_time_saved_draft"); + break; + case EDITOR_DISCARDED_CHANGES: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Discarded Changes"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_discarded_changes"); + instructions.setCurrentDateForPeopleProperty("last_time_discarded_changes"); + break; + case EDITOR_EDITED_IMAGE: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Edited Image"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_edited_image"); + instructions.setCurrentDateForPeopleProperty("last_time_edited_image"); + break; + case EDITOR_ENABLED_NEW_VERSION: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Enabled New Version"); + instructions.addSuperPropertyToFlag("enabled_new_editor"); + break; + case EDITOR_TOGGLED_ON: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Toggled New Editor On"); + instructions.setPeoplePropertyToValue("enabled_new_editor", true); + break; + case EDITOR_TOGGLED_OFF: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Toggled New Editor Off"); + instructions.setPeoplePropertyToValue("enabled_new_editor", false); + break; + case EDITOR_UPLOAD_MEDIA_FAILED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Upload Media Failed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_upload_media_failed"); + instructions.setCurrentDateForPeopleProperty("last_time_editor_upload_media_failed"); + break; + case EDITOR_UPLOAD_MEDIA_RETRIED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Retried Uploading Media"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_retried_uploading_media"); + instructions.setCurrentDateForPeopleProperty("last_time_editor_retried_uploading_media"); + break; + case EDITOR_CLOSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Closed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_closed"); + break; + case EDITOR_ADDED_PHOTO_VIA_LOCAL_LIBRARY: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Added Photo via Local Library"); + instructions. + setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_added_photo_via_local_library"); + instructions.setCurrentDateForPeopleProperty("last_time_added_photo_via_local_library_to_post"); + break; + case EDITOR_ADDED_PHOTO_VIA_WP_MEDIA_LIBRARY: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Added Photo via WP Media Library"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement( + "number_of_times_added_photo_via_wp_media_library"); + instructions.setCurrentDateForPeopleProperty("last_time_added_photo_via_wp_media_library_to_post"); + break; + case EDITOR_ADDED_VIDEO_VIA_LOCAL_LIBRARY: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Added Video via Local Library"); + instructions. + setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_added_video_via_local_library"); + instructions.setCurrentDateForPeopleProperty("last_time_added_video_via_local_library_to_post"); + break; + case EDITOR_ADDED_VIDEO_VIA_WP_MEDIA_LIBRARY: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Added Video via WP Media Library"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement( + "number_of_times_added_video_via_wp_media_library"); + instructions.setCurrentDateForPeopleProperty("last_time_added_video_via_wp_media_library_to_post"); + break; + case EDITOR_PUBLISHED_POST: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Published Post"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_published_post"); + instructions.setCurrentDateForPeopleProperty("last_time_published_post"); + break; + case EDITOR_UPDATED_POST: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Updated Post"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_updated_post"); + instructions.setCurrentDateForPeopleProperty("last_time_updated_post"); + break; + case EDITOR_SCHEDULED_POST: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Scheduled Post"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_scheduled_post"); + instructions.setCurrentDateForPeopleProperty("last_time_scheduled_post"); + break; + case EDITOR_TAPPED_BLOCKQUOTE: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped Blockquote Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_blockquote"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_blockquote_in_editor"); + break; + case EDITOR_TAPPED_BOLD: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped Bold Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_bold"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_bold_in_editor"); + break; + case EDITOR_TAPPED_IMAGE: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped Image Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_image"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_image_in_editor"); + break; + case EDITOR_TAPPED_ITALIC: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped Italics Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_italic"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_italic_in_editor"); + break; + case EDITOR_TAPPED_LINK: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped Link Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_link"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_link_in_editor"); + break; + case EDITOR_TAPPED_MORE: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped More Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_more"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_more_in_editor"); + break; + case EDITOR_TAPPED_STRIKETHROUGH: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped Strikethrough Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_strikethrough"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_strikethrough_in_editor"); + break; + case EDITOR_TAPPED_UNDERLINE: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped Underline Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_underline"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_underline_in_editor"); + break; + case EDITOR_TAPPED_HTML: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped HTML Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_html"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_html_in_editor"); + break; + case EDITOR_TAPPED_ORDERED_LIST: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped Ordered List Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_ordered_list"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_ordered_list_in_editor"); + break; + case EDITOR_TAPPED_UNLINK: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped Unlink Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_unlink"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_unlink_in_editor"); + break; + case EDITOR_TAPPED_UNORDERED_LIST: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Editor - Tapped Unordered List Button"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_editor_tapped_unordered_list"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_unordered_list_in_editor"); + break; + case NOTIFICATIONS_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Notifications - Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_notifications"); + instructions.setCurrentDateForPeopleProperty("last_time_accessed_notifications"); + break; + case NOTIFICATIONS_OPENED_NOTIFICATION_DETAILS: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Notifications - Opened Notification Details"); + instructions. + setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_opened_notification_details"); + instructions.setCurrentDateForPeopleProperty("last_time_opened_notification_details"); + break; + case NOTIFICATION_APPROVED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsWithSuperPropertyAndPeoplePropertyIncrementor( + "number_of_notifications_approved"); + break; + case NOTIFICATION_UNAPPROVED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsWithSuperPropertyAndPeoplePropertyIncrementor( + "number_of_notifications_unapproved"); + break; + case NOTIFICATION_REPLIED_TO: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsWithSuperPropertyAndPeoplePropertyIncrementor( + "number_of_notifications_replied_to"); + break; + case NOTIFICATION_TRASHED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsWithSuperPropertyAndPeoplePropertyIncrementor( + "number_of_notifications_trashed"); + break; + case NOTIFICATION_FLAGGED_AS_SPAM: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsWithSuperPropertyAndPeoplePropertyIncrementor( + "number_of_notifications_flagged_as_spam"); + break; + case NOTIFICATION_LIKED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Notifications - Liked Comment"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_comment_likes_from_notification"); + break; + case NOTIFICATION_UNLIKED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Notifications - Unliked Comment"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_comment_unlikes_from_notification"); + break; + case OPENED_POSTS: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Site Menu - Opened Posts"); + break; + case OPENED_PAGES: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Site Menu - Opened Pages"); + break; + case OPENED_COMMENTS: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Site Menu - Opened Comments"); + break; + case OPENED_VIEW_SITE: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Site Menu - Opened View Site"); + break; + case OPENED_VIEW_ADMIN: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Site Menu - Opened View Admin"); + break; + case OPENED_MEDIA_LIBRARY: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Site Menu - Opened Media Library"); + break; + case OPENED_BLOG_SETTINGS: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Site Menu - Opened Site Settings"); + break; + case OPENED_ACCOUNT_SETTINGS: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Opened Account Settings"); + break; + case OPENED_APP_SETTINGS: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Opened App Settings"); + break; + case OPENED_MY_PROFILE: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Opened My Profile"); + break; + case OPENED_PEOPLE_MANAGEMENT: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("People Management - Accessed List"); + break; + case OPENED_PERSON: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("People Management - Accessed Details"); + break; + case CREATED_ACCOUNT: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Created Account"); + instructions.setCurrentDateForPeopleProperty("$created"); + instructions.addSuperPropertyToFlag("created_account_on_mobile"); + break; + case CREATED_SITE: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Created Site"); + break; + case SHARED_ITEM: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsWithSuperPropertyAndPeoplePropertyIncrementor("number_of_items_shared"); + break; + case ADDED_SELF_HOSTED_SITE: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Added Self Hosted Site"); + instructions.setCurrentDateForPeopleProperty("last_time_added_self_hosted_site"); + break; + case SIGNED_IN: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Signed In"); + break; + case SIGNED_INTO_JETPACK: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Signed into Jetpack"); + instructions.addSuperPropertyToFlag("jetpack_user"); + instructions.addSuperPropertyToFlag("dotcom_user"); + break; + case ACCOUNT_LOGOUT: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Logged Out"); + break; + case PERFORMED_JETPACK_SIGN_IN_FROM_STATS_SCREEN: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Signed into Jetpack from Stats Screen"); + break; + case STATS_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_stats"); + instructions.setCurrentDateForPeopleProperty("last_time_accessed_stats"); + break; + case STATS_INSIGHTS_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Insights Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_insights_screen_stats"); + instructions.setCurrentDateForPeopleProperty("last_time_accessed_insights_screen_stats"); + break; + case STATS_PERIOD_DAYS_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Period Days Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_days_screen_stats"); + instructions.setCurrentDateForPeopleProperty("last_time_accessed_days_screen_stats"); + break; + case STATS_PERIOD_WEEKS_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Period Weeks Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_weeks_screen_stats"); + instructions.setCurrentDateForPeopleProperty("last_time_accessed_weeks_screen_stats"); + break; + case STATS_PERIOD_MONTHS_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Period Months Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_months_screen_stats"); + instructions.setCurrentDateForPeopleProperty("last_time_accessed_months_screen_stats"); + break; + case STATS_PERIOD_YEARS_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Period Years Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_years_screen_stats"); + instructions.setCurrentDateForPeopleProperty("last_time_accessed_years_screen_stats"); + break; + case STATS_VIEW_ALL_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - View All Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_view_all_screen_stats"); + instructions.setCurrentDateForPeopleProperty("last_time_accessed_view_all_screen_stats"); + break; + case STATS_SINGLE_POST_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Single Post Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_single_post_screen_stats"); + instructions.setCurrentDateForPeopleProperty("last_time_accessed_single_post_screen_stats"); + break; + case STATS_TAPPED_BAR_CHART: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Tapped Bar Chart"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_tapped_stats_bar_chart"); + instructions.setCurrentDateForPeopleProperty("last_time_tapped_stats_bar_chart"); + break; + case STATS_SCROLLED_TO_BOTTOM: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Scrolled to Bottom"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_scrolled_to_bottom_of_stats"); + instructions.setCurrentDateForPeopleProperty("last_time_scrolled_to_bottom_of_stats"); + break; + case STATS_SELECTED_INSTALL_JETPACK: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Selected Install Jetpack"); + break; + case STATS_SELECTED_CONNECT_JETPACK: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Selected Connect Jetpack"); + break; + case STATS_WIDGET_ADDED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Widget Added"); + break; + case STATS_WIDGET_REMOVED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Widget Removed"); + break; + case STATS_WIDGET_TAPPED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Stats - Widget Tapped"); + break; + case PUSH_NOTIFICATION_RECEIVED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Push Notification - Received"); + break; + case PUSH_NOTIFICATION_TAPPED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Push Notification - Alert Tapped"); + break; + case SUPPORT_OPENED_HELPSHIFT_SCREEN: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Support - Opened Helpshift Screen"); + instructions.addSuperPropertyToFlag("opened_helpshift_screen"); + break; + case SUPPORT_SENT_REPLY_TO_SUPPORT_MESSAGE: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Support - Replied to Helpshift"); + instructions.addSuperPropertyToFlag("support_replied_to_helpshift"); + break; + case LOGIN_MAGIC_LINK_EXITED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Login - Magic Link exited"); + break; + case LOGIN_MAGIC_LINK_FAILED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Login - Magic Link failed"); + break; + case LOGIN_MAGIC_LINK_OPENED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Login - Magic Link opened"); + break; + case LOGIN_MAGIC_LINK_REQUESTED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Login - Magic Link requested"); + break; + case LOGIN_MAGIC_LINK_SUCCEEDED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Login - Magic Link succeeded"); + break; + case LOGIN_FAILED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Login - Failed Login"); + break; + case LOGIN_FAILED_TO_GUESS_XMLRPC: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Login - Failed To Guess XMLRPC"); + break; + case LOGIN_INSERTED_INVALID_URL: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Login - Inserted Invalid URL"); + break; + case LOGIN_AUTOFILL_CREDENTIALS_FILLED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Login - Auto Fill Credentials Filled"); + break; + case LOGIN_AUTOFILL_CREDENTIALS_UPDATED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Login - Auto Fill Credentials Updated"); + break; + case PERSON_REMOVED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("People Management - Removed Person"); + break; + case PERSON_UPDATED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("People Management - Updated Person"); + break; + case PUSH_AUTHENTICATION_APPROVED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Push Authentication - Approved"); + break; + case PUSH_AUTHENTICATION_EXPIRED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Push Authentication - Expired"); + break; + case PUSH_AUTHENTICATION_FAILED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Push Authentication - Failed"); + break; + case PUSH_AUTHENTICATION_IGNORED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Push Authentication - Ignored"); + break; + case NOTIFICATION_SETTINGS_LIST_OPENED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Notification Settings - Accessed List"); + break; + case NOTIFICATION_SETTINGS_STREAMS_OPENED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Notification Settings - Accessed Stream"); + break; + case NOTIFICATION_SETTINGS_DETAILS_OPENED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Notification Settings - Accessed Details"); + break; + case ME_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me Tab - Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_me_tab"); + break; + case ME_GRAVATAR_TAPPED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Tapped Gravatar"); + break; + case ME_GRAVATAR_TOOLTIP_TAPPED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Tapped Gravatar Tooltip"); + break; + case ME_GRAVATAR_PERMISSIONS_INTERRUPTED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Gravatar Permissions Interrupted"); + break; + case ME_GRAVATAR_PERMISSIONS_DENIED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Gravatar Permissions Denied"); + break; + case ME_GRAVATAR_PERMISSIONS_ACCEPTED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Gravatar Permissions Accepted"); + break; + case ME_GRAVATAR_SHOT_NEW: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Gravatar Shot New Photo"); + break; + case ME_GRAVATAR_GALLERY_PICKED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Gravatar Picked From Gallery"); + break; + case ME_GRAVATAR_CROPPED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Gravatar Cropped"); + break; + case ME_GRAVATAR_UPLOADED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Gravatar Uploaded"); + break; + case ME_GRAVATAR_UPLOAD_UNSUCCESSFUL: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Gravatar Upload Unsuccessful"); + break; + case ME_GRAVATAR_UPLOAD_EXCEPTION: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Me - Gravatar Upload Exception"); + break; + case MY_SITE_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("My Site - Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_my_site"); + break; + case THEMES_ACCESSED_THEMES_BROWSER: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Themes - Accessed Theme Browser"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_accessed_theme_browser"); + instructions.setCurrentDateForPeopleProperty("last_time_accessed_theme_browser"); + break; + case THEMES_ACCESSED_SEARCH: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Themes - Accessed Theme"); + break; + case THEMES_CHANGED_THEME: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Themes - Changed Theme"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_changed_theme"); + instructions.setCurrentDateForPeopleProperty("last_time_changed_theme"); + break; + case THEMES_PREVIEWED_SITE: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Themes - Previewed Theme for Site"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_previewed_a_theme"); + instructions.setCurrentDateForPeopleProperty("last_time_previewed_a_theme"); + break; + case THEMES_DEMO_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Themes - Demo Accessed"); + break; + case THEMES_CUSTOMIZE_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Themes - Customize Accessed"); + break; + case THEMES_SUPPORT_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Themes - Support Accessed"); + break; + case THEMES_DETAILS_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Themes - Details Accessed"); + break; + case ACCOUNT_SETTINGS_LANGUAGE_CHANGED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Account Settings - Changed Language"); + break; + case SITE_SETTINGS_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Settings - Site Settings Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_settings_accessed"); + break; + case SITE_SETTINGS_ACCESSED_MORE_SETTINGS: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Settings - More Settings Accessed"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_more_settings_accessed"); + break; + case SITE_SETTINGS_ADDED_LIST_ITEM: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Settings - Added List Item"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_list_items_added"); + break; + case SITE_SETTINGS_DELETED_LIST_ITEMS: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Settings - Site Deleted List Items"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_list_items_were_deleted"); + break; + case SITE_SETTINGS_HINT_TOAST_SHOWN: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Settings - Preference Hint Shown"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_preference_hints_viewed"); + break; + case SITE_SETTINGS_LEARN_MORE_CLICKED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Settings - Learn More Clicked"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_learn_more_clicked"); + break; + case SITE_SETTINGS_LEARN_MORE_LOADED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Settings - Learn More Loaded"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_learn_more_seen"); + break; + case SITE_SETTINGS_SAVED_REMOTELY: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Settings - Saved Remotely"); + instructions.setSuperPropertyAndPeoplePropertyToIncrement("number_of_times_settings_updated_remotely"); + break; + case SITE_SETTINGS_START_OVER_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Start Over Accessed"); + break; + case SITE_SETTINGS_START_OVER_CONTACT_SUPPORT_CLICKED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Start Over Contact Support Clicked"); + break; + case SITE_SETTINGS_EXPORT_SITE_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Export Site Accessed"); + break; + case SITE_SETTINGS_EXPORT_SITE_REQUESTED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Export Site Requested"); + break; + case SITE_SETTINGS_EXPORT_SITE_RESPONSE_OK: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Export Site Response OK"); + break; + case SITE_SETTINGS_EXPORT_SITE_RESPONSE_ERROR: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Export Site Response Error"); + break; + case SITE_SETTINGS_DELETE_SITE_ACCESSED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Delete Site Accessed"); + break; + case SITE_SETTINGS_DELETE_SITE_PURCHASES_REQUESTED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Delete Site Purchases Requested"); + break; + case SITE_SETTINGS_DELETE_SITE_PURCHASES_SHOWN: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Delete Site Purchases Shown"); + break; + case SITE_SETTINGS_DELETE_SITE_PURCHASES_SHOW_CLICKED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Delete Site Show Purchases Clicked"); + break; + case SITE_SETTINGS_DELETE_SITE_REQUESTED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Delete Site Requested"); + break; + case SITE_SETTINGS_DELETE_SITE_RESPONSE_OK: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Delete Site Response OK"); + break; + case SITE_SETTINGS_DELETE_SITE_RESPONSE_ERROR: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("Settings - Delete Site Response Error"); + break; + case ABTEST_START: + instructions = AnalyticsTrackerMixpanelInstructionsForStat.mixpanelInstructionsForEventName("AB Test - Started"); + break; + case TRAIN_TRACKS_RENDER: case TRAIN_TRACKS_INTERACT: + // Do nothing. These events are just for Tracks. + instructions = null; + break; + default: + instructions = null; + break; + } + return instructions; + } + + private void incrementPeopleProperty(String property) { + try { + mMixpanel.getPeople().increment(property, 1); + } catch (OutOfMemoryError outOfMemoryError) { + // ignore exception + } + } + + @SuppressLint("CommitPrefEdits") + private void incrementSuperProperty(String property) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext); + int propertyCount = preferences.getInt(property, 0); + propertyCount++; + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt(property, propertyCount); + editor.commit(); + + try { + JSONObject superProperties = mMixpanel.getSuperProperties(); + superProperties.put(property, propertyCount); + mMixpanel.registerSuperProperties(superProperties); + } catch (JSONException e) { + AppLog.e(AppLog.T.UTILS, e); + } + } + + private void flagSuperProperty(String property) { + try { + JSONObject superProperties = mMixpanel.getSuperProperties(); + superProperties.put(property, true); + mMixpanel.registerSuperProperties(superProperties); + } catch (JSONException e) { + AppLog.e(AppLog.T.UTILS, e); + } + } + + private void savePropertyValueForStat(String property, Object value, AnalyticsTracker.Stat stat) { + JSONObject properties = mAggregatedProperties.get(stat); + if (properties == null) { + properties = new JSONObject(); + mAggregatedProperties.put(stat, properties); + } + + try { + properties.put(property, value); + } catch (JSONException e) { + AppLog.e(AppLog.T.UTILS, e); + } + } + + private JSONObject propertiesForStat(AnalyticsTracker.Stat stat) { + return mAggregatedProperties.get(stat); + } + + private void removePropertiesForStat(AnalyticsTracker.Stat stat) { + mAggregatedProperties.remove(stat); + } + + private Object propertyForStat(String property, AnalyticsTracker.Stat stat) { + JSONObject properties = mAggregatedProperties.get(stat); + if (properties == null) { + return null; + } + + try { + return properties.get(property); + } catch (JSONException e) { + // We are okay with swallowing this exception as the next line will just return a null value + } + + return null; + } + + private void incrementProperty(String property, AnalyticsTracker.Stat stat) { + Object currentValueObj = propertyForStat(property, stat); + int currentValue = 1; + if (currentValueObj != null) { + currentValue = Integer.valueOf(currentValueObj.toString()); + currentValue++; + } + + savePropertyValueForStat(property, Integer.toString(currentValue), stat); + } + + + public void incrementSessionCount() { + // Tracking session count will help us isolate users who just installed the app + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext); + int sessionCount = preferences.getInt(SESSION_COUNT, 0); + sessionCount++; + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt(SESSION_COUNT, sessionCount); + editor.apply(); + } +} |