99import org .greenrobot .eventbus .Subscribe ;
1010import org .greenrobot .eventbus .ThreadMode ;
1111import org .wordpress .android .WordPress ;
12+ import org .wordpress .android .analytics .AnalyticsTracker ;
1213import org .wordpress .android .fluxc .Dispatcher ;
1314import org .wordpress .android .fluxc .generated .MediaActionBuilder ;
1415import org .wordpress .android .fluxc .model .MediaModel ;
1819import org .wordpress .android .fluxc .store .MediaStore .MediaPayload ;
1920import org .wordpress .android .fluxc .store .MediaStore .OnMediaUploaded ;
2021import org .wordpress .android .models .MediaUploadState ;
22+ import org .wordpress .android .util .AnalyticsUtils ;
2123import org .wordpress .android .util .AppLog ;
2224import org .wordpress .android .util .StringUtils ;
2325
2426import java .util .ArrayList ;
27+ import java .util .HashMap ;
2528import java .util .List ;
29+ import java .util .Map ;
2630
2731import javax .inject .Inject ;
2832
@@ -111,11 +115,13 @@ private void handleOnMediaUploadedSuccess(@NonNull OnMediaUploaded event) {
111115 if (event .canceled ) {
112116 // Upload canceled
113117 AppLog .i (AppLog .T .MEDIA , "Upload successfully canceled." );
118+ trackUploadMediaEvents (AnalyticsTracker .Stat .MEDIA_UPLOAD_CANCELED , mCurrentUpload , null );
114119 completeCurrentUpload ();
115120 uploadNextInQueue ();
116121 } else if (event .completed ) {
117122 // Upload completed
118123 AppLog .i (AppLog .T .MEDIA , "Upload completed - localId=" + event .media .getId () + " title=" + event .media .getTitle ());
124+ trackUploadMediaEvents (AnalyticsTracker .Stat .MEDIA_UPLOAD_SUCCESS , mCurrentUpload , null );
119125 mCurrentUpload .setMediaId (event .media .getMediaId ());
120126 completeCurrentUpload ();
121127 uploadNextInQueue ();
@@ -134,6 +140,9 @@ private void handleOnMediaUploadedError(@NonNull OnMediaUploaded event) {
134140 completeCurrentUpload ();
135141 // TODO: check whether we need to broadcast the error or maybe it is enough to register for FluxC events
136142 // event.media, event.error
143+ Map <String , Object > properties = new HashMap <>();
144+ properties .put ("error_type" , event .error .type .name ());
145+ trackUploadMediaEvents (AnalyticsTracker .Stat .MEDIA_UPLOAD_ERROR , mCurrentUpload , properties );
137146 uploadNextInQueue ();
138147 }
139148
@@ -160,6 +169,7 @@ private void uploadNextInQueue() {
160169 }
161170
162171 dispatchUploadAction (mCurrentUpload );
172+ trackUploadMediaEvents (AnalyticsTracker .Stat .MEDIA_UPLOAD_STARTED , mCurrentUpload , null );
163173 }
164174
165175 private void completeCurrentUpload () {
@@ -272,4 +282,21 @@ public void onMediaUploaded(OnMediaUploaded event) {
272282 handleOnMediaUploadedSuccess (event );
273283 }
274284 }
285+
286+ /**
287+ * Analytics about media being uploaded
288+ *
289+ * @param media The media being uploaded
290+ */
291+ private void trackUploadMediaEvents (AnalyticsTracker .Stat stat , MediaModel media , Map <String , Object > properties ) {
292+ if (media == null ) {
293+ AppLog .e (AppLog .T .MEDIA , "Cannot track media upload service events if the original media is null!!" );
294+ return ;
295+ }
296+ Map <String , Object > mediaProperties = AnalyticsUtils .getMediaProperties (this , media .isVideo (), null , media .getFilePath ());
297+ if (properties != null ) {
298+ mediaProperties .putAll (properties );
299+ }
300+ AnalyticsTracker .track (stat , mediaProperties );
301+ }
275302}
0 commit comments