diff options
Diffstat (limited to 'libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java')
-rw-r--r-- | libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java new file mode 100644 index 000000000..c160f47a6 --- /dev/null +++ b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java @@ -0,0 +1,271 @@ +package org.wordpress.android.analytics; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public final class AnalyticsTracker { + private static boolean mHasUserOptedOut; + + public static final String READER_DETAIL_TYPE_KEY = "post_detail_type"; + public static final String READER_DETAIL_TYPE_NORMAL = "normal"; + public static final String READER_DETAIL_TYPE_BLOG_PREVIEW = "preview-blog"; + public static final String READER_DETAIL_TYPE_TAG_PREVIEW = "preview-tag"; + + public enum Stat { + APPLICATION_OPENED, + APPLICATION_CLOSED, + APPLICATION_INSTALLED, + APPLICATION_UPGRADED, + READER_ACCESSED, + READER_ARTICLE_COMMENTED_ON, + READER_ARTICLE_LIKED, + READER_ARTICLE_OPENED, + READER_ARTICLE_UNLIKED, + READER_BLOG_BLOCKED, + READER_BLOG_FOLLOWED, + READER_BLOG_PREVIEWED, + READER_BLOG_UNFOLLOWED, + READER_DISCOVER_VIEWED, + READER_INFINITE_SCROLL, + READER_LIST_FOLLOWED, + READER_LIST_LOADED, + READER_LIST_PREVIEWED, + READER_LIST_UNFOLLOWED, + READER_TAG_FOLLOWED, + READER_TAG_LOADED, + READER_TAG_PREVIEWED, + READER_TAG_UNFOLLOWED, + READER_SEARCH_LOADED, + READER_SEARCH_PERFORMED, + READER_SEARCH_RESULT_TAPPED, + READER_RELATED_POST_CLICKED, + STATS_ACCESSED, + STATS_INSIGHTS_ACCESSED, + STATS_PERIOD_DAYS_ACCESSED, + STATS_PERIOD_WEEKS_ACCESSED, + STATS_PERIOD_MONTHS_ACCESSED, + STATS_PERIOD_YEARS_ACCESSED, + STATS_VIEW_ALL_ACCESSED, + STATS_SINGLE_POST_ACCESSED, + STATS_TAPPED_BAR_CHART, + STATS_SCROLLED_TO_BOTTOM, + STATS_WIDGET_ADDED, + STATS_WIDGET_REMOVED, + STATS_WIDGET_TAPPED, + EDITOR_CREATED_POST, + EDITOR_ADDED_PHOTO_VIA_LOCAL_LIBRARY, + EDITOR_ADDED_VIDEO_VIA_LOCAL_LIBRARY, + EDITOR_ADDED_PHOTO_VIA_WP_MEDIA_LIBRARY, + EDITOR_ADDED_VIDEO_VIA_WP_MEDIA_LIBRARY, + EDITOR_UPDATED_POST, + EDITOR_SCHEDULED_POST, + EDITOR_CLOSED, + EDITOR_PUBLISHED_POST, + EDITOR_SAVED_DRAFT, + EDITOR_DISCARDED_CHANGES, + EDITOR_EDITED_IMAGE, // Visual editor only + EDITOR_ENABLED_NEW_VERSION, // Visual editor only + EDITOR_TOGGLED_OFF, // Visual editor only + EDITOR_TOGGLED_ON, // Visual editor only + EDITOR_UPLOAD_MEDIA_FAILED, // Visual editor only + EDITOR_UPLOAD_MEDIA_RETRIED, // Visual editor only + EDITOR_TAPPED_BLOCKQUOTE, + EDITOR_TAPPED_BOLD, + EDITOR_TAPPED_HTML, // Visual editor only + EDITOR_TAPPED_IMAGE, + EDITOR_TAPPED_ITALIC, + EDITOR_TAPPED_LINK, + EDITOR_TAPPED_MORE, + EDITOR_TAPPED_STRIKETHROUGH, + EDITOR_TAPPED_UNDERLINE, + EDITOR_TAPPED_ORDERED_LIST, // Visual editor only + EDITOR_TAPPED_UNLINK, // Visual editor only + EDITOR_TAPPED_UNORDERED_LIST, // Visual editor only + ME_ACCESSED, + ME_GRAVATAR_TAPPED, + ME_GRAVATAR_TOOLTIP_TAPPED, + ME_GRAVATAR_PERMISSIONS_INTERRUPTED, + ME_GRAVATAR_PERMISSIONS_DENIED, + ME_GRAVATAR_PERMISSIONS_ACCEPTED, + ME_GRAVATAR_SHOT_NEW, + ME_GRAVATAR_GALLERY_PICKED, + ME_GRAVATAR_CROPPED, + ME_GRAVATAR_UPLOADED, + ME_GRAVATAR_UPLOAD_UNSUCCESSFUL, + ME_GRAVATAR_UPLOAD_EXCEPTION, + MY_SITE_ACCESSED, + NOTIFICATIONS_ACCESSED, + NOTIFICATIONS_OPENED_NOTIFICATION_DETAILS, + NOTIFICATION_REPLIED_TO, + NOTIFICATION_APPROVED, + NOTIFICATION_UNAPPROVED, + NOTIFICATION_LIKED, + NOTIFICATION_UNLIKED, + NOTIFICATION_TRASHED, + NOTIFICATION_FLAGGED_AS_SPAM, + OPENED_POSTS, + OPENED_PAGES, + OPENED_COMMENTS, + OPENED_VIEW_SITE, + OPENED_VIEW_ADMIN, + OPENED_MEDIA_LIBRARY, + OPENED_BLOG_SETTINGS, + OPENED_ACCOUNT_SETTINGS, + OPENED_APP_SETTINGS, + OPENED_MY_PROFILE, + OPENED_PEOPLE_MANAGEMENT, + OPENED_PERSON, + CREATED_ACCOUNT, + CREATED_SITE, + ACCOUNT_LOGOUT, + SHARED_ITEM, + ADDED_SELF_HOSTED_SITE, + SIGNED_IN, + SIGNED_INTO_JETPACK, + PERFORMED_JETPACK_SIGN_IN_FROM_STATS_SCREEN, + STATS_SELECTED_INSTALL_JETPACK, + STATS_SELECTED_CONNECT_JETPACK, + PUSH_NOTIFICATION_RECEIVED, + PUSH_NOTIFICATION_TAPPED, // Same of opened + SUPPORT_OPENED_HELPSHIFT_SCREEN, + SUPPORT_SENT_REPLY_TO_SUPPORT_MESSAGE, + LOGIN_MAGIC_LINK_EXITED, + LOGIN_MAGIC_LINK_FAILED, + LOGIN_MAGIC_LINK_OPENED, + LOGIN_MAGIC_LINK_REQUESTED, + LOGIN_MAGIC_LINK_SUCCEEDED, + LOGIN_FAILED, + LOGIN_FAILED_TO_GUESS_XMLRPC, + LOGIN_INSERTED_INVALID_URL, + LOGIN_AUTOFILL_CREDENTIALS_FILLED, + LOGIN_AUTOFILL_CREDENTIALS_UPDATED, + PERSON_REMOVED, + PERSON_UPDATED, + PUSH_AUTHENTICATION_APPROVED, + PUSH_AUTHENTICATION_EXPIRED, + PUSH_AUTHENTICATION_FAILED, + PUSH_AUTHENTICATION_IGNORED, + NOTIFICATION_SETTINGS_LIST_OPENED, + NOTIFICATION_SETTINGS_STREAMS_OPENED, + NOTIFICATION_SETTINGS_DETAILS_OPENED, + THEMES_ACCESSED_THEMES_BROWSER, + THEMES_ACCESSED_SEARCH, + THEMES_CHANGED_THEME, + THEMES_PREVIEWED_SITE, + THEMES_DEMO_ACCESSED, + THEMES_CUSTOMIZE_ACCESSED, + THEMES_SUPPORT_ACCESSED, + THEMES_DETAILS_ACCESSED, + ACCOUNT_SETTINGS_LANGUAGE_CHANGED, + SITE_SETTINGS_ACCESSED, + SITE_SETTINGS_ACCESSED_MORE_SETTINGS, + SITE_SETTINGS_LEARN_MORE_CLICKED, + SITE_SETTINGS_LEARN_MORE_LOADED, + SITE_SETTINGS_ADDED_LIST_ITEM, + SITE_SETTINGS_DELETED_LIST_ITEMS, + SITE_SETTINGS_SAVED_REMOTELY, + SITE_SETTINGS_HINT_TOAST_SHOWN, + SITE_SETTINGS_START_OVER_ACCESSED, + SITE_SETTINGS_START_OVER_CONTACT_SUPPORT_CLICKED, + SITE_SETTINGS_EXPORT_SITE_ACCESSED, + SITE_SETTINGS_EXPORT_SITE_REQUESTED, + SITE_SETTINGS_EXPORT_SITE_RESPONSE_OK, + SITE_SETTINGS_EXPORT_SITE_RESPONSE_ERROR, + SITE_SETTINGS_DELETE_SITE_ACCESSED, + SITE_SETTINGS_DELETE_SITE_PURCHASES_REQUESTED, + SITE_SETTINGS_DELETE_SITE_PURCHASES_SHOWN, + SITE_SETTINGS_DELETE_SITE_PURCHASES_SHOW_CLICKED, + SITE_SETTINGS_DELETE_SITE_REQUESTED, + SITE_SETTINGS_DELETE_SITE_RESPONSE_OK, + SITE_SETTINGS_DELETE_SITE_RESPONSE_ERROR, + ABTEST_START, + TRAIN_TRACKS_RENDER, + TRAIN_TRACKS_INTERACT + } + + private static final List<Tracker> TRACKERS = new ArrayList<>(); + + private AnalyticsTracker() { + } + + public static void init(Context context) { + loadPrefHasUserOptedOut(context); + } + + public static void loadPrefHasUserOptedOut(Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean hasUserOptedOut = !prefs.getBoolean("wp_pref_send_usage_stats", true); + if (hasUserOptedOut != mHasUserOptedOut) { + mHasUserOptedOut = hasUserOptedOut; + } + } + + public static void registerTracker(Tracker tracker) { + if (tracker != null) { + TRACKERS.add(tracker); + } + } + + public static void track(Stat stat) { + if (mHasUserOptedOut) { + return; + } + for (Tracker tracker : TRACKERS) { + tracker.track(stat); + } + } + + public static void track(Stat stat, Map<String, ?> properties) { + if (mHasUserOptedOut) { + return; + } + for (Tracker tracker : TRACKERS) { + tracker.track(stat, properties); + } + } + + + public static void flush() { + if (mHasUserOptedOut) { + return; + } + for (Tracker tracker : TRACKERS) { + tracker.flush(); + } + } + + public static void endSession(boolean force) { + if (mHasUserOptedOut && !force) { + return; + } + for (Tracker tracker : TRACKERS) { + tracker.endSession(); + } + } + + public static void registerPushNotificationToken(String regId) { + if (mHasUserOptedOut) { + return; + } + for (Tracker tracker : TRACKERS) { + tracker.registerPushNotificationToken(regId); + } + } + + public static void clearAllData() { + for (Tracker tracker : TRACKERS) { + tracker.clearAllData(); + } + } + + public static void refreshMetadata(AnalyticsMetadata metadata) { + for (Tracker tracker : TRACKERS) { + tracker.refreshMetadata(metadata); + } + } +} |