/** * 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.share.model; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.Nullable; import java.util.ArrayList; import java.util.Set; /** * Provides an abstract class to contain Open Graph values. * * Use {@link ShareOpenGraphValueContainer.Builder} to create instances */ public abstract class ShareOpenGraphValueContainer <P extends ShareOpenGraphValueContainer, E extends ShareOpenGraphValueContainer.Builder> implements ShareModel { private final Bundle bundle; protected ShareOpenGraphValueContainer( final Builder<P, E> builder) { super(); this.bundle = (Bundle)builder.bundle.clone(); } ShareOpenGraphValueContainer(final Parcel in) { this.bundle = in.readBundle(Builder.class.getClassLoader()); } /** * Gets a value out of the object. * @param key The key for the value. * @return The boolean value. */ @Nullable public Object get(String key) { return this.bundle.get(key); } /** * Gets a boolean value out of the object. * @param key The key for the value. * @param defaultValue The value to return if no value is found for the specified key. * @return The boolean value. */ public boolean getBoolean(final String key, final boolean defaultValue) { return this.bundle.getBoolean(key, defaultValue); } /** * Gets an array of boolean values out of the object. * @param key The key for the value. * @return The boolean values. */ @Nullable public boolean[] getBooleanArray(final String key) { return this.bundle.getBooleanArray(key); } /** * Gets a double value out of the object. * @param key The key for the value. * @param defaultValue The value to return if no value is found for the specified key. * @return The double value. */ public double getDouble(final String key, final double defaultValue) { return this.bundle.getDouble(key, defaultValue); } /** * Gets an array of double values out of the object. * @param key The key for the value. * @return The double values. */ @Nullable public double[] getDoubleArray(final String key) { return this.bundle.getDoubleArray(key); } /** * Gets an int value out of the object. * @param key The key for the value. * @param defaultValue The value to return if no value is found for the specified key. * @return The int value. */ public int getInt(final String key, final int defaultValue) { return this.bundle.getInt(key, defaultValue); } /** * Gets an array of int values out of the object. * @param key The key for the value. * @return The int values. */ @Nullable public int[] getIntArray(final String key) { return this.bundle.getIntArray(key); } /** * Gets an long value out of the object. * @param key The key for the value. * @param defaultValue The value to return if no value is found for the specified key. * @return The long value. */ public long getLong(final String key, final long defaultValue) { return this.bundle.getLong(key, defaultValue); } /** * Gets an array of long values out of the object. * @param key The key for the value. * @return The long values. */ @Nullable public long[] getLongArray(final String key) { return this.bundle.getLongArray(key); } /** * Gets an object value out of the object. * @param key The key for the value. * @return The object value. */ public ShareOpenGraphObject getObject(final String key) { final Object value = this.bundle.get(key); return (value instanceof ShareOpenGraphObject ? (ShareOpenGraphObject)value : null); } /** * Gets an array of object values out of the object. * @param key The key for the value. * @return The object values. */ @Nullable public ArrayList<ShareOpenGraphObject> getObjectArrayList(final String key) { final ArrayList<Parcelable> items = this.bundle.getParcelableArrayList(key); if (items == null) { return null; } final ArrayList<ShareOpenGraphObject> list = new ArrayList<ShareOpenGraphObject>(); for (Parcelable item : items) { if (item instanceof ShareOpenGraphObject) { list.add((ShareOpenGraphObject)item); } } return list; } /** * Gets a photo value out of the object. * @param key The key for the value. * @return The photo value. */ @Nullable public SharePhoto getPhoto(final String key) { final Object value = this.bundle.getParcelable(key); return (value instanceof SharePhoto ? (SharePhoto)value : null); } /** * Gets an array of photo values out of the object. * @param key The key for the value. * @return The photo values. */ @Nullable public ArrayList<SharePhoto> getPhotoArrayList(final String key) { final ArrayList<Parcelable> items = this.bundle.getParcelableArrayList(key); if (items == null) { return null; } final ArrayList<SharePhoto> list = new ArrayList<SharePhoto>(); for (Parcelable item : items) { if (item instanceof SharePhoto) { list.add((SharePhoto)item); } } return list; } /** * Gets a string value out of the object. * @param key The key for the value. * @return The string value. */ @Nullable public String getString(final String key) { return this.bundle.getString(key); } /** * Gets an array of string values out of the object. * @param key The key for the value. * @return The string values. */ @Nullable public ArrayList<String> getStringArrayList(final String key) { return this.bundle.getStringArrayList(key); } /** * Returns the values in the container packaged in a bundle. * @return A bundle with the values. */ public Bundle getBundle() { return (Bundle)this.bundle.clone(); } /** * Returns a set of the keys contained in this object. * @return A set of the keys. */ public Set<String> keySet() { return this.bundle.keySet(); } public int describeContents() { return 0; } public void writeToParcel(final Parcel out, final int flags) { out.writeBundle(this.bundle); } /** * Abstract builder for the {@link com.facebook.share.model.ShareOpenGraphValueContainer} class. */ public abstract static class Builder <P extends ShareOpenGraphValueContainer, E extends Builder> implements ShareModelBuilder<P, E> { private Bundle bundle = new Bundle(); /** * Sets a boolean value in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putBoolean(final String key, final boolean value) { this.bundle.putBoolean(key, value); return (E)this; } /** * Sets an array of boolean values in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putBooleanArray(final String key, @Nullable final boolean[] value) { this.bundle.putBooleanArray(key, value); return (E)this; } /** * Sets a double value in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putDouble(final String key, final double value) { this.bundle.putDouble(key, value); return (E)this; } /** * Sets an array of double values in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putDoubleArray(final String key, @Nullable final double[] value) { this.bundle.putDoubleArray(key, value); return (E)this; } /** * Sets an int value in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putInt(final String key, final int value) { this.bundle.putInt(key, value); return (E)this; } /** * Sets an array of int values in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putIntArray(final String key, @Nullable final int[] value) { this.bundle.putIntArray(key, value); return (E)this; } /** * Sets a long value in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putLong(final String key, final long value) { this.bundle.putLong(key, value); return (E)this; } /** * Sets an array of long values in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putLongArray(final String key, @Nullable final long[] value) { this.bundle.putLongArray(key, value); return (E)this; } /** * Sets an object value in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putObject(final String key, @Nullable final ShareOpenGraphObject value) { this.bundle.putParcelable(key, value); return (E)this; } /** * Sets an array of object values in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putObjectArrayList( final String key, @Nullable final ArrayList<ShareOpenGraphObject> value) { this.bundle.putParcelableArrayList(key, value); return (E)this; } /** * Sets a photo value in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putPhoto(final String key, @Nullable final SharePhoto value) { this.bundle.putParcelable(key, value); return (E)this; } /** * Sets an array of photo values in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putPhotoArrayList(final String key, @Nullable final ArrayList<SharePhoto> value) { this.bundle.putParcelableArrayList(key, value); return (E) this; } /** * Sets a string value in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putString(final String key, @Nullable final String value) { this.bundle.putString(key, value); return (E) this; } /** * Sets an array of string values in the object. * @param key The key for the value. * @param value The value. * @return The builder. */ public E putStringArrayList(final String key, @Nullable final ArrayList<String> value) { this.bundle.putStringArrayList(key, value); return (E) this; } @Override public E readFrom(final P model) { if (model != null) { this.bundle.putAll(model.getBundle()); } return (E)this; } } }