askAudioCallPermissions static method
Implementation
static Future<bool> askAudioCallPermissions() async {
final microphone = await Permission.microphone.status; //RECORD_AUDIO
final phone = await Permission.phone.status; //READ_PHONE_STATE
final bluetoothConnect =
await Permission.bluetoothConnect.status; //BLUETOOTH_CONNECT
final notification = await Permission.notification.status; //NOTIFICATION
var permissions = <Permission>[];
if (Platform.isAndroid &&
(!phone.isGranted ||
(await Permission.phone
.shouldShowRequestRationale) /*&& !SessionManagement.getBool(Constants.readPhoneStatePermissionAsked)*/)) {
permissions.add(Permission.phone);
}
if (!microphone.isGranted ||
(await Permission.microphone
.shouldShowRequestRationale) /*&& !SessionManagement.getBool(Constants.audioRecordPermissionAsked)*/) {
permissions.add(Permission.microphone);
}
if (Platform.isAndroid &&
(!bluetoothConnect.isGranted ||
(await Permission.bluetoothConnect
.shouldShowRequestRationale) /*&& !SessionManagement.getBool(Constants.bluetoothPermissionAsked)*/)) {
permissions.add(Permission.bluetoothConnect);
}
if (Platform.isAndroid &&
(!notification.isGranted ||
(await Permission.notification
.shouldShowRequestRationale) /*&& !SessionManagement.getBool(Constants.notificationPermissionAsked)*/)) {
permissions.add(Permission.notification);
}
LogMessage.d("phone", phone.isGranted);
LogMessage.d(
"microphone isPermanentlyDenied", microphone.isPermanentlyDenied);
LogMessage.d("microphone", microphone.isGranted);
LogMessage.d("bluetoothConnect", bluetoothConnect.isGranted);
LogMessage.d("notification", notification.isGranted);
if ((!microphone.isGranted) ||
(Platform.isAndroid ? !phone.isGranted : false) ||
(Platform.isAndroid ? !bluetoothConnect.isGranted : false) ||
(Platform.isAndroid ? !notification.isGranted : false)) {
var shouldShowRequestRationale =
((await Permission.microphone.shouldShowRequestRationale) ||
(await Permission.phone.shouldShowRequestRationale) ||
(await Permission.bluetoothConnect.shouldShowRequestRationale) ||
(await Permission.notification.shouldShowRequestRationale));
LogMessage.d(
"shouldShowRequestRationale audio", shouldShowRequestRationale);
LogMessage.d(
"SessionManagement.getBool(Constants.audioRecordPermissionAsked) audio",
(SessionManagement.getBool(Constants.audioRecordPermissionAsked)));
LogMessage.d("permissions audio", (permissions.toString()));
var alreadyAsked =
((SessionManagement.getBool(Constants.audioRecordPermissionAsked) ||
(Platform.isAndroid &&
SessionManagement.getBool(
Constants.readPhoneStatePermissionAsked)) ||
(Platform.isAndroid &&
SessionManagement.getBool(
Constants.bluetoothPermissionAsked))) &&
(Platform.isAndroid &&
SessionManagement.getBool(
Constants.notificationPermissionAsked)));
LogMessage.d("alreadyAsked audio", alreadyAsked);
var permissionName = getPermissionDisplayName(permissions);
LogMessage.d("permissionName", permissionName);
var dialogContent = getTranslated("callPermissionContent")
.replaceAll("%d", permissionName);
var dialogContent2 = getTranslated("callPermissionDeniedContent")
.replaceAll("%d", permissionName);
if (shouldShowRequestRationale) {
LogMessage.d("shouldShowRequestRationale", shouldShowRequestRationale);
return requestAudioCallPermissions(
content: dialogContent,
permissions: permissions,
showFromRational: true);
} else if (alreadyAsked) {
LogMessage.d("alreadyAsked", alreadyAsked);
var popupValue = await customPermissionDialog(
icon: audioPermission,
content: dialogContent2,
dialogStyle: AppStyleConfig
.dialogStyle); //getPermissionAlertMessage("audio_call"));
if (popupValue) {
openAppSettings();
return false;
} else {
return false;
}
} else {
if (permissions.isNotEmpty) {
return requestAudioCallPermissions(
content: dialogContent, permissions: permissions);
} else {
var popupValue = await customPermissionDialog(
icon: audioPermission,
content: dialogContent2,
dialogStyle: AppStyleConfig
.dialogStyle); //getPermissionAlertMessage("audio_call"));
if (popupValue) {
openAppSettings();
return false;
} else {
return false;
}
}
}
} else {
return true;
}
}