/**
* Copyright 2012 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.widget;
import android.content.Context;
import android.net.Uri;
import com.facebook.internal.Validate;
import java.net.MalformedURLException;
import java.net.URL;
class ImageRequest {
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);
}
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 URL imageUrl;
private Callback callback;
private boolean allowCachedRedirects;
private Object callerTag;
static URL getProfilePictureUrl(
String userId,
int width,
int height)
throws MalformedURLException {
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 URL(builder.toString());
}
private ImageRequest(Builder builder) {
this.context = builder.context;
this.imageUrl = builder.imageUrl;
this.callback = builder.callback;
this.allowCachedRedirects = builder.allowCachedRedirects;
this.callerTag = builder.callerTag == null ? new Object() : builder.callerTag;
}
Context getContext() {
return context;
}
URL getImageUrl() {
return imageUrl;
}
Callback getCallback() {
return callback;
}
boolean isCachedRedirectAllowed() {
return allowCachedRedirects;
}
Object getCallerTag() {
return callerTag;
}
static class Builder {
// Required
private Context context;
private URL imageUrl;
// Optional
private Callback callback;
private boolean allowCachedRedirects;
private Object callerTag;
Builder(Context context, URL imageUrl) {
Validate.notNull(imageUrl, "imageUrl");
this.context = context;
this.imageUrl = imageUrl;
}
Builder setCallback(Callback callback) {
this.callback = callback;
return this;
}
Builder setCallerTag(Object callerTag) {
this.callerTag = callerTag;
return this;
}
Builder setAllowCachedRedirects(boolean allowCachedRedirects) {
this.allowCachedRedirects = allowCachedRedirects;
return this;
}
ImageRequest build() {
return new ImageRequest(this);
}
}
}