/**
* 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.internal;
import android.content.Context;
import android.net.Uri;
import java.util.Locale;
/**
* com.facebook.internal is solely for the use of other packages within the
* Facebook SDK for Android. Use of any of the classes in this package is
* unsupported, and they may be modified or removed without warning at any time.
*/
public class ImageRequest {
public interface Callback {
/**
* This method should always be called on the UI thread. ImageDownloader makes
* sure to do this when it is responsible for issuing the ImageResponse
* @param response
*/
void onCompleted(ImageResponse response);
}
public static final int UNSPECIFIED_DIMENSION = 0;
private static final String SCHEME = "https";
private static final String AUTHORITY = "graph.facebook.com";
private static final String PATH = "%s/picture";
private static final String HEIGHT_PARAM = "height";
private static final String WIDTH_PARAM = "width";
private static final String MIGRATION_PARAM = "migration_overrides";
private static final String MIGRATION_VALUE = "{october_2012:true}";
private Context context;
private Uri imageUri;
private Callback callback;
private boolean allowCachedRedirects;
private Object callerTag;
public static Uri getProfilePictureUri(
String userId,
int width,
int height) {
Validate.notNullOrEmpty(userId, "userId");
width = Math.max(width, UNSPECIFIED_DIMENSION);
height = Math.max(height, UNSPECIFIED_DIMENSION);
if (width == UNSPECIFIED_DIMENSION && height == UNSPECIFIED_DIMENSION) {
throw new IllegalArgumentException("Either width or height must be greater than 0");
}
Uri.Builder builder =
new Uri.Builder()
.scheme(SCHEME)
.authority(AUTHORITY)
.path(String.format(Locale.US, PATH, userId));
if (height != UNSPECIFIED_DIMENSION) {
builder.appendQueryParameter(HEIGHT_PARAM, String.valueOf(height));
}
if (width != UNSPECIFIED_DIMENSION) {
builder.appendQueryParameter(WIDTH_PARAM, String.valueOf(width));
}
builder.appendQueryParameter(MIGRATION_PARAM, MIGRATION_VALUE);
return builder.build();
}
private ImageRequest(Builder builder) {
this.context = builder.context;
this.imageUri = builder.imageUrl;
this.callback = builder.callback;
this.allowCachedRedirects = builder.allowCachedRedirects;
this.callerTag = builder.callerTag == null ? new Object() : builder.callerTag;
}
public Context getContext() {
return context;
}
public Uri getImageUri() {
return imageUri;
}
public Callback getCallback() {
return callback;
}
public boolean isCachedRedirectAllowed() {
return allowCachedRedirects;
}
public Object getCallerTag() {
return callerTag;
}
public static class Builder {
// Required
private Context context;
private Uri imageUrl;
// Optional
private Callback callback;
private boolean allowCachedRedirects;
private Object callerTag;
public Builder(Context context, Uri imageUri) {
Validate.notNull(imageUri, "imageUri");
this.context = context;
this.imageUrl = imageUri;
}
public Builder setCallback(Callback callback) {
this.callback = callback;
return this;
}
public Builder setCallerTag(Object callerTag) {
this.callerTag = callerTag;
return this;
}
public Builder setAllowCachedRedirects(boolean allowCachedRedirects) {
this.allowCachedRedirects = allowCachedRedirects;
return this;
}
public ImageRequest build() {
return new ImageRequest(this);
}
}
}