com.facebook.Profile.java Source code

Java tutorial

Introduction

Here is the source code for com.facebook.Profile.java

Source

/**
 * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
 *
 * You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
 * copy, modify, and distribute this software in source code or binary form for use
 * in connection with the web services and APIs provided by Facebook.
 *
 * As with any software that integrates with the Facebook platform, your use of
 * this software is subject to the Facebook Developer Principles and Policies
 * [http://developers.facebook.com/policy/]. This copyright 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.facebook;

import android.net.Uri;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.Nullable;

import com.facebook.internal.ImageRequest;
import com.facebook.internal.Utility;
import com.facebook.internal.Validate;

import org.json.JSONException;
import org.json.JSONObject;

/**
 * This class represents a basic Facebook profile.
 */
public final class Profile implements Parcelable {
    private static final String ID_KEY = "id";
    private static final String FIRST_NAME_KEY = "first_name";
    private static final String MIDDLE_NAME_KEY = "middle_name";
    private static final String LAST_NAME_KEY = "last_name";
    private static final String NAME_KEY = "name";
    private static final String LINK_URI_KEY = "link_uri";

    private final String id;
    private final String firstName;
    private final String middleName;
    private final String lastName;
    private final String name;
    private final Uri linkUri;

    /**
     * Getter for the profile that is currently logged in to the application.
     * @return The profile that is currently logged in to the application.
     */
    public static Profile getCurrentProfile() {
        return ProfileManager.getInstance().getCurrentProfile();
    }

    /**
     * Setter for the profile that is currently logged in to the application. If the access token is
     * invalidated, the current profile will not be updated. It's only updated when there is an
     * explicit logout, login or when permissions change via the
     * {@link com.facebook.login.LoginManager}.
     * @param profile The profile that is currently logged in to the application.
     */
    public static void setCurrentProfile(Profile profile) {
        ProfileManager.getInstance().setCurrentProfile(profile);
    }

    /**
     * Fetches and sets the current profile from the current access token.
     * <p/>
     * This should only be called from the UI thread.
     */
    public static void fetchProfileForCurrentAccessToken() {
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        if (accessToken == null) {
            Profile.setCurrentProfile(null);
            return;
        }

        Utility.getGraphMeRequestWithCacheAsync(accessToken.getToken(),
                new Utility.GraphMeRequestWithCacheCallback() {
                    @Override
                    public void onSuccess(JSONObject userInfo) {
                        String id = userInfo.optString("id");
                        if (id == null) {
                            return;
                        }
                        String link = userInfo.optString("link");
                        Profile profile = new Profile(id, userInfo.optString("first_name"),
                                userInfo.optString("middle_name"), userInfo.optString("last_name"),
                                userInfo.optString("name"), link != null ? Uri.parse(link) : null);
                        Profile.setCurrentProfile(profile);
                    }

                    @Override
                    public void onFailure(FacebookException error) {
                        return;
                    }
                });
    }

    /**
     * Contructor.
     * @param id         The id of the profile.
     * @param firstName  The first name of the profile. Can be null.
     * @param middleName The middle name of the profile. Can be null.
     * @param lastName   The last name of the profile. Can be null.
     * @param name       The name of the profile. Can be null.
     * @param linkUri    The link for this profile. Can be null.
     */
    public Profile(final String id, @Nullable final String firstName, @Nullable final String middleName,
            @Nullable final String lastName, @Nullable final String name, @Nullable final Uri linkUri) {
        Validate.notNullOrEmpty(id, "id");

        this.id = id;
        this.firstName = firstName;
        this.middleName = middleName;
        this.lastName = lastName;
        this.name = name;
        this.linkUri = linkUri;
    }

    /**
     * Getter for the Uri of the profile picture.
     *
     * @param width  The desired width for the profile picture.
     * @param height The desired height for the profile picture.
     * @return The Uri of the profile picture.
     */
    public Uri getProfilePictureUri(int width, int height) {
        return ImageRequest.getProfilePictureUri(this.id, width, height);
    }

