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

Class Method, % Branch, % Line, % Instruction, %
DocumentMetadataHelperImpl 0% (0/4) 0% (0/14) 0% (0/18) 0% (0/175)
DocumentMetadataHelperImpl$Companion
Total 0% (0/4) 0% (0/14) 0% (0/18) 0% (0/175)


 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 me.tatarka.inject.annotations.Inject
 
 @Inject
 class DocumentMetadataHelperImpl(
     private val contentResolver: ContentResolver,
     private val logger: Logger,
 ) : DocumentMetadataHelper {
     override 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
         }
     }
 
     override fun hasReadPermission(uri: String): Boolean {
         return contentResolver.persistedUriPermissions.any { permission ->
             permission.uri.toString() == uri && permission.isReadPermission
         }
     }
 
     override 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"
     }
 }