10acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton/* 20acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * Copyright (C) 2012 The Android Open Source Project 30acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * 40acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * Licensed under the Apache License, Version 2.0 (the "License"); 50acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * you may not use this file except in compliance with the License. 60acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * You may obtain a copy of the License at 70acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * 80acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * http://www.apache.org/licenses/LICENSE-2.0 90acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * 100acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * Unless required by applicable law or agreed to in writing, software 110acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * distributed under the License is distributed on an "AS IS" BASIS, 120acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * See the License for the specific language governing permissions and 140acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * limitations under the License. 150acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton */ 160acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 170acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charltonpackage com.android.volley.toolbox; 180acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 190acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charltonimport android.content.Context; 200acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charltonimport android.content.pm.PackageInfo; 210acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charltonimport android.content.pm.PackageManager.NameNotFoundException; 220acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charltonimport android.net.http.AndroidHttpClient; 230acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charltonimport android.os.Build; 240acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 250acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charltonimport com.android.volley.Network; 260acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charltonimport com.android.volley.RequestQueue; 270acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 280acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charltonimport java.io.File; 290acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 300acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charltonpublic class Volley { 310acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 320acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton /** Default on-disk cache directory. */ 330acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton private static final String DEFAULT_CACHE_DIR = "volley"; 340acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 350acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton /** 360acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * Creates a default instance of the worker pool and calls {@link RequestQueue#start()} on it. 370acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * 380acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * @param context A {@link Context} to use for creating the cache dir. 39f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick * @param stack An {@link HttpStack} to use for the network, or null for default. 400acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton * @return A started {@link RequestQueue} instance. 410acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton */ 42f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick public static RequestQueue newRequestQueue(Context context, HttpStack stack) { 430acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR); 440acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 450acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton String userAgent = "volley/0"; 460acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton try { 470acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton String packageName = context.getPackageName(); 480acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0); 490acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton userAgent = packageName + "/" + info.versionCode; 500acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton } catch (NameNotFoundException e) { 510acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton } 520acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 53f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick if (stack == null) { 54f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick if (Build.VERSION.SDK_INT >= 9) { 55f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick stack = new HurlStack(); 56f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick } else { 57f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick // Prior to Gingerbread, HttpUrlConnection was unreliable. 58f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html 59f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); 60f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick } 610acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton } 620acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 630acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton Network network = new BasicNetwork(stack); 640acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 650acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network); 660acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton queue.start(); 670acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton 680acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton return queue; 690acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton } 70f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick 71f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick /** 72f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick * Creates a default instance of the worker pool and calls {@link RequestQueue#start()} on it. 73f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick * 74f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick * @param context A {@link Context} to use for creating the cache dir. 75f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick * @return A started {@link RequestQueue} instance. 76f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick */ 77f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick public static RequestQueue newRequestQueue(Context context) { 78f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick return newRequestQueue(context, null); 79f5bea0d0871b65cb63149f2f8d1231345b1a13f2Ficus Kirkpatrick } 800acc7936feb3deb2b969b568b07f3bf96caf0076Evan Charlton} 81