    /**
     * Getter for the id of the profile.
     * @return id of the profile.
     */
    public String getId() {
        return id;
    }

    /**
     * Getter for the first name of the profile.
     * @return the first name of the profile.
     */
    public String getFirstName() {
        return firstName;
    }

    /**
     * Getter for the middle name of the profile.
     * @return the middle name of the profile.
     */
    public String getMiddleName() {
        return middleName;
    }

    /**
     * Getter for the last name of the profile.
     * @return the last name of the profile.
     */
    public String getLastName() {
        return lastName;
    }

    /**
     * Getter for the name of the profile.
     * @return the name of the profile.
     */
    public String getName() {
        return name;
    }

    /**
     * Getter for the link of the profile.
     * @return the link of the profile.
     */
    public Uri getLinkUri() {
        return linkUri;
    }

    @Override
    public boolean equals(Object other) {
        if (this == other) {
            return true;
        }

        if (!(other instanceof Profile)) {
            return false;
        }

        Profile o = (Profile) other;

        return id.equals(o.id) && firstName == null ? o.firstName == null
                : firstName.equals(o.firstName) && middleName == null ? o.middleName == null
                        : middleName.equals(o.middleName) && lastName == null ? o.lastName == null
                                : lastName.equals(o.lastName) && name == null ? o.name == null
                                        : name.equals(o.name) && linkUri == null ? o.linkUri == null
                                                : linkUri.equals(o.linkUri);
    }

    @Override
    public int hashCode() {
        int result = 17;

        result = result * 31 + id.hashCode();
        if (firstName != null) {
            result = result * 31 + firstName.hashCode();
        }
        if (middleName != null) {
            result = result * 31 + middleName.hashCode();
        }
        if (lastName != null) {
            result = result * 31 + lastName.hashCode();
        }
        if (name != null) {
            result = result * 31 + name.hashCode();
        }
        if (linkUri != null) {
            result = result * 31 + linkUri.hashCode();
        }

        return result;
    }

    JSONObject toJSONObject() {
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put(ID_KEY, id);
            jsonObject.put(FIRST_NAME_KEY, firstName);
            jsonObject.put(MIDDLE_NAME_KEY, middleName);
            jsonObject.put(LAST_NAME_KEY, lastName);
            jsonObject.put(NAME_KEY, name);
            if (linkUri != null) {
                jsonObject.put(LINK_URI_KEY, linkUri.toString());
            }
        } catch (JSONException object) {
            jsonObject = null;
        }
        return jsonObject;
    }

    Profile(JSONObject jsonObject) {
        id = jsonObject.optString(ID_KEY, null);
        firstName = jsonObject.optString(FIRST_NAME_KEY, null);
        middleName = jsonObject.optString(MIDDLE_NAME_KEY, null);
        lastName = jsonObject.optString(LAST_NAME_KEY, null);
        name = jsonObject.optString(NAME_KEY, null);
        String linkUriString = jsonObject.optString(LINK_URI_KEY, null);
        linkUri = linkUriString == null ? null : Uri.parse(linkUriString);
    }

    private Profile(Parcel source) {
        id = source.readString();
        firstName = source.readString();
        middleName = source.readString();
        lastName = source.readString();
        name = source.readString();
        String linkUriString = source.readString();
        linkUri = linkUriString == null ? null : Uri.parse(linkUriString);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(id);
        dest.writeString(firstName);
        dest.writeString(middleName);
        dest.writeString(lastName);
        dest.writeString(name);
        dest.writeString(linkUri == null ? null : linkUri.toString());
    }

    public static final Parcelable.Creator<Profile> CREATOR = new Parcelable.Creator() {

        @Override
        public Profile createFromParcel(Parcel source) {
            return new Profile(source);
        }

        @Override
        public Profile[] newArray(int size) {
            return new Profile[size];
        }
    };
}