askAudioCallPermissions static method
Implementation
static Future<bool> askAudioCallPermissions(BuildContext context) async {
var info = await PackageInfo.fromPlatform();
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
var permissions = <Permission>[];
if(!microphone.isGranted && !SessionManagement.getBool(Constants.audioRecordPermissionAsked)){
permissions.add(Permission.microphone);
}
if(!phone.isGranted && !SessionManagement.getBool(Constants.readPhoneStatePermissionAsked) && Platform.isAndroid){
permissions.add(Permission.phone);
}
if(!bluetoothConnect.isGranted && !SessionManagement.getBool(Constants.bluetoothPermissionAsked) && Platform.isAndroid){
permissions.add(Permission.bluetoothConnect);
}
LogMessage.d("microphone", microphone.isGranted);
LogMessage.d("phone", phone.isGranted);
LogMessage.d("bluetoothConnect", bluetoothConnect.isGranted);
if ((!microphone.isGranted) ||
(Platform.isAndroid ? !phone.isGranted : false) ||
(Platform.isAndroid ? !bluetoothConnect.isGranted : false)) {
var shouldShowRequestRationale = ((await Permission.microphone.shouldShowRequestRationale)
|| (await Permission.phone.shouldShowRequestRationale) ||
(await Permission.bluetoothConnect.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)
&& SessionManagement.getBool(Constants.readPhoneStatePermissionAsked) &&
SessionManagement.getBool(Constants.bluetoothPermissionAsked));
LogMessage.d("alreadyAsked audio", alreadyAsked);
if (shouldShowRequestRationale) {
if(context.mounted) {
return requestAudioCallPermissions(permissions: permissions, showFromRational: true, context: context);
}else{
return Future.value(false);
}
} else if (alreadyAsked) {
if(context.mounted) {
var popupValue = await customPermissionDialog(
content: getPermissionAlertMessage("audio_call"),
appName: info.appName,
icon: audioPermission,
context: context,);
if (popupValue) {
openAppSettings();
return false;
} else {
return false;
}
}else{
LogMessage.d("askAudioCallPermissions", "Context is Not Mounted");
return false;
}
} else {
if(permissions.isNotEmpty) {
if(context.mounted) {
return requestAudioCallPermissions(permissions: permissions, context: context);
}else{
return Future.value(false);
}
}else{
if(context.mounted) {
var popupValue = await customPermissionDialog(
icon: audioPermission,
content: getPermissionAlertMessage("audio_call"),
appName: info.appName,
context: context);
if (popupValue) {
openAppSettings();
return false;
} else {
return false;
}
}else{
LogMessage.d("askAudioCallPermissions", "Context is Not Mounted");
return false;
}
}
}
}else{
return true;
}
}