askAudioCallPermissions static method

Future<bool> askAudioCallPermissions(
  1. BuildContext context
)

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;
  }
}