69 lines
2.7 KiB
Kotlin
69 lines
2.7 KiB
Kotlin
package com.helible.pilot.permissions
|
|
|
|
import android.Manifest
|
|
import android.app.Activity
|
|
import android.content.Intent
|
|
import android.content.pm.PackageManager
|
|
import android.net.Uri
|
|
import android.provider.Settings
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.snapshots.SnapshotStateList
|
|
import com.helible.pilot.components.BluetoothAdminPermissionTextProvider
|
|
import com.helible.pilot.components.BluetoothConnectPermissionTextProvider
|
|
import com.helible.pilot.components.BluetoothScanPermissionTextProvider
|
|
import com.helible.pilot.components.LocationPermissionTextProvider
|
|
import com.helible.pilot.components.PermissionDialog
|
|
|
|
@Composable
|
|
fun PermissionsRequest(
|
|
visiblePermissionDialogQueue: SnapshotStateList<String>,
|
|
dismissCurrentDialog: () -> Unit,
|
|
activity: Activity,
|
|
permissionLaunch: (permissions: Array<String>) -> Unit,
|
|
) {
|
|
/* Create Dialog windows, which requests all permissions */
|
|
visiblePermissionDialogQueue.reversed()
|
|
.forEach { permission ->
|
|
PermissionDialog(
|
|
permissionTextProvider = when (permission) {
|
|
Manifest.permission.ACCESS_FINE_LOCATION -> {
|
|
LocationPermissionTextProvider()
|
|
}
|
|
|
|
Manifest.permission.BLUETOOTH_SCAN -> {
|
|
BluetoothScanPermissionTextProvider()
|
|
}
|
|
|
|
Manifest.permission.BLUETOOTH_CONNECT -> {
|
|
BluetoothConnectPermissionTextProvider()
|
|
}
|
|
|
|
Manifest.permission.BLUETOOTH_ADMIN -> {
|
|
BluetoothAdminPermissionTextProvider()
|
|
}
|
|
|
|
else -> return@forEach
|
|
},
|
|
isPermanentDeclined = !activity.shouldShowRequestPermissionRationale(permission),
|
|
onDismiss = {
|
|
if (activity.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED)
|
|
dismissCurrentDialog()
|
|
},
|
|
onOkClick = {
|
|
dismissCurrentDialog()
|
|
permissionLaunch(arrayOf(permission))
|
|
},
|
|
onContinueClick = {
|
|
if (activity.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED)
|
|
dismissCurrentDialog()
|
|
},
|
|
onGoToAppSettingsClick = {
|
|
val intent = Intent(
|
|
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
|
Uri.fromParts("package", activity.packageName, null)
|
|
)
|
|
activity.startActivity(intent)
|
|
}
|
|
)
|
|
}
|
|
} |