Skip to content

Instantly share code, notes, and snippets.

View hamurcuabi's full-sized avatar
🏠
Working from home

Emre Hamurcu hamurcuabi

🏠
Working from home
View GitHub Profile
// register permission on top of Fragment or Activity like below
private val cameraPermission = registerPermission {
onCameraPermissionResult(it)
}
private val storagePermission = registerPermission {
onStoragePermissionResult(it)
}
fun Permission.launchSinglePermission(permission: String) {
this.result.launch(arrayOf(permission))
}
fun Permission.launchMultiplePermission(permissionList: Array<String>) {
this.result.launch(permissionList)
}
private fun getPermissionState(activity: Activity, result: Map<String, Boolean>): PermissionState {
val deniedPermissions = result.filterValues { !it }.keys
return when {
deniedPermissions.isEmpty() -> PermissionState.Granted
deniedPermissions.any { permission ->
!shouldShowRequestPermissionRationale(
/* activity = */
activity,
/* permission = */
fun Fragment.registerPermission(onPermissionResult: (PermissionState) -> Unit): Permission {
return Permission(
this.registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
onPermissionResult(getPermissionState(activity, it))
}
)
}
fun AppCompatActivity.registerPermission(onPermissionResult: (PermissionState) -> Unit): Permission {
return Permission(
@JvmInline
value class Permission(val result: ActivityResultLauncher<Array<String>>)
sealed class PermissionState {
object Granted : PermissionState()
object Denied : PermissionState()
object PermanentlyDenied : PermissionState()
}
// Activity and the permission is needed
val isPermanentluDenied= shouldShowRequestPermissionRationale(activity, android.Manifest.permission.CAMERA)
// Define a permission request
private val cameraPermission = registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if(granted){
}
}
//launch it
cameraPermission.launch(android.Manifest.permission.CAMERA)
@hamurcuabi
hamurcuabi / AndroidManifest.xml
Last active April 14, 2022 09:56
permission
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
class FlowObserver<T> (
lifecycleOwner: LifecycleOwner,
private val flow: Flow<T>,
private val collector: suspend (T) -> Unit
) {
private var job: Job? = null
init {
lifecycleOwner.lifecycle.addObserver(LifecycleEventObserver {