package com.automattic.simplenote.analytics; import android.content.Context; import android.text.TextUtils; import com.automattic.simplenote.BuildConfig; import com.google.android.gms.analytics.GoogleAnalytics; import com.google.android.gms.analytics.HitBuilders; import com.google.android.gms.analytics.Tracker; import java.util.Map; public class AnalyticsTrackerGoogleAnalytics implements AnalyticsTracker.Tracker { private Tracker mTracker; private Context mContext; public AnalyticsTrackerGoogleAnalytics(Context context) { mContext = context; } // Google Analytics tracker private synchronized Tracker getTracker() { if (mTracker == null) { GoogleAnalytics analytics = GoogleAnalytics.getInstance(mContext); mTracker = analytics.newTracker(BuildConfig.GOOGLE_ANALYTICS_ID); mTracker.enableAutoActivityTracking(true); mTracker.enableExceptionReporting(true); } return mTracker; } @Override public void track(AnalyticsTracker.Stat stat, String category, String label) { track(stat, category, label, null); } @Override public void track(AnalyticsTracker.Stat stat, String category, String label, Map<String, ?> properties) { if (getTracker() == null) { return; } String eventName; // convert some of the events for backwards compatibility with Google Analytics switch (stat) { case EDITOR_NOTE_CONTENT_SHARED: eventName = "shared_note"; break; case EDITOR_TAG_ADDED: eventName = "added_tag"; break; case EDITOR_TAG_REMOVED: eventName = "removed_tag"; break; case EDITOR_NOTE_PINNED: eventName = "pinned_note"; break; case EDITOR_NOTE_UNPINNED: eventName = "unpinned_note"; break; case EDITOR_NOTE_EDITED: eventName = "edited_note"; break; case LIST_NOTE_CREATED: eventName = "create_note"; break; case LIST_TAG_VIEWED: eventName = "viewed_notes_for_tag"; break; case LIST_NOTES_SEARCHED: eventName = "searched_notes"; break; case LIST_NOTE_DELETED: eventName = "deleted_note"; break; case EDITOR_NOTE_RESTORED: eventName = "restored_notes"; break; case LIST_TRASH_EMPTIED: eventName = "trash_emptied"; break; case LIST_NOTE_OPENED: eventName = "viewed_note"; break; case USER_ACCOUNT_CREATED: eventName = "new_account_created"; break; case USER_SIGNED_IN: eventName = "signed_in"; break; case LIST_TRASH_VIEWED: eventName = "viewed_trash"; break; case TAG_MENU_DELETED: eventName = "deleted_tag"; break; default: eventName = stat.name().toLowerCase(); } HitBuilders.EventBuilder eventBuilder = new HitBuilders.EventBuilder(); if (!TextUtils.isEmpty(category)) { eventBuilder.setCategory(category); } if (!TextUtils.isEmpty(label)) { eventBuilder.setLabel(label); } eventBuilder.setAction(eventName); getTracker().send(eventBuilder.build()); } @Override public void refreshMetadata(String username) { // noop } @Override public void flush() { // noop } }