/*
*
* * Copyright 2015 Van Shu
* *
* * 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.mobimvp.cliques.service;
import android.app.ActivityManager;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.widget.ImageView;
import com.android.volley.Cache;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.BasicNetwork;
import com.android.volley.toolbox.DiskBasedCache;
import com.android.volley.toolbox.ImageLoader;
import com.mobimvp.cliques.AppData;
import com.mobimvp.cliques.util.BitmapLruCache;
import com.mobimvp.cliques.util.StethoInterceptor;
import com.squareup.okhttp.OkHttpClient;
import java.io.File;
public class RequestManager {
private static final int MEM_CACHE_SIZE = 1024 * 1024 * ((ActivityManager) AppData.getContext()
.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass() / 3;
public static RequestQueue mRequestQueue = newRequestQueue();
private static ImageLoader mImageLoader = new ImageLoader(mRequestQueue, new BitmapLruCache(
MEM_CACHE_SIZE));
private static DiskBasedCache mDiskCache = (DiskBasedCache) mRequestQueue.getCache();
private RequestManager() {
}
private static Cache openCache() {
return new DiskBasedCache(AppData.getContext().getExternalCacheDir(),
10 * 1024 * 1024);
}
private static RequestQueue newRequestQueue() {
OkHttpClient okHttpClient=new OkHttpClient();
okHttpClient.networkInterceptors().add(new StethoInterceptor());
RequestQueue requestQueue = new RequestQueue(openCache(), new BasicNetwork(new OkHttpStack(okHttpClient)));
requestQueue.start();
return requestQueue;
}
public static void addRequest(Request<?> request, Object tag) {
if (tag != null) {
request.setTag(tag);
}
mRequestQueue.add(request);
}
public static void addRequest(Request<?> request) {
mRequestQueue.add(request);
}
public static void cancelAll(Object tag) {
mRequestQueue.cancelAll(tag);
}
public static File getCachedImageFile(String url) {
return mDiskCache.getFileForKey(url);
}
public static ImageLoader.ImageContainer loadImage(String requestUrl,
ImageLoader.ImageListener imageListener) {
return loadImage(requestUrl, imageListener, 0, 0);
}
public static ImageLoader.ImageContainer loadImage(String requestUrl,
ImageLoader.ImageListener imageListener, int maxWidth, int maxHeight) {
return mImageLoader.get(requestUrl, imageListener, maxWidth, maxHeight);
}
public static ImageLoader.ImageListener getImageListener(final ImageView view,
final Drawable defaultImageDrawable, final Drawable errorImageDrawable) {
return new ImageLoader.ImageListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (errorImageDrawable != null) {
view.setImageDrawable(errorImageDrawable);
}
}
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
if (response.getBitmap() != null) {
if (!isImmediate && defaultImageDrawable != null) {
TransitionDrawable transitionDrawable = new TransitionDrawable(
new Drawable[]{
defaultImageDrawable,
new BitmapDrawable(AppData.getContext().getResources(),
response.getBitmap())
});
transitionDrawable.setCrossFadeEnabled(true);
view.setImageDrawable(transitionDrawable);
transitionDrawable.startTransition(100);
} else {
view.setImageBitmap(response.getBitmap());
}
} else if (defaultImageDrawable != null) {
view.setImageDrawable(defaultImageDrawable);
}
}
};
}
}