| 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); |
| } |
| } |
| } |