diff --git a/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/CrashlyticsController.java b/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/CrashlyticsController.java index 0edbb23f0ff..e3042ca9702 100644 --- a/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/CrashlyticsController.java +++ b/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/CrashlyticsController.java @@ -435,9 +435,10 @@ public Task then(@Nullable AppSettingsData appSettingsData) // Data collection is enabled, so it's safe to send the report. boolean dataCollectionToken = true; sendSessionReports(appSettingsData, dataCollectionToken); - reportingCoordinator.sendReports( - executor, DataTransportState.getState(appSettingsData)); - return recordFatalFirebaseEventTask; + return Tasks.whenAll( + reportingCoordinator.sendReports( + executor, DataTransportState.getState(appSettingsData)), + recordFatalFirebaseEventTask); } }); } diff --git a/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/SessionReportingCoordinator.java b/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/SessionReportingCoordinator.java index 3ac433929c2..baeaae7c8a7 100644 --- a/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/SessionReportingCoordinator.java +++ b/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/SessionReportingCoordinator.java @@ -18,6 +18,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.android.gms.tasks.Task; +import com.google.android.gms.tasks.Tasks; import com.google.firebase.crashlytics.internal.Logger; import com.google.firebase.crashlytics.internal.log.LogFileManager; import com.google.firebase.crashlytics.internal.model.CrashlyticsReport; @@ -170,16 +171,17 @@ public void removeAllReports() { * sent. * @param dataTransportState used to determine whether to send the report before cleaning it up. */ - public void sendReports( + Task sendReports( @NonNull Executor reportSendCompleteExecutor, @NonNull DataTransportState dataTransportState) { if (dataTransportState == DataTransportState.NONE) { Logger.getLogger().d("Send via DataTransport disabled. Removing DataTransport reports."); reportPersistence.deleteAllReports(); - return; + return Tasks.forResult(null); } final List reportsToSend = reportPersistence.loadFinalizedReports(); + final List> sendTasks = new ArrayList<>(); for (CrashlyticsReportWithSessionId reportToSend : reportsToSend) { if (reportToSend.getReport().getType() == CrashlyticsReport.Type.NATIVE && dataTransportState != DataTransportState.ALL) { @@ -189,10 +191,12 @@ public void sendReports( continue; } - reportsSender - .sendReport(reportToSend) - .continueWith(reportSendCompleteExecutor, this::onReportSendComplete); + sendTasks.add( + reportsSender + .sendReport(reportToSend) + .continueWith(reportSendCompleteExecutor, this::onReportSendComplete)); } + return Tasks.whenAll(sendTasks); } private void persistEvent(