Coverage Summary for Class: PermissionManagerImpl (cloud.mindbox.mobile_sdk.inapp.data.managers)

Class Class, % Method, % Branch, % Line, % Instruction, %
PermissionManagerImpl 0% (0/1) 0% (0/7) 0% (0/32) 0% (0/52) 0% (0/308)


 package cloud.mindbox.mobile_sdk.inapp.data.managers
 
 import android.Manifest
 import android.content.Context
 import android.content.pm.PackageManager
 import android.os.Build
 import androidx.core.content.ContextCompat
 import androidx.core.app.NotificationManagerCompat
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.PermissionManager
 import cloud.mindbox.mobile_sdk.inapp.domain.interfaces.PermissionStatus
 import cloud.mindbox.mobile_sdk.logger.mindboxLogE
 
 internal class PermissionManagerImpl(private val context: Context) : PermissionManager {
 
     override fun getCameraPermissionStatus(): PermissionStatus {
         return runCatching {
             resolveRuntimePermissionStatus(Manifest.permission.CAMERA)
         }.getOrElse { _ ->
             mindboxLogE("Unknown error checking camera permission status")
             PermissionStatus.NOT_DETERMINED
         }
     }
 
     override fun getLocationPermissionStatus(): PermissionStatus {
         return runCatching {
             val fineStatus: PermissionStatus = resolveRuntimePermissionStatus(Manifest.permission.ACCESS_FINE_LOCATION)
             val coarseStatus: PermissionStatus = resolveRuntimePermissionStatus(Manifest.permission.ACCESS_COARSE_LOCATION)
             when {
                 fineStatus == PermissionStatus.GRANTED || coarseStatus == PermissionStatus.GRANTED -> PermissionStatus.GRANTED
                 else -> PermissionStatus.DENIED
             }
         }.getOrElse { _ ->
             mindboxLogE("Unknown error checking location permission status")
             PermissionStatus.NOT_DETERMINED
         }
     }
 
     override fun getMicrophonePermissionStatus(): PermissionStatus {
         return runCatching {
             resolveRuntimePermissionStatus(Manifest.permission.RECORD_AUDIO)
         }.getOrElse { _ ->
             mindboxLogE("Unknown error checking microphone permission status")
             PermissionStatus.NOT_DETERMINED
         }
     }
 
     override fun getNotificationPermissionStatus(): PermissionStatus {
         return runCatching {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                 val runtimeStatus: PermissionStatus = resolveRuntimePermissionStatus(Manifest.permission.POST_NOTIFICATIONS)
                 val areNotificationsEnabled: Boolean = NotificationManagerCompat.from(context).areNotificationsEnabled()
                 if (runtimeStatus == PermissionStatus.GRANTED && areNotificationsEnabled) {
                     PermissionStatus.GRANTED
                 } else {
                     PermissionStatus.DENIED
                 }
             } else {
                 if (NotificationManagerCompat.from(context).areNotificationsEnabled()) {
                     PermissionStatus.GRANTED
                 } else {
                     PermissionStatus.DENIED
                 }
             }
         }.getOrElse { _ ->
             mindboxLogE("Unknown error checking notification permission status")
             PermissionStatus.NOT_DETERMINED
         }
     }
 
     override fun getPhotoLibraryPermissionStatus(): PermissionStatus {
         return runCatching {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
                 val imagesStatus: PermissionStatus = resolveRuntimePermissionStatus(Manifest.permission.READ_MEDIA_IMAGES)
                 if (imagesStatus == PermissionStatus.GRANTED) {
                     return@runCatching PermissionStatus.GRANTED
                 }
                 val selectedPhotosGranted: Boolean = ContextCompat.checkSelfPermission(
                     context,
                     Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED
                 ) == PackageManager.PERMISSION_GRANTED
                 if (selectedPhotosGranted) {
                     PermissionStatus.LIMITED
                 } else {
                     imagesStatus
                 }
             } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                 resolveRuntimePermissionStatus(Manifest.permission.READ_MEDIA_IMAGES)
             } else {
                 resolveRuntimePermissionStatus(Manifest.permission.READ_EXTERNAL_STORAGE)
             }
         }.getOrElse { _ ->
             mindboxLogE("Unknown error checking photo library permission status")
             PermissionStatus.NOT_DETERMINED
         }
     }
 
     private fun resolveRuntimePermissionStatus(permission: String): PermissionStatus {
         val isGranted: Boolean = ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED
         return if (isGranted) PermissionStatus.GRANTED else PermissionStatus.DENIED
     }
 }