Coverage Summary for Class: RuntimePermissionHandler (kr.open.library.simple_ui.xml.permissions.flow)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| RuntimePermissionHandler |
100%
(1/1)
|
100%
(6/6)
|
100%
(8/8)
|
100%
(12/12)
|
100%
(40/40)
|
package kr.open.library.simple_ui.xml.permissions.flow
import kr.open.library.simple_ui.core.permissions.model.PermissionDecisionType
import kr.open.library.simple_ui.xml.permissions.host.PermissionHostAdapter
/**
* Handles runtime permission rationale checks and result mapping.<br><br>
* 런타임 권한 설명 여부 확인과 결과 매핑을 처리합니다.<br>
*
* @param host Host adapter used for rationale checks.<br><br>
* 설명 여부 확인에 사용하는 호스트 어댑터입니다.<br>
* @param requestedHistory Mutable set tracking previously requested permissions.<br><br>
* 이전 요청 이력을 추적하는 가변 집합입니다.<br>
*/
class RuntimePermissionHandler(
private val host: PermissionHostAdapter,
private val requestedHistory: MutableSet<String>,
) {
/**
* Returns whether rationale UI should be shown for [permission].<br><br>
* [permission]에 대해 설명 UI가 필요한지 반환합니다.<br>
*
* @param permission Permission string to inspect.<br><br>
* 확인할 권한 문자열입니다.<br>
* @return Return value: true when rationale should be shown. Log behavior: none.<br><br>
* 반환값: 설명이 필요하면 true. 로그 동작: 없음.<br>
*/
fun shouldShowRationale(permission: String): Boolean = host.shouldShowRequestPermissionRationale(permission)
/**
* Returns whether [permission] was requested before.<br><br>
* [permission]이 이전에 요청되었는지 반환합니다.<br>
*
* @param permission Permission string to inspect.<br><br>
* 확인할 권한 문자열입니다.<br>
* @return Return value: true when requested before. Log behavior: none.<br><br>
* 반환값: 이전 요청 이력이 있으면 true. 로그 동작: 없음.<br>
*/
fun wasRequested(permission: String): Boolean = requestedHistory.contains(permission)
/**
* Marks [permissions] as requested in the history set.<br><br>
* [permissions]를 요청 이력에 기록합니다.<br>
*
* @param permissions Permissions to mark as requested.<br><br>
* 요청 이력에 기록할 권한 목록입니다.<br>
*/
fun markRequested(permissions: List<String>) {
requestedHistory.addAll(permissions)
}
/**
* Maps runtime permission decision into [PermissionDecisionType].<br><br>
* 런타임 권한 결과를 [PermissionDecisionType]으로 매핑합니다.<br>
*
* @param permission Permission string being evaluated.<br><br>
* 평가 중인 권한 문자열입니다.<br>
* @param granted Whether the platform returned granted = true.<br><br>
* 플랫폼이 granted = true로 반환했는지 여부입니다.<br>
* @param shouldShowRationale Whether rationale UI should be shown now.<br><br>
* 현재 설명 UI가 필요한지 여부입니다.<br>
* @param wasRequestedBefore Whether the permission was requested before.<br><br>
* 이전 요청 이력이 있는지 여부입니다.<br>
* @return Return value: mapped permission result type. Log behavior: none.<br><br>
* 반환값: 매핑된 권한 결과 타입. 로그 동작: 없음.<br>
*/
fun mapResult(
permission: String,
granted: Boolean,
shouldShowRationale: Boolean,
wasRequestedBefore: Boolean,
isRestored: Boolean = false,
): PermissionDecisionType = when {
granted -> PermissionDecisionType.GRANTED
shouldShowRationale -> PermissionDecisionType.DENIED
wasRequestedBefore && !isRestored -> PermissionDecisionType.PERMANENTLY_DENIED
else -> PermissionDecisionType.DENIED
}
}