package im.amomo.volley.toolbox; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; import com.android.volley.Cache; import com.android.volley.Network; import com.android.volley.RequestQueue; import com.android.volley.toolbox.DiskBasedCache; import com.android.volley.toolbox.Volley; import com.squareup.okhttp.Dispatcher; import com.squareup.okhttp.Interceptor; import java.io.File; import java.util.HashMap; import java.util.Map; import javax.net.ssl.HostnameVerifier; import im.amomo.volley.OkHttpStack; import im.amomo.volley.OkNetwork; import im.amomo.volley.OkRequest; /** * Created by GoogolMo on 10/22/13. */ public class OkVolley extends Volley { private static RequestQueue InstanceRequestQueue; private static Cache InstanceCache; private static Network InstanceNetwork; private static OkHttpStack OkHttpStack; private static final String VERSION = "OkVolley/1.0"; /** * Default on-disk cache directory. */ private static final String DEFAULT_CACHE_DIR = "volley"; private static OkVolley sInstance; private String mUserAgent; private Map<String, String> mRequestHeaders; private Context mContext; public static OkVolley getInstance() { if (sInstance == null) { sInstance = new OkVolley(); } return sInstance; } public OkVolley() { } /** * init method please call this method in Application * * @param context ApplicationContext * @return this Volley Object */ public OkVolley init(Context context) { this.mContext = context; InstanceRequestQueue = newRequestQueue(context); mUserAgent = generateUserAgent(context); mRequestHeaders = new HashMap<>(); mRequestHeaders.put(OkRequest.HEADER_USER_AGENT, mUserAgent); mRequestHeaders.put(OkRequest.HEADER_ACCEPT_CHARSET, OkRequest.CHARSET_UTF8); return this; } /** * set default all user-agent * * @param userAgent user-agent * @return this Volley Object */ public OkVolley setUserAgent(String userAgent) { this.mUserAgent = userAgent; return this; } /** * build the default User-Agent * * @param context * @return */ public static String generateUserAgent(Context context) { StringBuilder ua = new StringBuilder("api-client/"); ua.append(VERSION); String packageName = context.getApplicationContext().getPackageName(); ua.append(" "); ua.append(packageName); PackageInfo pi = null; try { pi = context.getPackageManager().getPackageInfo(packageName, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } if (pi != null) { ua.append("/"); ua.append(pi.versionName); ua.append("("); ua.append(pi.versionCode); ua.append(")"); } ua.append(" Android/"); ua.append(Build.VERSION.SDK_INT); try { ua.append(" "); ua.append(Build.PRODUCT); } catch (Exception e) { e.printStackTrace(); } try { ua.append(" "); ua.append(Build.MANUFACTURER); } catch (Exception e) { e.printStackTrace(); } try { ua.append(" "); ua.append(Build.MODEL); } catch (Exception e) { e.printStackTrace(); } return ua.toString(); } /** * set trusted verifier * * @param verifier HostnameVerifier * @return this Volley Object */ public OkVolley setHostnameTrustedVerifier(HostnameVerifier verifier) { OkHttpStack.setHostnameVerifier(verifier); return this; } /** * trust all certs * * @return this Volley Object */ public OkVolley trustAllCerts() { OkHttpStack.trustAllCerts(); return this; } /** * get the default request headers * * @return the default request headers */ public Map<String, String> getDefaultHeaders() { return this.mRequestHeaders; } /** * get the default request queue * * @return default {@link com.android.volley.RequestQueue} */ public RequestQueue getRequestQueue() { if (InstanceRequestQueue == null) { InstanceRequestQueue = newRequestQueue(mContext); } return InstanceRequestQueue; } /** * getRquest queue static * * @param context * @return {@link com.android.volley.RequestQueue} */ @Deprecated public static RequestQueue getRequestQueue(Context context) { if (InstanceRequestQueue == null) { InstanceRequestQueue = newRequestQueue(context); } return InstanceRequestQueue; } public static RequestQueue newRequestQueue(Context context) { if (InstanceNetwork == null) { InstanceNetwork = new OkNetwork(getDefaultHttpStack()); } if (InstanceCache == null) { File cache = context.getExternalCacheDir(); if (cache == null) { cache = context.getCacheDir(); } File cacheDir = new File(cache, DEFAULT_CACHE_DIR); InstanceCache = new DiskBasedCache(cacheDir); } RequestQueue queue = new RequestQueue(InstanceCache, InstanceNetwork); queue.start(); return queue; } protected static OkHttpStack getDefaultHttpStack() { if (OkHttpStack == null) { OkHttpStack = new OkHttpStack(); } return OkHttpStack; } public void setDispatcher(Dispatcher dispatcher) { if (dispatcher == null) { return; } getDefaultHttpStack().setDispatcher(dispatcher); } /** * add OkHttp interceptor * @param interceptor {@link Interceptor} */ public void addInterceptor(Interceptor interceptor) { if (interceptor == null) { return; } getDefaultHttpStack().addInterceptor(interceptor); } /** * add OkHttp networkInterceptor * @param interceptor {@link Interceptor} */ public void addNetworkInterceptor(Interceptor interceptor) { if (interceptor == null) { return; } getDefaultHttpStack().addNetworkInterceptor(interceptor); } /** * remove OkHttp interceptor * @param interceptor {@link Interceptor} */ public void removeInterceptor(Interceptor interceptor) { if (interceptor == null) { return; } getDefaultHttpStack().removeInterceptor(interceptor); } /** * remove OkHttp networkInterceptor * @param interceptor {@link Interceptor} */ public void removeNetworkInterceptor(Interceptor interceptor) { if (interceptor == null) { return; } getDefaultHttpStack().removeNetworkInterceptor(interceptor); } }