blob: c160f47a65014fb2a319d9c9e24415ca02fef6a5 [file] [log] [blame]
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);
}
}
}