// // Copyright (c) 2014 VK.com // // Permission is hereby granted, free of charge, to any person obtaining a copy of // this software and associated documentation files (the "Software"), to deal in // the Software without restriction, including without limitation the rights to // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of // the Software, and to permit persons to whom the Software is furnished to do so, // subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // package com.vk.sdk.api.model; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import static com.vk.sdk.api.model.ParseUtils.parseInt; import static com.vk.sdk.api.model.VKAttachments.TYPE_PHOTO; /** * Describes a photo object from VK. */ public class VKApiPhoto extends VKAttachments.VKApiAttachment implements Parcelable, Identifiable { /** * Photo ID, positive number */ public int id; /** * Photo ID, positive number */ public int user_id; /** * Photo album ID. */ public int album_id; /** * ID of the user or community that owns the photo. */ public int owner_id; /** * Width (in pixels) of the original photo. */ public int width; /** * Height (in pixels) of the original photo. */ public int height; /** * Text describing the photo. */ public String text; /** * Date (in Unix time) the photo was added. */ public long date; /** * URL of image with maximum size 75x75px. */ public String photo_75; /** * URL of image with maximum size 130x130px. */ public String photo_130; /** * URL of image with maximum size 604x604px. */ public String photo_604; /** * URL of image with maximum size 807x807px. */ public String photo_807; /** * URL of image with maximum size 1280x1024px. */ public String photo_1280; /** * URL of image with maximum size 2560x2048px. */ public String photo_2560; /** * All photo thumbs in photo sizes. * It has data even if server returned them without {@code PhotoSizes} format. */ public VKPhotoSizes src = new VKPhotoSizes(); /** * Information whether the current user liked the photo. */ public int user_likes; /** * Whether the current user can comment on the photo */ public int can_comment; /** * Number of likes on the photo. */ public int likes; /** * Number of comments on the photo. */ public int comments; /** * Number of tags on the photo. */ public int tags; /** * An access key using for get information about hidden objects. */ public String access_key; public VKApiPhoto(JSONObject from) throws JSONException { parse(from); } /** * Fills a Photo instance from JSONObject. */ public VKApiPhoto parse(JSONObject from) { user_id = from.optInt("user_id"); album_id = from.optInt("album_id"); date = from.optLong("date"); height = from.optInt("height"); width = from.optInt("width"); owner_id = from.optInt("owner_id"); id = from.optInt("id"); text = from.optString("text"); access_key = from.optString("access_key"); photo_75 = from.optString("photo_75"); photo_130 = from.optString("photo_130"); photo_604 = from.optString("photo_604"); photo_807 = from.optString("photo_807"); photo_1280 = from.optString("photo_1280"); photo_2560 = from.optString("photo_2560"); JSONObject likes = from.optJSONObject("likes"); this.likes = ParseUtils.parseInt(likes, "count"); this.user_likes = ParseUtils.parseInt(likes, "user_likes"); comments = parseInt(from.optJSONObject("comments"), "count"); tags = parseInt(from.optJSONObject("tags"), "count"); can_comment = parseInt(from, "can_comment"); src.setOriginalDimension(width, height); JSONArray photo_sizes = from.optJSONArray("sizes"); if(photo_sizes != null) { src.fill(photo_sizes); } else { if(!TextUtils.isEmpty(photo_75)) { src.add(VKApiPhotoSize.create(photo_75, VKApiPhotoSize.S, width, height)); } if(!TextUtils.isEmpty(photo_130)) { src.add(VKApiPhotoSize.create(photo_130, VKApiPhotoSize.M, width, height)); } if(!TextUtils.isEmpty(photo_604)) { src.add(VKApiPhotoSize.create(photo_604, VKApiPhotoSize.X, width, height)); } if(!TextUtils.isEmpty(photo_807)) { src.add(VKApiPhotoSize.create(photo_807, VKApiPhotoSize.Y, width, height)); } if(!TextUtils.isEmpty(photo_1280)) { src.add(VKApiPhotoSize.create(photo_1280, VKApiPhotoSize.Z, width, height)); } if(!TextUtils.isEmpty(photo_2560)) { src.add(VKApiPhotoSize.create(photo_2560, VKApiPhotoSize.W, width, height)); } src.sort(); } return this; } /** * Creates a Photo instance from Parcel. */ public VKApiPhoto(Parcel in) { this.id = in.readInt(); this.user_id=in.readInt(); this.album_id = in.readInt(); this.owner_id = in.readInt(); this.width = in.readInt(); this.height = in.readInt(); this.text = in.readString(); this.date = in.readLong(); this.src = in.readParcelable(VKPhotoSizes.class.getClassLoader()); this.photo_75 = in.readString(); this.photo_130 = in.readString(); this.photo_604 = in.readString(); this.photo_807 = in.readString(); this.photo_1280 = in.readString(); this.photo_2560 = in.readString(); this.user_likes = in.readInt(); this.can_comment = in.readInt(); this.likes = in.readInt(); this.comments = in.readInt(); this.tags = in.readInt(); this.access_key = in.readString(); } /** * Creates empty Photo instance. */ public VKApiPhoto() { } @Override public int getId() { return id; } @Override public CharSequence toAttachmentString() { StringBuilder result = new StringBuilder(TYPE_PHOTO).append(owner_id).append('_').append(id); if(!TextUtils.isEmpty(access_key)) { result.append('_'); result.append(access_key); } return result; } @Override public String getType() { return TYPE_PHOTO; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.id); dest.writeInt(this.user_id); dest.writeInt(this.album_id); dest.writeInt(this.owner_id); dest.writeInt(this.width); dest.writeInt(this.height); dest.writeString(this.text); dest.writeLong(this.date); dest.writeParcelable(this.src, flags); dest.writeString(this.photo_75); dest.writeString(this.photo_130); dest.writeString(this.photo_604); dest.writeString(this.photo_807); dest.writeString(this.photo_1280); dest.writeString(this.photo_2560); dest.writeInt(this.user_likes); dest.writeInt(this.can_comment); dest.writeInt(this.likes); dest.writeInt(this.comments); dest.writeInt(this.tags); dest.writeString(this.access_key); } public static Creator<VKApiPhoto> CREATOR = new Creator<VKApiPhoto>() { public VKApiPhoto createFromParcel(Parcel source) { return new VKApiPhoto(source); } public VKApiPhoto[] newArray(int size) { return new VKApiPhoto[size]; } }; }