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
}