Coverage Summary for Class: SpecialPermissionHandler (kr.open.library.simple_ui.core.permissions.handler)

Class Class, % Method, % Branch, % Line, % Instruction, %
SpecialPermissionHandler 0% (0/1) 0% (0/3) 0% (0/8) 0% (0/14) 0% (0/63)


 package kr.open.library.simple_ui.core.permissions.handler
 
 import android.Manifest
 import android.content.Context
 import android.content.Intent
 import android.net.Uri
 import android.os.Build
 import android.provider.Settings
 import kr.open.library.simple_ui.core.extensions.conditional.checkSdkVersion
 import kr.open.library.simple_ui.core.permissions.extensions.hasPermission
 import kr.open.library.simple_ui.core.permissions.vo.PermissionConstants
 
 /**
  * Handles special permission checks and settings intents.<br><br>
  * 특수 권한의 확인과 설정 인텐트를 처리합니다.<br>
  *
  * @param context Context used to evaluate permission state and build intents.<br><br>
  *                권한 상태 확인과 인텐트 생성을 위해 사용하는 컨텍스트입니다.<br>
  */
 class SpecialPermissionHandler(
     private val context: Context,
 ) {
     /**
      * Returns whether the special permission is currently granted.<br><br>
      * 특수 권한이 현재 허용 상태인지 반환합니다.<br>
      *
      * @param permission Special permission string to inspect.<br><br>
      *                  확인할 특수 권한 문자열입니다.<br>
      * @return Return value: true when granted, false otherwise. Log behavior: none.<br><br>
      *         반환값: 허용되면 true, 아니면 false. 로그 동작: 없음.<br>
      */
     fun isGranted(permission: String): Boolean = when (permission) {
         Manifest.permission.MANAGE_MEDIA -> false
         else -> context.hasPermission(permission)
     }
 
     /**
      * Builds a settings intent for the special permission when possible.<br><br>
      * 가능한 경우 특수 권한용 설정 인텐트를 생성합니다.<br>
      *
      * @param permission Special permission string to request.<br><br>
      *                  요청할 특수 권한 문자열입니다.<br>
      * @return Return value: settings intent or null when not supported. Log behavior: none.<br><br>
      *         반환값: 설정 인텐트 또는 미지원 시 null. 로그 동작: 없음.<br>
      */
     fun buildSettingsIntent(permission: String): Intent? {
         if (permission == Manifest.permission.MANAGE_MEDIA) {
             return checkSdkVersion(Build.VERSION_CODES.S,
                 positiveWork = { Intent(Settings.ACTION_REQUEST_MANAGE_MEDIA) },
                 negativeWork = { null }
             )
         }
         val action = PermissionConstants.SPECIAL_PERMISSION_ACTIONS[permission] ?: return null
         return Intent(action).apply {
             if (PermissionConstants.PERMISSIONS_REQUIRING_PACKAGE_URI.contains(permission)) {
                 data = Uri.parse("package:${context.packageName}")
             }
         }
     }
 }