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()
 }