diff --git a/WordPress/src/main/java/org/wordpress/android/ui/media/services/MediaUploadService.java b/WordPress/src/main/java/org/wordpress/android/ui/media/services/MediaUploadService.java index 7d5d831ef9e0..18c60c3feb4b 100755 --- a/WordPress/src/main/java/org/wordpress/android/ui/media/services/MediaUploadService.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/media/services/MediaUploadService.java @@ -9,6 +9,7 @@ import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import org.wordpress.android.WordPress; +import org.wordpress.android.analytics.AnalyticsTracker; import org.wordpress.android.fluxc.Dispatcher; import org.wordpress.android.fluxc.generated.MediaActionBuilder; import org.wordpress.android.fluxc.model.MediaModel; @@ -18,11 +19,14 @@ import org.wordpress.android.fluxc.store.MediaStore.MediaPayload; import org.wordpress.android.fluxc.store.MediaStore.OnMediaUploaded; import org.wordpress.android.models.MediaUploadState; +import org.wordpress.android.util.AnalyticsUtils; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.StringUtils; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.inject.Inject; @@ -111,11 +115,13 @@ private void handleOnMediaUploadedSuccess(@NonNull OnMediaUploaded event) { if (event.canceled) { // Upload canceled AppLog.i(AppLog.T.MEDIA, "Upload successfully canceled."); + trackUploadMediaEvents(AnalyticsTracker.Stat.MEDIA_UPLOAD_CANCELED, mCurrentUpload, null); completeCurrentUpload(); uploadNextInQueue(); } else if (event.completed) { // Upload completed AppLog.i(AppLog.T.MEDIA, "Upload completed - localId=" + event.media.getId() + " title=" + event.media.getTitle()); + trackUploadMediaEvents(AnalyticsTracker.Stat.MEDIA_UPLOAD_SUCCESS, mCurrentUpload, null); mCurrentUpload.setMediaId(event.media.getMediaId()); completeCurrentUpload(); uploadNextInQueue(); @@ -134,6 +140,9 @@ private void handleOnMediaUploadedError(@NonNull OnMediaUploaded event) { completeCurrentUpload(); // TODO: check whether we need to broadcast the error or maybe it is enough to register for FluxC events // event.media, event.error + Map properties = new HashMap<>(); + properties.put("error_type", event.error.type.name()); + trackUploadMediaEvents(AnalyticsTracker.Stat.MEDIA_UPLOAD_ERROR, mCurrentUpload, properties); uploadNextInQueue(); } @@ -160,6 +169,7 @@ private void uploadNextInQueue() { } dispatchUploadAction(mCurrentUpload); + trackUploadMediaEvents(AnalyticsTracker.Stat.MEDIA_UPLOAD_STARTED, mCurrentUpload, null); } private void completeCurrentUpload() { @@ -272,4 +282,21 @@ public void onMediaUploaded(OnMediaUploaded event) { handleOnMediaUploadedSuccess(event); } } + + /** + * Analytics about media being uploaded + * + * @param media The media being uploaded + */ + private void trackUploadMediaEvents(AnalyticsTracker.Stat stat, MediaModel media, Map properties) { + if (media == null) { + AppLog.e(AppLog.T.MEDIA, "Cannot track media upload service events if the original media is null!!"); + return; + } + Map mediaProperties = AnalyticsUtils.getMediaProperties(this, media.isVideo(), null, media.getFilePath()); + if (properties != null) { + mediaProperties.putAll(properties); + } + AnalyticsTracker.track(stat, mediaProperties); + } } \ No newline at end of file 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 index 24d4babdb882..cd0afab10ba0 100644 --- 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 @@ -229,6 +229,10 @@ public enum Stat { DEEP_LINKED, DEEP_LINKED_FALLBACK, DEEP_LINK_NOT_DEFAULT_HANDLER, + MEDIA_UPLOAD_STARTED, + MEDIA_UPLOAD_ERROR, + MEDIA_UPLOAD_SUCCESS, + MEDIA_UPLOAD_CANCELED, } private static final List TRACKERS = new ArrayList<>(); diff --git a/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerMixpanel.java b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerMixpanel.java index e8499bdf2107..221e90dffdd2 100644 --- a/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerMixpanel.java +++ b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerMixpanel.java @@ -1274,6 +1274,22 @@ private AnalyticsTrackerMixpanelInstructionsForStat instructionsForStat( instructions = AnalyticsTrackerMixpanelInstructionsForStat. mixpanelInstructionsForEventName("Media Library - Added Video"); break; + case MEDIA_UPLOAD_STARTED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Media Service - Upload Started"); + break; + case MEDIA_UPLOAD_ERROR: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Media Service - Upload Error"); + break; + case MEDIA_UPLOAD_SUCCESS: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Media Service - Response OK"); + break; + case MEDIA_UPLOAD_CANCELED: + instructions = AnalyticsTrackerMixpanelInstructionsForStat. + mixpanelInstructionsForEventName("Media Service - Upload Canceled"); + break; default: instructions = null; break; diff --git a/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java index 552f92393dee..ab718b4f4b2e 100644 --- a/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java +++ b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java @@ -660,6 +660,14 @@ public static String getEventNameForStat(AnalyticsTracker.Stat stat) { return "media_library_photo_added"; case MEDIA_LIBRARY_ADDED_VIDEO: return "media_library_video_added"; + case MEDIA_UPLOAD_STARTED: + return "media_service_upload_started"; + case MEDIA_UPLOAD_ERROR: + return "media_service_upload_response_error"; + case MEDIA_UPLOAD_SUCCESS: + return "media_service_upload_response_ok"; + case MEDIA_UPLOAD_CANCELED: + return "media_service_upload_canceled"; default: return null; }