/**
* Copyright 2010-present Facebook.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.facebook.internal;
import android.content.Context;
import android.net.Uri;
import java.net.URI;
import java.net.URISyntaxException;
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 PROFILEPIC_URL_FORMAT =
"https://graph.facebook.com/%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 getProfilePictureUrl(
String userId,
int width,
int height)
throws URISyntaxException {
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().encodedPath(String.format(PROFILEPIC_URL_FORMAT, 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 new URI(builder.toString());
}
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 imageUrl) {
Validate.notNull(imageUrl, "imageUrl");
this.context = context;
this.imageUrl = imageUrl;
}
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);
}
}
}