// // 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 org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import static com.vk.sdk.api.model.ParseUtils.parseBoolean; import static com.vk.sdk.api.model.ParseUtils.parseLong; /** * Represents full user profile. */ @SuppressWarnings("unused") public class VKApiUserFull extends VKApiUser implements android.os.Parcelable { /** * Filed last_seen from VK fields set */ public static final String LAST_SEEN = "last_seen"; /** * Filed bdate from VK fields set */ public static final String BDATE = "bdate"; /** * Filed city from VK fields set */ public static final String CITY = "city"; /** * Filed country from VK fields set */ public static final String COUNTRY = "country"; /** * Filed universities from VK fields set */ public static final String UNIVERSITIES = "universities"; /** * Filed schools from VK fields set */ public static final String SCHOOLS = "schools"; /** * Filed activity from VK fields set */ public static final String ACTIVITY = "activity"; /** * Filed personal from VK fields set */ public static final String PERSONAL = "personal"; /** * Filed sex from VK fields set */ public static final String SEX = "sex"; /** * Filed site from VK fields set */ public static final String SITE = "site"; /** * Filed contacts from VK fields set */ public static final String CONTACTS = "contacts"; /** * Filed can_post from VK fields set */ public static final String CAN_POST = "can_post"; /** * Filed can_see_all_posts from VK fields set */ public static final String CAN_SEE_ALL_POSTS = "can_see_all_posts"; /** * Filed can_write_private_message from VK fields set */ public static final String CAN_WRITE_PRIVATE_MESSAGE = "can_write_private_message"; /** * Filed relation from VK fields set */ public static final String RELATION = "relation"; /** * Filed counters from VK fields set */ public static final String COUNTERS = "counters"; /** * Filed activities from VK fields set */ public static final String ACTIVITIES = "activities"; /** * Filed interests from VK fields set */ public static final String INTERESTS = "interests"; /** * Filed movies from VK fields set */ public static final String MOVIES = "movies"; /** * Filed tv from VK fields set */ public static final String TV = "tv"; /** * Filed books from VK fields set */ public static final String BOOKS = "books"; /** * Filed games from VK fields set */ public static final String GAMES = "games"; /** * Filed about from VK fields set */ public static final String ABOUT = "about"; /** * Filed quotes from VK fields set */ public static final String QUOTES = "quotes"; /** * Filed connections from VK fields set */ public static final String CONNECTIONS = "connections"; /** * Filed relatives from VK fields set */ public static final String RELATIVES = "relatives"; /** * Filed wall_default from VK fields set */ public static final String WALL_DEFAULT = "wall_default"; /** * Filed verified from VK fields set */ public static final String VERIFIED = "verified"; /** * Filed screen_name from VK fields set */ public static final String SCREEN_NAME = "screen_name"; /** * Filed blacklisted_by_me from VK fields set */ public static final String BLACKLISTED_BY_ME = "blacklisted_by_me"; /** * Text of user status. */ public String activity; /** * Audio which broadcasting to status. */ public VKApiAudio status_audio; /** * User's date of birth. Returned as DD.MM.YYYY or DD.MM (if birth year is hidden). */ public String bdate; /** * City specified on user's page in "Contacts" section. */ public VKApiCity city; /** * Country specified on user's page in "Contacts" section. */ public VKApiCountry country; /** * Last visit date(in Unix time). */ public long last_seen; /** * List of user's universities */ public VKList<VKApiUniversity> universities; /** * List of user's schools */ public VKList<VKApiSchool> schools; /** * Views on smoking. * @see {@link Attitude} */ public int smoking; /** * Views on alcohol. * @see {@link Attitude} */ public int alcohol; /** * Views on policy. * @see {@link com.vk.sdk.api.model.VKApiUserFull.Political} */ public int political; /** * Life main stuffs. * @see {@link com.vk.sdk.api.model.VKApiUserFull.LifeMain} */ public int life_main; /** * People main stuffs. * @see {@link com.vk.sdk.api.model.VKApiUserFull.PeopleMain} */ public int people_main; /** * Stuffs that inspire the user. */ public String inspired_by; /** * List of user's languages */ public String[] langs; /** * Religion of user */ public String religion; /** * Name of user's account in Facebook */ public String facebook; /** * ID of user's facebook */ public String facebook_name; /** * Name of user's account in LiveJournal */ public String livejournal; /** * Name of user's account in Skype */ public String skype; /** * URL of user's site */ public String site; /** * Name of user's account in Twitter */ public String twitter; /** * Name of user's account in Instagram */ public String instagram; /** * User's mobile phone number */ public String mobile_phone; /** * User's home phone number */ public String home_phone; /** * Page screen name. */ public String screen_name; /** * Nickname of user. */ public String nickname; /** * User's activities */ public String activities; /** * User's interests */ public String interests; /** * User's favorite movies */ public String movies; /** * User's favorite TV Shows */ public String tv; /** * User's favorite books */ public String books; /** * User's favorite games */ public String games; /** * User's about information */ public String about; /** * User's favorite quotes */ public String quotes; /** * Information whether others can posts on user's wall. */ public boolean can_post; /** * Information whether others' posts on user's wall can be viewed */ public boolean can_see_all_posts; /** * Information whether private messages can be sent to this user. */ public boolean can_write_private_message; /** * Information whether user can comment wall posts. */ public boolean wall_comments; /** * Information whether the user is banned in VK. */ public boolean is_banned; /** * Information whether the user is deleted in VK. */ public boolean is_deleted; /** * Information whether the user's post of wall shows by default. */ public boolean wall_default_owner; /** * Information whether the user has a verified page in VK */ public boolean verified; /** * User sex. * @see {@link com.vk.sdk.api.model.VKApiUserFull.Sex} */ public int sex; /** * Set of user's counters. */ public Counters counters; /** * Relationship status. * @see {@link com.vk.sdk.api.model.VKApiUserFull.Relation} */ public int relation; /** * List of user's relatives */ public VKList<Relative> relatives; /** * Information whether the current user has add this user to the blacklist. */ public boolean blacklisted_by_me; public VKApiUserFull(JSONObject from) throws JSONException { parse(from); } public VKApiUserFull parse(JSONObject user) { super.parse(user); // general last_seen = parseLong(user.optJSONObject(LAST_SEEN), "time"); bdate = user.optString(BDATE); JSONObject city = user.optJSONObject(CITY); if(city != null) { this.city = new VKApiCity().parse(city); } JSONObject country = user.optJSONObject(COUNTRY); if(country != null) { this.country = new VKApiCountry().parse(country); } // education universities = new VKList<VKApiUniversity>(user.optJSONArray(UNIVERSITIES), VKApiUniversity.class); schools = new VKList<VKApiSchool>(user.optJSONArray(SCHOOLS), VKApiSchool.class); // status activity = user.optString(ACTIVITY); JSONObject status_audio = user.optJSONObject("status_audio"); if(status_audio != null) this.status_audio = new VKApiAudio().parse(status_audio); // personal views JSONObject personal = user.optJSONObject(PERSONAL); if (personal != null) { smoking = personal.optInt("smoking"); alcohol = personal.optInt("alcohol"); political = personal.optInt("political"); life_main = personal.optInt("life_main"); people_main = personal.optInt("people_main"); inspired_by = personal.optString("inspired_by"); religion = personal.optString("religion"); if (personal.has("langs")) { JSONArray langs = personal.optJSONArray("langs"); if (langs != null) { this.langs = new String[langs.length()]; for (int i = 0; i < langs.length(); i++) { this.langs[i] = langs.optString(i); } } } } // contacts facebook = user.optString("facebook"); facebook_name = user.optString("facebook_name"); livejournal = user.optString("livejournal"); site = user.optString(SITE); screen_name = user.optString("screen_name", "id" + id); skype = user.optString("skype"); mobile_phone = user.optString("mobile_phone"); home_phone = user.optString("home_phone"); twitter = user.optString("twitter"); instagram = user.optString("instagram"); // personal info about = user.optString(ABOUT); activities = user.optString(ACTIVITIES); books = user.optString(BOOKS); games = user.optString(GAMES); interests = user.optString(INTERESTS); movies = user.optString(MOVIES); quotes = user.optString(QUOTES); tv = user.optString(TV); // settings nickname = user.optString("nickname", null); can_post = parseBoolean(user, CAN_POST); can_see_all_posts = parseBoolean(user, CAN_SEE_ALL_POSTS); blacklisted_by_me = parseBoolean(user, BLACKLISTED_BY_ME); can_write_private_message = parseBoolean(user, CAN_WRITE_PRIVATE_MESSAGE); wall_comments = parseBoolean(user, WALL_DEFAULT); String deactivated = user.optString("deactivated"); is_deleted = "deleted".equals(deactivated); is_banned = "banned".equals(deactivated); wall_default_owner = "owner".equals(user.optString(WALL_DEFAULT)); verified = parseBoolean(user, VERIFIED); // other sex = user.optInt(SEX); JSONObject counters = user.optJSONObject(COUNTERS); if (counters != null) this.counters = new Counters(counters); relation = user.optInt(RELATION); if (user.has(RELATIVES)) { if (relatives == null) { relatives = new VKList<Relative>(); } relatives.fill(user.optJSONArray(RELATIVES), Relative.class); } return this; } public static class Relative extends VKApiModel implements android.os.Parcelable, Identifiable { public int id; public String name; @Override public int getId() { return id; } @Override public Relative parse(JSONObject response) { id = response.optInt("id"); name = response.optString("name"); return this; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.id); dest.writeString(this.name); } private Relative(Parcel in) { this.id = in.readInt(); this.name = in.readString(); } public static Creator<Relative> CREATOR = new Creator<Relative>() { public Relative createFromParcel(Parcel source) { return new Relative(source); } public Relative[] newArray(int size) { return new Relative[size]; } }; } public static class Counters implements android.os.Parcelable { /** * Count was not in server response. */ public final static int NO_COUNTER = -1; public int albums = NO_COUNTER; public int videos = NO_COUNTER; public int audios = NO_COUNTER; public int notes = NO_COUNTER; public int friends = NO_COUNTER; public int photos = NO_COUNTER; public int groups = NO_COUNTER; public int online_friends = NO_COUNTER; public int mutual_friends = NO_COUNTER; public int user_videos = NO_COUNTER; public int followers = NO_COUNTER; public int subscriptions = NO_COUNTER; public int pages = NO_COUNTER; Counters(JSONObject counters) { albums = counters.optInt("albums", albums); audios = counters.optInt("audios", audios); followers = counters.optInt("followers", followers); photos = counters.optInt("photos", photos); friends = counters.optInt("friends", friends); groups = counters.optInt("groups", groups); mutual_friends = counters.optInt("mutual_friends", mutual_friends); notes = counters.optInt("notes", notes); online_friends = counters.optInt("online_friends", online_friends); user_videos = counters.optInt("user_videos", user_videos); videos = counters.optInt("videos", videos); subscriptions = counters.optInt("subscriptions", subscriptions); pages = counters.optInt("pages", pages); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.albums); dest.writeInt(this.videos); dest.writeInt(this.audios); dest.writeInt(this.notes); dest.writeInt(this.friends); dest.writeInt(this.photos); dest.writeInt(this.groups); dest.writeInt(this.online_friends); dest.writeInt(this.mutual_friends); dest.writeInt(this.user_videos); dest.writeInt(this.followers); dest.writeInt(this.subscriptions); dest.writeInt(this.pages); } private Counters(Parcel in) { this.albums = in.readInt(); this.videos = in.readInt(); this.audios = in.readInt(); this.notes = in.readInt(); this.friends = in.readInt(); this.photos = in.readInt(); this.groups = in.readInt(); this.online_friends = in.readInt(); this.mutual_friends = in.readInt(); this.user_videos = in.readInt(); this.followers = in.readInt(); this.subscriptions = in.readInt(); this.pages = in.readInt(); } public static Creator<Counters> CREATOR = new Creator<Counters>() { public Counters createFromParcel(Parcel source) { return new Counters(source); } public Counters[] newArray(int size) { return new Counters[size]; } }; } public static class Sex { private Sex() { } public static final int FEMALE = 1; public static final int MALE = 2; } public static class Relation { private Relation() { } public static final int SINGLE = 1; public static final int RELATIONSHIP = 2; public static final int ENGAGED = 3; public static final int MARRIED = 4; public static final int COMPLICATED = 5; public static final int SEARCHING = 6; public static final int IN_LOVE = 7; } public static class Attitude { private Attitude() { } public static final int VERY_NEGATIVE = 1; public static final int NEGATIVE = 2; public static final int COMPROMISABLE = 3; public static final int NEUTRAL = 4; public static final int POSITIVE = 5; } public static class Political { private Political() { } public static final int COMMUNNIST = 1; public static final int SOCIALIST = 2; public static final int CENTRIST = 3; public static final int LIBERAL = 4; public static final int CONSERVATIVE = 5; public static final int MONARCHIST = 6; public static final int ULTRACONSERVATIVE = 7; public static final int LIBERTARIAN = 8; public static final int APATHETIC = 9; } public static class LifeMain { private LifeMain() { } public static final int FAMILY_AND_CHILDREN = 1; public static final int CAREER_AND_MONEY = 2; public static final int ENTERTAINMENT_AND_LEISURE = 3; public static final int SCIENCE_AND_RESEARCH = 4; public static final int IMPROOVING_THE_WORLD = 5; public static final int PERSONAL_DEVELOPMENT = 6; public static final int BEAUTY_AND_ART = 7; public static final int FAME_AND_INFLUENCE = 8; } public static class PeopleMain { private PeopleMain() { } public static final int INTELLECT_AND_CREATIVITY = 1; public static final int KINDNESS_AND_HONESTLY = 2; public static final int HEALTH_AND_BEAUTY = 3; public static final int WEALTH_AND_POWER = 4; public static final int COURAGE_AND_PERSISTENCE = 5; public static final int HUMOR_AND_LOVE_FOR_LIFE = 6; } public static class RelativeType { private RelativeType() { } public static final String PARTNER = "partner"; public static final String GRANDCHILD = "grandchild"; public static final String GRANDPARENT = "grandparent"; public static final String CHILD = "child"; public static final String SUBLING = "sibling"; public static final String PARENT = "parent"; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeString(this.activity); dest.writeParcelable(this.status_audio, flags); dest.writeString(this.bdate); dest.writeParcelable(this.city, flags); dest.writeParcelable(this.country, flags); dest.writeLong(this.last_seen); dest.writeParcelable(this.universities, flags); dest.writeParcelable(this.schools, flags); dest.writeInt(this.smoking); dest.writeInt(this.alcohol); dest.writeInt(this.political); dest.writeInt(this.life_main); dest.writeInt(this.people_main); dest.writeString(this.inspired_by); dest.writeStringArray(this.langs); dest.writeString(this.religion); dest.writeString(this.facebook); dest.writeString(this.facebook_name); dest.writeString(this.livejournal); dest.writeString(this.skype); dest.writeString(this.site); dest.writeString(this.twitter); dest.writeString(this.instagram); dest.writeString(this.mobile_phone); dest.writeString(this.home_phone); dest.writeString(this.screen_name); dest.writeString(this.activities); dest.writeString(this.interests); dest.writeString(this.movies); dest.writeString(this.tv); dest.writeString(this.books); dest.writeString(this.games); dest.writeString(this.about); dest.writeString(this.quotes); dest.writeByte(can_post ? (byte) 1 : (byte) 0); dest.writeByte(can_see_all_posts ? (byte) 1 : (byte) 0); dest.writeByte(can_write_private_message ? (byte) 1 : (byte) 0); dest.writeByte(wall_comments ? (byte) 1 : (byte) 0); dest.writeByte(is_banned ? (byte) 1 : (byte) 0); dest.writeByte(is_deleted ? (byte) 1 : (byte) 0); dest.writeByte(wall_default_owner ? (byte) 1 : (byte) 0); dest.writeByte(verified ? (byte) 1 : (byte) 0); dest.writeInt(this.sex); dest.writeParcelable(this.counters, flags); dest.writeInt(this.relation); dest.writeParcelable(this.relatives, flags); dest.writeByte(blacklisted_by_me ? (byte) 1 : (byte) 0); } public VKApiUserFull() {} public VKApiUserFull(Parcel in) { super(in); this.activity = in.readString(); this.status_audio = in.readParcelable(VKApiAudio.class.getClassLoader()); this.bdate = in.readString(); this.city = in.readParcelable(VKApiCity.class.getClassLoader()); this.country = in.readParcelable(VKApiCountry.class.getClassLoader()); this.last_seen = in.readLong(); this.universities = in.readParcelable(VKList.class.getClassLoader()); this.schools = in.readParcelable(VKList.class.getClassLoader()); this.smoking = in.readInt(); this.alcohol = in.readInt(); this.political = in.readInt(); this.life_main = in.readInt(); this.people_main = in.readInt(); this.inspired_by = in.readString(); this.langs = in.createStringArray(); this.religion = in.readString(); this.facebook = in.readString(); this.facebook_name = in.readString(); this.livejournal = in.readString(); this.skype = in.readString(); this.site = in.readString(); this.twitter = in.readString(); this.instagram = in.readString(); this.mobile_phone = in.readString(); this.home_phone = in.readString(); this.screen_name = in.readString(); this.activities = in.readString(); this.interests = in.readString(); this.movies = in.readString(); this.tv = in.readString(); this.books = in.readString(); this.games = in.readString(); this.about = in.readString(); this.quotes = in.readString(); this.can_post = in.readByte() != 0; this.can_see_all_posts = in.readByte() != 0; this.can_write_private_message = in.readByte() != 0; this.wall_comments = in.readByte() != 0; this.is_banned = in.readByte() != 0; this.is_deleted = in.readByte() != 0; this.wall_default_owner = in.readByte() != 0; this.verified = in.readByte() != 0; this.sex = in.readInt(); this.counters = in.readParcelable(Counters.class.getClassLoader()); this.relation = in.readInt(); this.relatives = in.readParcelable(VKList.class.getClassLoader()); this.blacklisted_by_me = in.readByte() != 0; } public static Creator<VKApiUserFull> CREATOR = new Creator<VKApiUserFull>() { public VKApiUserFull createFromParcel(Parcel source) { return new VKApiUserFull(source); } public VKApiUserFull[] newArray(int size) { return new VKApiUserFull[size]; } }; }