Jetpack Compose 기반의 [권한 체크] 및 [권한 요청] 구현 샘플 프로젝트 프로젝트의 형식으로 만들기 위해 다소 코드가 추가되었지만 실제 사용 시, 보다 간편하게 사용할 수 있다.
- Jetpack Compose를 이용한 권한 체크 및 권한 요청 구현
- LazyColumn을 이용한 권한 목록 구현
- Android Studio Hedgehog | 2023.1.1 Patch 1
- Build #AI-231.9392.1.2311.11255304, built on December 27, 2023
- Android SDK Build-Tools 35-rc2
- Android SDK Platform-Tools 34.0.5
- Java 1.8
- Kotlin Version: 1.9.22
- Kotlin Compose Compiler Version: 1.5.10
- Android Gradle Plugin Version: 8.1.2
- Gradle Version: 8.2
프로젝트 소스코드는 main만 사용 구성은 다음과 같다.
├── PermissionSample.kt
├── MainActivity.kt
├── data
├── permissions
├── ui
│ ├── components
│ │ └── dialog
│ ├── screens
│ │ └── mainscreen
│ └── themes
└── utils
├── data
│ └── PermissionData.kt
Data에는 Permission을 요청하고 허용 여부를 저장하는 프로퍼티로 구성된 PermissionData
클래스 존재
├── permissions
│ ├── PermissionCheck.kt
│ ├── permissionCheckList.kt
│ └── PermissionTextProvier.kt
Permission 패키지 내에는, Permission을 체크하고 요청하는 PermissionCheck
클래스와 Permission 목록을 가지고 있는 permissionCheckList
Composable 메서드, 그리고 PermissionDialog에 텍스트를 제공하는 PermissionTextProvier
클래스 존재
요청이 필요한 Permission은 permissionCheckList
에 추가하여 사용
실제 사용 시, 단일 퍼미션의 경우, 개별로 권할 요청 가능
해당 구성은 프로젝트를 샘플코드 형식으로 만들기 위함
├── ui
│ ├── components
│ │ └── dialog
│ │ └── PermissionDialog.kt
│ ├── screens
│ │ └── mainscreen
│ │ ├── MainState.kt
│ │ ├── MainEvent.kt
│ │ ├── MainScreen.kt
│ │ └── MainViewModel.kt
│ └── themes
ui는 화면을 구성하는 컴포넌트를 파일 수준 함수로 구성
PermissionDialog
는 Permission 요청을 거부한 경우 표시되는 Dialog view를 구성- mainScreen은 MVI pattern의 presentation layer를 구성
MainState
는 화면의 상태를 저장하는 클래스MainEvent
는 화면의 이벤트를 저장하는 클래스MainScreen
은 화면을 구성하는 Composable 메서드MainViewModel
은 화면의 비즈니스 로직을 처리하는 ViewModel 클래스
├── utils
│ └── PermissionUtils.kt
확장함수 및 재사용성이 있는 유틸리티 메서드를 가지고 있다.