ViewModels with lifecycle integration, new Device class, code reformat
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
package com.helible.pilot.permissions
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Build
|
||||
import androidx.activity.compose.ManagedActivityResultLauncher
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.runtime.Composable
|
||||
|
||||
|
||||
class PermissionsLauncher {
|
||||
private val permissionsToRequest: Array<String> by lazy {
|
||||
if (Build.VERSION.SDK_INT <= 30) {
|
||||
arrayOf(
|
||||
Manifest.permission.ACCESS_FINE_LOCATION
|
||||
)
|
||||
} else {
|
||||
arrayOf(
|
||||
Manifest.permission.BLUETOOTH_SCAN,
|
||||
Manifest.permission.BLUETOOTH_CONNECT
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private lateinit var launcher: ManagedActivityResultLauncher<Array<String>, Map<String, Boolean>>
|
||||
|
||||
@SuppressLint("ComposableNaming")
|
||||
@Composable
|
||||
fun setup(
|
||||
onPermissionResult: (permission: String, isGranted: Boolean) -> Unit,
|
||||
onGranted: () -> Unit,
|
||||
) {
|
||||
launcher = rememberLauncherForActivityResult(
|
||||
contract = ActivityResultContracts.RequestMultiplePermissions(),
|
||||
onResult = { perms ->
|
||||
permissionsToRequest.forEach { permission ->
|
||||
onPermissionResult(permission, perms[permission] == true)
|
||||
}
|
||||
if (perms.values.all { it }) {
|
||||
onGranted()
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun launch(permissions: Array<String> = permissionsToRequest) {
|
||||
launcher.launch(permissions)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user