Coverage Summary for Class: DocumentMetadataHelper (com.vsevolodganin.clicktrack.soundlibrary)

Class Method, % Branch, % Line, % Instruction, %
DocumentMetadataHelper 0% (0/4) 0% (0/14) 0% (0/18) 0% (0/175)
DocumentMetadataHelper$Companion
DocumentMetadataHelper$MetroFactory 0% (0/1) 0% (0/1) 0% (0/18)
DocumentMetadataHelper$MetroFactory$Companion 0% (0/1) 0% (0/1) 0% (0/14)
Total 0% (0/6) 0% (0/14) 0% (0/20) 0% (0/207)


 package com.vsevolodganin.clicktrack.soundlibrary
 
 import android.content.ContentResolver
 import android.net.Uri
 import android.provider.OpenableColumns
 import com.vsevolodganin.clicktrack.utils.log.Logger
 import dev.zacsweers.metro.Inject
 
 @Inject
 actual class DocumentMetadataHelper(
     private val contentResolver: ContentResolver,
     private val logger: Logger,
 ) {
     actual fun isAccessible(uri: String): Boolean {
         return try {
             contentResolver.query(Uri.parse(uri), null, null, null, null, null)?.use {
                 it.moveToFirst()
             } ?: false
         } catch (e: SecurityException) {
             false
         }
     }
 
     actual fun hasReadPermission(uri: String): Boolean {
         return contentResolver.persistedUriPermissions.any { permission ->
             permission.uri.toString() == uri && permission.isReadPermission
         }
     }
 
     actual fun getDisplayName(uri: String): String? {
         val parsedUri = Uri.parse(uri)
 
         return try {
             contentResolver.query(parsedUri, null, null, null, null, null)?.use { cursor ->
                 if (cursor.moveToFirst()) {
                     val columnIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME).takeIf { it >= 0 } ?: return null
                     return cursor.getString(columnIndex)
                 } else {
                     null
                 }
             }
         } catch (e: SecurityException) {
             logger.logError(TAG, "Failed to get display name for URI: $uri", e)
             null
         }
     }
 
     private companion object {
         const val TAG = "DocumentMetadataHelperImpl"
     }
 }