/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.service;
import java.io.FileNotFoundException;
import java.io.IOException;
import WriteReviewOperation.MediaRef;
import android.content.Context;
import android.net.Uri;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import com.android.volley.NoConnectionError;
import com.android.volley.Request;
import com.android.volley.VolleyError;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.PanoramaDetector;
import com.galaxy.meetup.client.util.FIFEUtil;
import com.galaxy.meetup.client.util.ImageUtils;
import com.galaxy.meetup.client.util.MediaStoreUtils;
import com.galaxy.meetup.client.util.ScreenMetrics;
import com.galaxy.picasa.Config;
import com.galaxy.picasa.store.PicasaStoreFacade;
import com.galaxy.picasa.sync.PicasaFacade;
/**
*
* @author sihai
*
*/
public class ResourceDownloader {
private static int sLandscapeHeight;
private static int sLandscapeWidth;
private static int sPortraitHeight;
private static int sPortraitWidth;
private static ResourceRequestFilter sRequestFilter = new ResourceRequestFilter();
private Context mContext;
private VolleyRequestQueue mRequestQueue;
public ResourceDownloader(Context context, Handler handler) {
mContext = context.getApplicationContext();
int i = ScreenMetrics.getInstance(context).longDimension;
int j = i / 2;
sPortraitHeight = j;
sPortraitWidth = j / context.getResources().getDimensionPixelSize(R.dimen.media_max_portrait_aspect_ratio);
int k = i / 2;
sLandscapeWidth = k;
sLandscapeHeight = k / context.getResources().getDimensionPixelSize(R.dimen.media_min_landscape_aspect_ratio);
mRequestQueue = new VolleyRequestQueue(context, handler);
}
public static void loadLocalResource(Context context, Resource resource, Uri uri, int i, int j, int k) {
if(resource.isDebugLogEnabled())
resource.logDebug((new StringBuilder("Loading local resource ")).append(uri).toString());
boolean flag = ImageUtils.isVideoMimeType(ImageUtils.getMimeType(context.getContentResolver(), uri));
boolean flag1 = MediaStoreUtils.isMediaStoreUri(uri);
if(!flag)
PanoramaDetector.detectPanorama(context, resource, uri);
if(i == 2) {
k = Config.sThumbNailSize;
j = k;
} else {
switch(i) {
case 0:
case 1:
break;
case 2:
throw new UnsupportedOperationException();
case 3:
case 4:
case 5:
k = Config.sScreenNailSize;
j = k;
break;
default:
throw new UnsupportedOperationException();
}
}
try {
android.graphics.Bitmap bitmap = null;
int l;
if(!flag1) {
if(!flag) {
if(i != 1) {
l = Math.max(j, k);
} else {
l = 0;
}
bitmap = ImageUtils.createLocalBitmap(context.getContentResolver(), uri, l);
} else {
int i1 = ImageUtils.getMaxThumbnailDimension(context, 3);
byte byte0;
if(j > i1 || k > i1)
byte0 = 1;
else
byte0 = 3;
bitmap = ImageUtils.createVideoThumbnail(context, uri, byte0);
}
} else {
if(i != 2 && !flag) {
if(i == 1)
bitmap = android.provider.MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
else
bitmap = ImageUtils.createLocalBitmap(context.getContentResolver(), uri, Math.max(j, k));
} else {
bitmap = MediaStoreUtils.getThumbnail(context, uri, j, k);
}
}
if(bitmap == null)
resource.deliverDownloadError(4);
else
resource.deliverResource(bitmap);
} catch (FileNotFoundException e) {
resource.deliverDownloadError(4);
} catch (IOException e) {
resource.deliverDownloadError(6);
}
}
public final void cancelDownload(Resource resource) {
synchronized (sRequestFilter) {
sRequestFilter.resource = resource;
mRequestQueue.cancelAll(sRequestFilter);
}
}
public final void downloadResource(Resource resource, MediaRef mediaref, int i, int j, int k, boolean flag) {
String s = mediaref.getUrl();
Uri uri;
long l;
if(s != null && !flag)
{
if(s.startsWith("//"))
s = (new StringBuilder("http:")).append(s).toString();
if(FIFEUtil.isFifeHostedUrl(s))
{
Uri uri1 = Uri.parse(s);
String s3 = FIFEUtil.getImageUriOptions(uri1);
if(!s3.contains("k"))
{
String s4;
if(TextUtils.isEmpty(s3))
s4 = "k";
else
s4 = (new StringBuilder()).append(s3).append("-k").toString();
s = FIFEUtil.setImageUriOptions(s4, uri1).toString();
}
}
}
uri = mediaref.getLocalUri();
l = mediaref.getPhotoId();
if(l != 0L)
{
Context context = mContext;
String s1 = mediaref.getOwnerGaiaId();
boolean flag1;
if(s1 == null)
{
flag1 = false;
} else
{
EsAccount esaccount = EsService.getActiveAccount(context);
if(esaccount == null)
flag1 = false;
else
flag1 = esaccount.isMyGaiaId(s1);
}
if(flag1 && i != 0 && i != 1)
{
String s2;
if(i == 2)
s2 = "thumbnail";
else
s2 = "screennail";
if(s != null && !s.startsWith("content:"))
uri = PicasaStoreFacade.get(mContext).getPhotoUri(l, s2, s);
else
uri = PicasaFacade.get(mContext).getPhotoUri(l).buildUpon().appendQueryParameter("type", s2).build();
}
}
mRequestQueue.add(new DownloadRequest(resource, uri, s, i, j, k));
}
public final void downloadResource(Resource resource, String s) {
mRequestQueue.add(new DownloadRequest(resource, s));
}
private static final class DownloadRequest extends VolleyRequest {
private final boolean mConstructDownloadUrl;
private String mDownloadUrl;
private final int mHeight;
private final Resource mResource;
private final int mSizeCategory;
private final String mUrl;
private final int mWidth;
public DownloadRequest(Resource resource, Uri uri, String s, int i,
int j, int k) {
this(resource, uri, s, i, j, k, true);
}
public DownloadRequest(Resource resource, Uri uri, String s, int i,
int j, int k, boolean flag) {
super(null, uri);
mUrl = s;
mResource = resource;
mSizeCategory = i;
mWidth = j;
mHeight = k;
mConstructDownloadUrl = flag;
setShouldCache(false);
}
public DownloadRequest(Resource resource, String s) {
this(resource, null, s, -1, 0, 0, false);
}
public final void deliverError(VolleyError volleyerror) {
if (mResource.isDebugLogEnabled()) {
Resource _tmp = mResource;
Log.e("EsResource", (new StringBuilder("Failed to download "))
.append(mUrl).toString(), volleyerror);
}
if (volleyerror instanceof VolleyOutOfMemoryError)
mResource.deliverDownloadError(7);
else if (volleyerror instanceof NoConnectionError) {
mResource.deliverDownloadError(5);
} else {
int i;
if (volleyerror.networkResponse != null)
i = volleyerror.networkResponse.statusCode;
else
i = 0;
mResource.deliverHttpError(i);
}
}
public final void deliverResponse(Object obj) {
deliverResponse((byte[]) obj);
}
public final void deliverResponse(byte abyte0[]) {
mResource.deliverData(abyte0, true);
}
public final String getUrl() {
if(!mConstructDownloadUrl || mDownloadUrl != null) {
mDownloadUrl = mUrl;
return mDownloadUrl;
}
String s = mUrl;
if(s.startsWith("//"))
s = (new StringBuilder("http:")).append(s).toString();
switch(mSizeCategory) {
case 0:
if(mWidth == 0 || mHeight == 0)
mDownloadUrl = ImageUtils.getResizedUrl(mWidth, mHeight, s);
else
mDownloadUrl = ImageUtils.getCenterCroppedAndResizedUrl(mWidth, mHeight, s);
break;
case 1:
mDownloadUrl = PicasaStoreFacade.convertImageUrl(s, 0, false);
break;
case 2:
mDownloadUrl = PicasaStoreFacade.convertImageUrl(s, Config.sThumbNailSize, true);
break;
case 3:
mDownloadUrl = PicasaStoreFacade.convertImageUrl(s, Config.sScreenNailSize, false);
break;
case 4:
mDownloadUrl = ImageUtils.getCenterCroppedAndResizedUrl(ResourceDownloader.sPortraitWidth, ResourceDownloader.sPortraitHeight, s);
break;
case 5:
mDownloadUrl = ImageUtils.getCenterCroppedAndResizedUrl(ResourceDownloader.sLandscapeWidth, ResourceDownloader.sLandscapeHeight, s);
break;
default:
break;
}
return mDownloadUrl;
}
}
private static final class ResourceRequestFilter implements
com.android.volley.RequestQueue.RequestFilter {
public Resource resource;
private ResourceRequestFilter() {
}
public final boolean apply(Request request) {
boolean flag;
if (((DownloadRequest) request).mResource == resource)
flag = true;
else
flag = false;
return flag;
}
}
}