Change API of BugReporter (make it suspend)
This commit is contained in:
parent
b68830faf1
commit
30eebe0b2e
4 changed files with 284 additions and 302 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue