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
  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("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) ||
      (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 =
        Constants.callPermission.replaceAll("%d", permissionName);
    var dialogContent2 =
        Constants.callPermissionDenied.replaceAll("%d", permissionName);

    if (shouldShowRequestRationale) {
      LogMessage.d("shouldShowRequestRationale", shouldShowRequestRationale);
      if (!context.mounted) return false;
      return requestAudioCallPermissions(
          content: dialogContent,
          permissions: permissions,
          showFromRational: true,
          context: context);
    } else if (alreadyAsked) {
      LogMessage.d("alreadyAsked", alreadyAsked);
      if (!context.mounted) return false;
      var popupValue = await customPermissionDialog(
          icon: audioPermission,
          content: dialogContent2,
          context: context,
          appName: AppConstants
              .appName); //getPermissionAlertMessage("audio_call"));
      if (popupValue) {
        openAppSettings();
        return false;
      } else {
        return false;
      }
    } else {
      if (permissions.isNotEmpty) {
        if (!context.mounted) return false;
        return requestAudioCallPermissions(
            content: dialogContent,
            permissions: permissions,
            context: context);
      } else {
        if (!context.mounted) return false;
        var popupValue = await customPermissionDialog(
            icon: audioPermission,
            content: dialogContent2,
            context: context,
            appName: AppConstants
                .appName); //getPermissionAlertMessage("audio_call"));
        if (popupValue) {
          openAppSettings();
          return false;
        } else {
          return false;
        }
      }
    }
  } else {
    return true;
  }
}