ViewModels with lifecycle integration, new Device class, code reformat

This commit is contained in:
2023-12-30 22:49:47 +07:00
parent 7436599ad3
commit d7f3bf386d
29 changed files with 743 additions and 490 deletions
@@ -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)
}
}