package com.automattic.simplenote.analytics; import java.util.ArrayList; import java.util.List; import java.util.Map; public final class AnalyticsTracker { private static final List<Tracker> TRACKERS = new ArrayList<>(); public static String CATEGORY_NOTE = "note"; public static String CATEGORY_TAG = "tag"; public static String CATEGORY_USER = "user"; private AnalyticsTracker() { } public static void registerTracker(Tracker tracker) { if (tracker != null) { TRACKERS.add(tracker); } } public static void track(Stat stat, String category, String label) { for (Tracker tracker : TRACKERS) { tracker.track(stat, category, label, null); } } public static void track(Stat stat, String category, String label, Map<String, ?> properties) { for (Tracker tracker : TRACKERS) { tracker.track(stat, category, label, properties); } } public static void refreshMetadata(String username) { for (Tracker tracker : TRACKERS) { tracker.refreshMetadata(username); } } public static void flush() { for (Tracker tracker : TRACKERS) { tracker.flush(); } } public void track(Stat stat) { for (Tracker tracker : TRACKERS) { tracker.track(stat, null, null); } } public void track(Stat stat, Map<String, ?> properties) { for (Tracker tracker : TRACKERS) { tracker.track(stat, null, null, properties); } } @SuppressWarnings("unused") public enum Stat { EDITOR_NOTE_CREATED, EDITOR_NOTE_DELETED, EDITOR_NOTE_RESTORED, EDITOR_ACTIVITIES_ACCESSED, EDITOR_COLLABORATORS_ACCESSED, EDITOR_VERSIONS_ACCESSED, EDITOR_NOTE_PUBLISHED, EDITOR_NOTE_UNPUBLISHED, EDITOR_NOTE_PUBLISHED_URL_PRESSED, EDITOR_NOTE_CONTENT_SHARED, EDITOR_NOTE_EDITED, EDITOR_EMAIL_TAG_ADDED, EDITOR_EMAIL_TAG_REMOVED, EDITOR_TAG_ADDED, EDITOR_TAG_REMOVED, EDITOR_NOTE_PINNED, EDITOR_NOTE_UNPINNED, LIST_NOTE_CREATED, LIST_NOTE_DELETED, LIST_TRASH_EMPTIED, LIST_NOTES_SEARCHED, LIST_TAG_VIEWED, LIST_NOTE_OPENED, LIST_TRASH_VIEWED, SETTINGS_PINLOCK_ENABLED, SETTINGS_LIST_CONDENSED_ENABLED, SETTINGS_ALPHABETICAL_SORT_ENABLED, SETTINGS_MARKDOWN_ENABLED, SETTINGS_THEME_UPDATED, SIDEBAR_SIDEBAR_PANNED, SIDEBAR_BUTTON_PRESSED, TAG_ROW_RENAMED, TAG_ROW_DELETED, TAG_CELL_PRESSED, TAG_MENU_RENAMED, TAG_MENU_DELETED, TAG_EDITOR_ACCESSED, RATINGS_SAW_PROMPT, RATINGS_RATED_APP, RATINGS_FEEDBACK_SCREEN_OPENED, RATINGS_DECLINED_TO_RATE_APP, RATINGS_LIKED_APP, RATINGS_DISLIKED_APP, RATINGS_FEEDBACK_SENT, RATINGS_FEEDBACK_CANCELED, ONE_PASSWORD_FAILED, ONE_PASSWORD_LOGIN, ONE_PASSWORD_SIGNUP, USER_ACCOUNT_CREATED, USER_SIGNED_IN, USER_SIGNED_OUT, APPLICATION_OPENED, APPLICATION_CLOSED } public interface Tracker { void track(Stat stat, String category, String label); void track(Stat stat, String category, String label, Map<String, ?> properties); void refreshMetadata(String username); void flush(); } }