Coverage Summary for Class: ExportWorkLauncherImpl (com.vsevolodganin.clicktrack.export)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| ExportWorkLauncherImpl |
0%
(0/5)
|
0%
(0/4)
|
0%
(0/11)
|
0%
(0/56)
|
| ExportWorkLauncherImpl$launchExportToAudioFile$1 |
|
| ExportWorkLauncherImpl$MetroContributionToMainControllerScope |
|
| ExportWorkLauncherImpl$MetroContributionToMainControllerScope$BindsMirror |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/2)
|
| ExportWorkLauncherImpl$MetroFactory |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/18)
|
| ExportWorkLauncherImpl$MetroFactory$Companion |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/14)
|
| ExportWorkLauncherImpl$requestStoragePermission$2 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/15)
|
| Total |
0%
(0/9)
|
0%
(0/4)
|
0%
(0/15)
|
0%
(0/105)
|
package com.vsevolodganin.clicktrack.export
import android.Manifest
import android.os.Build
import androidx.work.ExistingWorkPolicy
import androidx.work.WorkManager
import com.vsevolodganin.clicktrack.di.component.MainControllerScope
import com.vsevolodganin.clicktrack.model.ClickTrackId
import com.vsevolodganin.clicktrack.utils.android.PermissionsHelper
import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@ContributesBinding(MainControllerScope::class)
@Inject
class ExportWorkLauncherImpl(
private val workManager: WorkManager,
private val permissionsHelper: PermissionsHelper,
) : ExportWorkLauncher {
override suspend fun launchExportToAudioFile(clickTrackId: ClickTrackId.Database) {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P && !requestStoragePermission()) {
return
}
workManager.enqueueUniqueWork(
clickTrackId.toUniqueWorkName(),
ExistingWorkPolicy.REPLACE,
ExportWorker.createWorkRequest(clickTrackId),
)
}
override fun stopExportToAudioFile(clickTrackId: ClickTrackId.Database) {
workManager.cancelUniqueWork(clickTrackId.toUniqueWorkName())
}
private suspend fun requestStoragePermission(): Boolean {
return withContext(Dispatchers.Main) {
permissionsHelper.requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)!!
}
}
private fun ClickTrackId.Database.toUniqueWorkName() = toString()
}