fun toJSONObjectForCall()

in facebook-common/src/main/java/com/facebook/share/internal/ShareInternalUtility.kt [298:342]


  fun toJSONObjectForCall(callId: UUID, content: ShareOpenGraphContent): JSONObject? {
    val action = content.action
    val attachments = ArrayList<NativeAppCallAttachmentStore.Attachment>()
    val actionJSON =
        toJSONObject(
            action,
            OpenGraphJSONUtility.PhotoJSONProcessor { photo ->
              val attachment = getAttachment(callId, photo) ?: return@PhotoJSONProcessor null
              attachments.add(attachment)
              val photoJSONObject = JSONObject()
              try {
                photoJSONObject.put(NativeProtocol.IMAGE_URL_KEY, attachment.attachmentUrl)
                if (photo.userGenerated) {
                  photoJSONObject.put(NativeProtocol.IMAGE_USER_GENERATED_KEY, true)
                }
              } catch (e: JSONException) {
                throw FacebookException("Unable to attach images", e)
              }
              photoJSONObject
            })
            ?: return null
    addAttachments(attachments)
    // People and place tags must be moved from the share content to the open graph action
    if (content.placeId != null) {
      val placeTag = actionJSON.optString("place")

      // Only if the place tag is already empty or null replace with the id from the
      // share content
      if (isNullOrEmpty(placeTag)) {
        actionJSON.put("place", content.placeId)
      }
    }
    if (content.peopleIds != null) {
      val peopleTags = actionJSON.optJSONArray("tags")
      val peopleIdSet: MutableSet<String> = hashSetOf()
      if (peopleTags != null) {
        peopleIdSet.addAll(jsonArrayToSet(peopleTags))
      }
      for (peopleId in content.peopleIds) {
        peopleIdSet.add(peopleId)
      }
      actionJSON.put("tags", JSONArray(peopleIdSet))
    }
    return actionJSON
  }