Change API of BugReporter (make it suspend)

This commit is contained in:
Benoit Marty 2023-03-16 15:46:52 +01:00
parent b68830faf1
commit 30eebe0b2e
4 changed files with 284 additions and 302 deletions

View file

@ -16,15 +16,10 @@
package io.element.android.features.rageshake.api.reporter package io.element.android.features.rageshake.api.reporter
import io.element.android.features.rageshake.api.reporter.BugReporterListener
import io.element.android.features.rageshake.api.reporter.ReportType
import kotlinx.coroutines.CoroutineScope
interface BugReporter { interface BugReporter {
/** /**
* Send a bug report. * Send a bug report.
* *
* @param coroutineScope The coroutine scope
* @param reportType The report type (bug, suggestion, feedback) * @param reportType The report type (bug, suggestion, feedback)
* @param withDevicesLogs true to include the device log * @param withDevicesLogs true to include the device log
* @param withCrashLogs true to include the crash logs * @param withCrashLogs true to include the crash logs
@ -36,8 +31,7 @@ interface BugReporter {
* @param customFields fields which will be sent with the report * @param customFields fields which will be sent with the report
* @param listener the listener * @param listener the listener
*/ */
fun sendBugReport( suspend fun sendBugReport(
coroutineScope: CoroutineScope,
reportType: ReportType, reportType: ReportType,
withDevicesLogs: Boolean, withDevicesLogs: Boolean,
withCrashLogs: Boolean, withCrashLogs: Boolean,

View file

@ -132,7 +132,6 @@ class BugReportPresenter @Inject constructor(
listener: BugReporterListener, listener: BugReporterListener,
) = launch { ) = launch {
bugReporter.sendBugReport( bugReporter.sendBugReport(
coroutineScope = this,
reportType = ReportType.BUG_REPORT, reportType = ReportType.BUG_REPORT,
withDevicesLogs = formState.sendLogs, withDevicesLogs = formState.sendLogs,
withCrashLogs = hasCrashLogs && formState.sendCrashLogs, withCrashLogs = hasCrashLogs && formState.sendCrashLogs,

View file

@ -21,13 +21,13 @@ import android.os.Build
import androidx.core.net.toFile import androidx.core.net.toFile
import androidx.core.net.toUri import androidx.core.net.toUri
import com.squareup.anvil.annotations.ContributesBinding import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.features.rageshake.api.crash.CrashDataStore
import io.element.android.features.rageshake.api.reporter.BugReporter import io.element.android.features.rageshake.api.reporter.BugReporter
import io.element.android.features.rageshake.api.reporter.BugReporterListener import io.element.android.features.rageshake.api.reporter.BugReporterListener
import io.element.android.features.rageshake.api.reporter.ReportType import io.element.android.features.rageshake.api.reporter.ReportType
import io.element.android.features.rageshake.impl.R
import io.element.android.features.rageshake.api.crash.CrashDataStore
import io.element.android.features.rageshake.impl.logs.VectorFileLogger
import io.element.android.features.rageshake.api.screenshot.ScreenshotHolder import io.element.android.features.rageshake.api.screenshot.ScreenshotHolder
import io.element.android.features.rageshake.impl.R
import io.element.android.features.rageshake.impl.logs.VectorFileLogger
import io.element.android.libraries.androidutils.file.compressFile import io.element.android.libraries.androidutils.file.compressFile
import io.element.android.libraries.androidutils.file.safeDelete import io.element.android.libraries.androidutils.file.safeDelete
import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.CoroutineDispatchers
@ -35,9 +35,7 @@ import io.element.android.libraries.core.extensions.toOnOff
import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.core.mimetype.MimeTypes
import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.AppScope
import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.di.ApplicationContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import okhttp3.Call import okhttp3.Call
import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MediaType.Companion.toMediaTypeOrNull
@ -116,7 +114,6 @@ class DefaultBugReporter @Inject constructor(
/** /**
* Send a bug report. * Send a bug report.
* *
* @param coroutineScope The coroutine scope
* @param reportType The report type (bug, suggestion, feedback) * @param reportType The report type (bug, suggestion, feedback)
* @param withDevicesLogs true to include the device log * @param withDevicesLogs true to include the device log
* @param withCrashLogs true to include the crash logs * @param withCrashLogs true to include the crash logs
@ -128,8 +125,7 @@ class DefaultBugReporter @Inject constructor(
* @param customFields fields which will be sent with the report * @param customFields fields which will be sent with the report
* @param listener the listener * @param listener the listener
*/ */
override fun sendBugReport( override suspend fun sendBugReport(
coroutineScope: CoroutineScope,
reportType: ReportType, reportType: ReportType,
withDevicesLogs: Boolean, withDevicesLogs: Boolean,
withCrashLogs: Boolean, withCrashLogs: Boolean,
@ -144,7 +140,6 @@ class DefaultBugReporter @Inject constructor(
// enumerate files to delete // enumerate files to delete
val mBugReportFiles: MutableList<File> = ArrayList() val mBugReportFiles: MutableList<File> = ArrayList()
coroutineScope.launch {
var serverError: String? = null var serverError: String? = null
var reportURL: String? = null var reportURL: String? = null
withContext(coroutineDispatchers.io) { withContext(coroutineDispatchers.io) {
@ -423,7 +418,6 @@ class DefaultBugReporter @Inject constructor(
} }
} }
} }
}
/** /**
* Send a bug report either with email or with Vector. * Send a bug report either with email or with Vector.

View file

@ -20,13 +20,10 @@ import io.element.android.features.rageshake.api.reporter.BugReporter
import io.element.android.features.rageshake.api.reporter.BugReporterListener import io.element.android.features.rageshake.api.reporter.BugReporterListener
import io.element.android.features.rageshake.api.reporter.ReportType import io.element.android.features.rageshake.api.reporter.ReportType
import io.element.android.libraries.matrix.test.A_FAILURE_REASON import io.element.android.libraries.matrix.test.A_FAILURE_REASON
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
class FakeBugReporter(val mode: FakeBugReporterMode = FakeBugReporterMode.Success) : BugReporter { class FakeBugReporter(val mode: FakeBugReporterMode = FakeBugReporterMode.Success) : BugReporter {
override fun sendBugReport( override suspend fun sendBugReport(
coroutineScope: CoroutineScope,
reportType: ReportType, reportType: ReportType,
withDevicesLogs: Boolean, withDevicesLogs: Boolean,
withCrashLogs: Boolean, withCrashLogs: Boolean,
@ -38,7 +35,6 @@ class FakeBugReporter(val mode: FakeBugReporterMode = FakeBugReporterMode.Succes
customFields: Map<String, String>?, customFields: Map<String, String>?,
listener: BugReporterListener?, listener: BugReporterListener?,
) { ) {
coroutineScope.launch {
delay(100) delay(100)
listener?.onProgress(0) listener?.onProgress(0)
delay(100) delay(100)
@ -48,11 +44,11 @@ class FakeBugReporter(val mode: FakeBugReporterMode = FakeBugReporterMode.Succes
FakeBugReporterMode.Success -> Unit FakeBugReporterMode.Success -> Unit
FakeBugReporterMode.Failure -> { FakeBugReporterMode.Failure -> {
listener?.onUploadFailed(A_FAILURE_REASON) listener?.onUploadFailed(A_FAILURE_REASON)
return@launch return
} }
FakeBugReporterMode.Cancel -> { FakeBugReporterMode.Cancel -> {
listener?.onUploadCancelled() listener?.onUploadCancelled()
return@launch return
} }
} }
listener?.onProgress(100) listener?.onProgress(100)
@ -60,7 +56,6 @@ class FakeBugReporter(val mode: FakeBugReporterMode = FakeBugReporterMode.Succes
listener?.onUploadSucceed(null) listener?.onUploadSucceed(null)
} }
} }
}
enum class FakeBugReporterMode { enum class FakeBugReporterMode {
Success, Success,