askVideoCallPermissions static method

Future<bool> askVideoCallPermissions()

Implementation

static Future<bool> askVideoCallPermissions() async {
  if (Platform.isAndroid) {
    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 camera = await Permission.camera.status; //CAMERA
    final notification = await Permission.notification.status; //NOTIFICATION
    var permissions = <Permission>[];
    if (!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 (!camera.isGranted ||
        (await Permission.camera
            .shouldShowRequestRationale) /*&& !SessionManagement.getBool(Constants.cameraPermissionAsked)*/) {
      permissions.add(Permission.camera);
    }
    if (!bluetoothConnect.isGranted ||
        (await Permission.bluetoothConnect
            .shouldShowRequestRationale) /*&& !SessionManagement.getBool(Constants.bluetoothPermissionAsked)*/) {
      permissions.add(Permission.bluetoothConnect);
    }
    if (!notification.isGranted ||
        (await Permission.notification
            .shouldShowRequestRationale) /*&& !SessionManagement.getBool(Constants.notificationPermissionAsked)*/) {
      permissions.add(Permission.notification);
    }
    if ((microphone != PermissionStatus.granted) ||
        (phone != PermissionStatus.granted) ||
        (camera != PermissionStatus.granted) ||
        (bluetoothConnect != PermissionStatus.granted) ||
        (notification != PermissionStatus.granted)) {
      var shouldShowRequestRationale = ((await Permission
              .camera.shouldShowRequestRationale) ||
          (await Permission.microphone.shouldShowRequestRationale) ||
          (await Permission.phone.shouldShowRequestRationale) ||
          (await Permission.bluetoothConnect.shouldShowRequestRationale) ||
          (await Permission.notification.shouldShowRequestRationale));
      LogMessage.d(
          "shouldShowRequestRationale video", shouldShowRequestRationale);
      LogMessage.d(
          "SessionManagement.getBool(Constants.cameraPermissionAsked) video",
          SessionManagement.getBool(Constants.cameraPermissionAsked));
      var alreadyAsked = ((SessionManagement.getBool(
                  Constants.cameraPermissionAsked) ||
              SessionManagement.getBool(
                  Constants.audioRecordPermissionAsked) ||
              SessionManagement.getBool(
                  Constants.readPhoneStatePermissionAsked) ||
              SessionManagement.getBool(
                  Constants.bluetoothPermissionAsked)) &&
          SessionManagement.getBool(Constants.notificationPermissionAsked));
      LogMessage.d("alreadyAsked video", 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) {
        return requestVideoCallPermissions(
            content: dialogContent, permissions: permissions);
      } else if (alreadyAsked) {
        var popupValue = await customPermissionDialog(
            icon: recordAudioVideoPermission,
            content: dialogContent2,
            dialogStyle: AppStyleConfig
                .dialogStyle); //getPermissionAlertMessage("video_call"));
        if (popupValue) {
          openAppSettings();
          return false;
        } else {
          return false;
        }
      } else {
        if (permissions.isNotEmpty) {
          return requestVideoCallPermissions(
              content: dialogContent, permissions: permissions);
        } else {
          var popupValue = await customPermissionDialog(
              icon: recordAudioVideoPermission,
              content: dialogContent2,
              dialogStyle: AppStyleConfig
                  .dialogStyle); //getPermissionAlertMessage("video_call"));
          if (popupValue) {
            openAppSettings();
            return false;
          } else {
            return false;
          }
        }
      }
    } else {
      return true;
    }
  } else {
    return _askiOSVideoCallPermissions();
  }
}