aboutsummaryrefslogtreecommitdiff
path: root/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java
diff options
context:
space:
mode:
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.java271
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);
+ }
+ }
+}