diff --git a/app/build.gradle b/app/build.gradle
index 42c68e3..67ae52c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -57,7 +57,7 @@ dependencies {
implementation 'com.google.android.gms:play-services-maps:16.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'de.greenrobot:greendao:2.1.0'
- implementation project(':volley')
+ implementation 'com.android.volley:volley:1.1.1'
testImplementation 'junit:junit:4.12'
testImplementation 'org.hamcrest:hamcrest-library:1.3'
diff --git a/settings.gradle b/settings.gradle
index d05f1ea..6d7ea68 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':app', ':volley', ':restroomsdaogenerator'
+include ':app', ':restroomsdaogenerator'
diff --git a/volley/.gitignore b/volley/.gitignore
deleted file mode 100644
index 8889923..0000000
--- a/volley/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-bin
-gen
-.gradle
-build
-.settings
-target
-*.iml
-.idea
-local.properties
diff --git a/volley/bintray.gradle b/volley/bintray.gradle
deleted file mode 100644
index 05700a4..0000000
--- a/volley/bintray.gradle
+++ /dev/null
@@ -1,72 +0,0 @@
-buildscript {
- repositories {
- jcenter()
- }
- dependencies {
- classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.0.0"
- }
-}
-
-// apply the plugin with its class name rather than its Id to work around gradle limitation of
-// not being able to find the plugin by Id despite the dependencies being added right above. Gradle
-// is currently not capable of loading plugins by Id if the dependency is anywhere else than
-// in the main project build.gradle. This file is "imported" into the project's build.gradle
-// through a "apply from:".
-apply plugin: org.jfrog.gradle.plugin.artifactory.ArtifactoryPlugin
-apply plugin: 'maven-publish'
-
-task sourcesJar(type: Jar) {
- classifier = 'sources'
- from android.sourceSets.main.java.srcDirs
-}
-
-task javadoc(type: Javadoc) {
- source = android.sourceSets.main.java.srcDirs
- classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
-}
-
-task javadocJar(type: Jar, dependsOn: javadoc) {
- classifier = 'javadoc'
- from javadoc.destinationDir
-}
-
-artifacts {
- archives javadocJar
- archives sourcesJar
-}
-
-publishing {
- publications {
- library(MavenPublication) {
- groupId 'com.android.volley'
- artifactId 'volley'
- version project.version
- pom {
- packaging 'aar'
- }
-
- // Release AAR, Sources, and JavaDoc
- artifact "$buildDir/outputs/aar/volley-release.aar"
- artifact sourcesJar
- artifact javadocJar
- }
- }
-}
-
-artifactory {
- contextUrl = "https://oss.jfrog.org"
- publish {
- repository {
- repoKey = 'oss-snapshot-local'
- username = System.env.CI_DEPLOY_USERNAME
- password = System.env.CI_DEPLOY_PASSWORD
- }
- defaults {
- publications('library')
- publishArtifacts = true
- }
- }
- resolve {
- repoKey = 'jcenter'
- }
-}
diff --git a/volley/build.gradle b/volley/build.gradle
deleted file mode 100644
index 68686cf..0000000
--- a/volley/build.gradle
+++ /dev/null
@@ -1,60 +0,0 @@
-// NOTE: The only changes that belong in this file are the definitions
-// of tool versions (gradle plugin, compile SDK, build tools), so that
-// Volley can be built via gradle as a standalone project.
-//
-// Any other changes to the build config belong in rules.gradle, which
-// is used by projects that depend on Volley but define their own
-// tools versions across all dependencies to ensure a consistent build.
-//
-// Most users should just add this line to settings.gradle:
-// include(":volley")
-//
-// If you have a more complicated Gradle setup you can choose to use
-// this instead:
-// include(":volley")
-// project(':volley').buildFileName = 'rules.gradle'
-
-buildscript {
- repositories {
- google()
- jcenter()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:3.3.1'
- }
-}
-
-plugins {
- id "com.github.sherter.google-java-format" version "0.6"
- id "net.ltgt.errorprone" version "0.0.13"
-}
-
-googleJavaFormat {
- toolVersion = '1.5'
- options style: 'AOSP'
-}
-
-apply plugin: 'com.android.library'
-
-repositories {
- google()
- jcenter()
-}
-
-group = 'com.android.volley'
-version = '1.2.0-SNAPSHOT'
-
-android {
- compileSdkVersion 28
- buildToolsVersion = '28.0.3'
- defaultConfig {
- minSdkVersion 19
- }
-}
-
-tasks.withType(JavaCompile) {
- options.compilerArgs << "-Xep:ParameterComment:ERROR"
-}
-
-apply from: 'rules.gradle'
-apply from: 'bintray.gradle'
diff --git a/volley/consumer-proguard-rules.pro b/volley/consumer-proguard-rules.pro
deleted file mode 100644
index 38d2cf1..0000000
--- a/volley/consumer-proguard-rules.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-# Prevent Proguard from inlining methods that are intentionally extracted to ensure locals have a
-# constrained liveness scope by the GC. This is needed to avoid keeping previous request references
-# alive for an indeterminate amount of time. See also https://github.com/google/volley/issues/114
--keepclassmembers,allowshrinking,allowobfuscation class com.android.volley.NetworkDispatcher {
- void processRequest();
-}
--keepclassmembers,allowshrinking,allowobfuscation class com.android.volley.CacheDispatcher {
- void processRequest();
-}
diff --git a/volley/gradle/wrapper/gradle-wrapper.jar b/volley/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index c20182d..0000000
Binary files a/volley/gradle/wrapper/gradle-wrapper.jar and /dev/null differ
diff --git a/volley/gradle/wrapper/gradle-wrapper.properties b/volley/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index 602f949..0000000
--- a/volley/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Wed Feb 15 18:50:27 PST 2017
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip
diff --git a/volley/rules.gradle b/volley/rules.gradle
deleted file mode 100644
index 6f88fb8..0000000
--- a/volley/rules.gradle
+++ /dev/null
@@ -1,34 +0,0 @@
-// See build.gradle for an explanation of what this file is.
-
-apply plugin: 'com.android.library'
-
-android {
- useLibrary 'org.apache.http.legacy'
-
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_7
- targetCompatibility JavaVersion.VERSION_1_7
- }
-
- defaultConfig {
- consumerProguardFiles 'consumer-proguard-rules.pro'
- }
-}
-
-tasks.withType(JavaCompile) {
- options.compilerArgs << "-Xlint:unchecked" << "-Werror"
-}
-
-dependencies {
- compileOnly "com.android.support:support-annotations:28.0.0"
-}
-
-// Check if the android plugin version supports unit testing.
-if (configurations.findByName("testCompile")) {
- dependencies {
- testImplementation "junit:junit:4.12"
- testImplementation "org.hamcrest:hamcrest-library:1.3"
- testImplementation "org.mockito:mockito-core:2.2.29"
- testImplementation "org.robolectric:robolectric:3.0"
- }
-}
diff --git a/volley/src/main/AndroidManifest.xml b/volley/src/main/AndroidManifest.xml
deleted file mode 100644
index ea0014c..0000000
--- a/volley/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
diff --git a/volley/src/main/java/com/android/volley/AuthFailureError.java b/volley/src/main/java/com/android/volley/AuthFailureError.java
deleted file mode 100644
index fc6417e..0000000
--- a/volley/src/main/java/com/android/volley/AuthFailureError.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-import android.content.Intent;
-
-/** Error indicating that there was an authentication failure when performing a Request. */
-@SuppressWarnings("serial")
-public class AuthFailureError extends VolleyError {
- /** An intent that can be used to resolve this exception. (Brings up the password dialog.) */
- private Intent mResolutionIntent;
-
- public AuthFailureError() {}
-
- public AuthFailureError(Intent intent) {
- mResolutionIntent = intent;
- }
-
- public AuthFailureError(NetworkResponse response) {
- super(response);
- }
-
- public AuthFailureError(String message) {
- super(message);
- }
-
- public AuthFailureError(String message, Exception reason) {
- super(message, reason);
- }
-
- public Intent getResolutionIntent() {
- return mResolutionIntent;
- }
-
- @Override
- public String getMessage() {
- if (mResolutionIntent != null) {
- return "User needs to (re)enter credentials.";
- }
- return super.getMessage();
- }
-}
diff --git a/volley/src/main/java/com/android/volley/Cache.java b/volley/src/main/java/com/android/volley/Cache.java
deleted file mode 100644
index 35b2a96..0000000
--- a/volley/src/main/java/com/android/volley/Cache.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-/** An interface for a cache keyed by a String with a byte array as data. */
-public interface Cache {
- /**
- * Retrieves an entry from the cache.
- *
- * @param key Cache key
- * @return An {@link Entry} or null in the event of a cache miss
- */
- Entry get(String key);
-
- /**
- * Adds or replaces an entry to the cache.
- *
- * @param key Cache key
- * @param entry Data to store and metadata for cache coherency, TTL, etc.
- */
- void put(String key, Entry entry);
-
- /**
- * Performs any potentially long-running actions needed to initialize the cache; will be called
- * from a worker thread.
- */
- void initialize();
-
- /**
- * Invalidates an entry in the cache.
- *
- * @param key Cache key
- * @param fullExpire True to fully expire the entry, false to soft expire
- */
- void invalidate(String key, boolean fullExpire);
-
- /**
- * Removes an entry from the cache.
- *
- * @param key Cache key
- */
- void remove(String key);
-
- /** Empties the cache. */
- void clear();
-
- /** Data and metadata for an entry returned by the cache. */
- class Entry {
- /** The data returned from cache. */
- public byte[] data;
-
- /** ETag for cache coherency. */
- public String etag;
-
- /** Date of this response as reported by the server. */
- public long serverDate;
-
- /** The last modified date for the requested object. */
- public long lastModified;
-
- /** TTL for this record. */
- public long ttl;
-
- /** Soft TTL for this record. */
- public long softTtl;
-
- /**
- * Response headers as received from server; must be non-null. Should not be mutated
- * directly.
- *
- *
Note that if the server returns two headers with the same (case-insensitive) name,
- * this map will only contain the one of them. {@link #allResponseHeaders} may contain all
- * headers if the {@link Cache} implementation supports it.
- */
- public Map responseHeaders = Collections.emptyMap();
-
- /**
- * All response headers. May be null depending on the {@link Cache} implementation. Should
- * not be mutated directly.
- */
- public List allResponseHeaders;
-
- /** True if the entry is expired. */
- public boolean isExpired() {
- return this.ttl < System.currentTimeMillis();
- }
-
- /** True if a refresh is needed from the original data source. */
- public boolean refreshNeeded() {
- return this.softTtl < System.currentTimeMillis();
- }
- }
-}
diff --git a/volley/src/main/java/com/android/volley/CacheDispatcher.java b/volley/src/main/java/com/android/volley/CacheDispatcher.java
deleted file mode 100644
index f616285..0000000
--- a/volley/src/main/java/com/android/volley/CacheDispatcher.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-import android.os.Process;
-import android.support.annotation.VisibleForTesting;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.BlockingQueue;
-
-/**
- * Provides a thread for performing cache triage on a queue of requests.
- *
- *
Requests added to the specified cache queue are resolved from cache. Any deliverable response
- * is posted back to the caller via a {@link ResponseDelivery}. Cache misses and responses that
- * require refresh are enqueued on the specified network queue for processing by a {@link
- * NetworkDispatcher}.
- */
-public class CacheDispatcher extends Thread {
-
- private static final boolean DEBUG = VolleyLog.DEBUG;
-
- /** The queue of requests coming in for triage. */
- private final BlockingQueue> mCacheQueue;
-
- /** The queue of requests going out to the network. */
- private final BlockingQueue> mNetworkQueue;
-
- /** The cache to read from. */
- private final Cache mCache;
-
- /** For posting responses. */
- private final ResponseDelivery mDelivery;
-
- /** Used for telling us to die. */
- private volatile boolean mQuit = false;
-
- /** Manage list of waiting requests and de-duplicate requests with same cache key. */
- private final WaitingRequestManager mWaitingRequestManager;
-
- /**
- * Creates a new cache triage dispatcher thread. You must call {@link #start()} in order to
- * begin processing.
- *
- * @param cacheQueue Queue of incoming requests for triage
- * @param networkQueue Queue to post requests that require network to
- * @param cache Cache interface to use for resolution
- * @param delivery Delivery interface to use for posting responses
- */
- public CacheDispatcher(
- BlockingQueue> cacheQueue,
- BlockingQueue> networkQueue,
- Cache cache,
- ResponseDelivery delivery) {
- mCacheQueue = cacheQueue;
- mNetworkQueue = networkQueue;
- mCache = cache;
- mDelivery = delivery;
- mWaitingRequestManager = new WaitingRequestManager(this);
- }
-
- /**
- * Forces this dispatcher to quit immediately. If any requests are still in the queue, they are
- * not guaranteed to be processed.
- */
- public void quit() {
- mQuit = true;
- interrupt();
- }
-
- @Override
- public void run() {
- if (DEBUG) VolleyLog.v("start new dispatcher");
- Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
-
- // Make a blocking call to initialize the cache.
- mCache.initialize();
-
- while (true) {
- try {
- processRequest();
- } catch (InterruptedException e) {
- // We may have been interrupted because it was time to quit.
- if (mQuit) {
- Thread.currentThread().interrupt();
- return;
- }
- VolleyLog.e(
- "Ignoring spurious interrupt of CacheDispatcher thread; "
- + "use quit() to terminate it");
- }
- }
- }
-
- // Extracted to its own method to ensure locals have a constrained liveness scope by the GC.
- // This is needed to avoid keeping previous request references alive for an indeterminate amount
- // of time. Update consumer-proguard-rules.pro when modifying this. See also
- // https://github.com/google/volley/issues/114
- private void processRequest() throws InterruptedException {
- // Get a request from the cache triage queue, blocking until
- // at least one is available.
- final Request> request = mCacheQueue.take();
- processRequest(request);
- }
-
- @VisibleForTesting
- void processRequest(final Request> request) throws InterruptedException {
- request.addMarker("cache-queue-take");
-
- // If the request has been canceled, don't bother dispatching it.
- if (request.isCanceled()) {
- request.finish("cache-discard-canceled");
- return;
- }
-
- // Attempt to retrieve this item from cache.
- Cache.Entry entry = mCache.get(request.getCacheKey());
- if (entry == null) {
- request.addMarker("cache-miss");
- // Cache miss; send off to the network dispatcher.
- if (!mWaitingRequestManager.maybeAddToWaitingRequests(request)) {
- mNetworkQueue.put(request);
- }
- return;
- }
-
- // If it is completely expired, just send it to the network.
- if (entry.isExpired()) {
- request.addMarker("cache-hit-expired");
- request.setCacheEntry(entry);
- if (!mWaitingRequestManager.maybeAddToWaitingRequests(request)) {
- mNetworkQueue.put(request);
- }
- return;
- }
-
- // We have a cache hit; parse its data for delivery back to the request.
- request.addMarker("cache-hit");
- Response> response =
- request.parseNetworkResponse(
- new NetworkResponse(entry.data, entry.responseHeaders));
- request.addMarker("cache-hit-parsed");
-
- if (!entry.refreshNeeded()) {
- // Completely unexpired cache hit. Just deliver the response.
- mDelivery.postResponse(request, response);
- } else {
- // Soft-expired cache hit. We can deliver the cached response,
- // but we need to also send the request to the network for
- // refreshing.
- request.addMarker("cache-hit-refresh-needed");
- request.setCacheEntry(entry);
- // Mark the response as intermediate.
- response.intermediate = true;
-
- if (!mWaitingRequestManager.maybeAddToWaitingRequests(request)) {
- // Post the intermediate response back to the user and have
- // the delivery then forward the request along to the network.
- mDelivery.postResponse(
- request,
- response,
- new Runnable() {
- @Override
- public void run() {
- try {
- mNetworkQueue.put(request);
- } catch (InterruptedException e) {
- // Restore the interrupted status
- Thread.currentThread().interrupt();
- }
- }
- });
- } else {
- // request has been added to list of waiting requests
- // to receive the network response from the first request once it returns.
- mDelivery.postResponse(request, response);
- }
- }
- }
-
- private static class WaitingRequestManager implements Request.NetworkRequestCompleteListener {
-
- /**
- * Staging area for requests that already have a duplicate request in flight.
- *
- *
- *
containsKey(cacheKey) indicates that there is a request in flight for the given
- * cache key.
- *
get(cacheKey) returns waiting requests for the given cache key. The in flight
- * request is not contained in that list. Is null if no requests are staged.
- *
- */
- private final Map>> mWaitingRequests = new HashMap<>();
-
- private final CacheDispatcher mCacheDispatcher;
-
- WaitingRequestManager(CacheDispatcher cacheDispatcher) {
- mCacheDispatcher = cacheDispatcher;
- }
-
- /** Request received a valid response that can be used by other waiting requests. */
- @Override
- public void onResponseReceived(Request> request, Response> response) {
- if (response.cacheEntry == null || response.cacheEntry.isExpired()) {
- onNoUsableResponseReceived(request);
- return;
- }
- String cacheKey = request.getCacheKey();
- List> waitingRequests;
- synchronized (this) {
- waitingRequests = mWaitingRequests.remove(cacheKey);
- }
- if (waitingRequests != null) {
- if (VolleyLog.DEBUG) {
- VolleyLog.v(
- "Releasing %d waiting requests for cacheKey=%s.",
- waitingRequests.size(), cacheKey);
- }
- // Process all queued up requests.
- for (Request> waiting : waitingRequests) {
- mCacheDispatcher.mDelivery.postResponse(waiting, response);
- }
- }
- }
-
- /** No valid response received from network, release waiting requests. */
- @Override
- public synchronized void onNoUsableResponseReceived(Request> request) {
- String cacheKey = request.getCacheKey();
- List> waitingRequests = mWaitingRequests.remove(cacheKey);
- if (waitingRequests != null && !waitingRequests.isEmpty()) {
- if (VolleyLog.DEBUG) {
- VolleyLog.v(
- "%d waiting requests for cacheKey=%s; resend to network",
- waitingRequests.size(), cacheKey);
- }
- Request> nextInLine = waitingRequests.remove(0);
- mWaitingRequests.put(cacheKey, waitingRequests);
- nextInLine.setNetworkRequestCompleteListener(this);
- try {
- mCacheDispatcher.mNetworkQueue.put(nextInLine);
- } catch (InterruptedException iex) {
- VolleyLog.e("Couldn't add request to queue. %s", iex.toString());
- // Restore the interrupted status of the calling thread (i.e. NetworkDispatcher)
- Thread.currentThread().interrupt();
- // Quit the current CacheDispatcher thread.
- mCacheDispatcher.quit();
- }
- }
- }
-
- /**
- * For cacheable requests, if a request for the same cache key is already in flight, add it
- * to a queue to wait for that in-flight request to finish.
- *
- * @return whether the request was queued. If false, we should continue issuing the request
- * over the network. If true, we should put the request on hold to be processed when the
- * in-flight request finishes.
- */
- private synchronized boolean maybeAddToWaitingRequests(Request> request) {
- String cacheKey = request.getCacheKey();
- // Insert request into stage if there's already a request with the same cache key
- // in flight.
- if (mWaitingRequests.containsKey(cacheKey)) {
- // There is already a request in flight. Queue up.
- List> stagedRequests = mWaitingRequests.get(cacheKey);
- if (stagedRequests == null) {
- stagedRequests = new ArrayList<>();
- }
- request.addMarker("waiting-for-response");
- stagedRequests.add(request);
- mWaitingRequests.put(cacheKey, stagedRequests);
- if (VolleyLog.DEBUG) {
- VolleyLog.d("Request for cacheKey=%s is in flight, putting on hold.", cacheKey);
- }
- return true;
- } else {
- // Insert 'null' queue for this cacheKey, indicating there is now a request in
- // flight.
- mWaitingRequests.put(cacheKey, null);
- request.setNetworkRequestCompleteListener(this);
- if (VolleyLog.DEBUG) {
- VolleyLog.d("new request, sending to network %s", cacheKey);
- }
- return false;
- }
- }
- }
-}
diff --git a/volley/src/main/java/com/android/volley/ClientError.java b/volley/src/main/java/com/android/volley/ClientError.java
deleted file mode 100644
index 521b76f..0000000
--- a/volley/src/main/java/com/android/volley/ClientError.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * 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.android.volley;
-
-/**
- * Indicates that the server responded with an error response indicating that the client has erred.
- *
- *
For backwards compatibility, extends ServerError which used to be thrown for all server
- * errors, including 4xx error codes indicating a client error.
- */
-@SuppressWarnings("serial")
-public class ClientError extends ServerError {
- public ClientError(NetworkResponse networkResponse) {
- super(networkResponse);
- }
-
- public ClientError() {
- super();
- }
-}
diff --git a/volley/src/main/java/com/android/volley/DefaultRetryPolicy.java b/volley/src/main/java/com/android/volley/DefaultRetryPolicy.java
deleted file mode 100644
index 4be6b50..0000000
--- a/volley/src/main/java/com/android/volley/DefaultRetryPolicy.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-/** Default retry policy for requests. */
-public class DefaultRetryPolicy implements RetryPolicy {
- /** The current timeout in milliseconds. */
- private int mCurrentTimeoutMs;
-
- /** The current retry count. */
- private int mCurrentRetryCount;
-
- /** The maximum number of attempts. */
- private final int mMaxNumRetries;
-
- /** The backoff multiplier for the policy. */
- private final float mBackoffMultiplier;
-
- /** The default socket timeout in milliseconds */
- public static final int DEFAULT_TIMEOUT_MS = 2500;
-
- /** The default number of retries */
- public static final int DEFAULT_MAX_RETRIES = 1;
-
- /** The default backoff multiplier */
- public static final float DEFAULT_BACKOFF_MULT = 1f;
-
- /** Constructs a new retry policy using the default timeouts. */
- public DefaultRetryPolicy() {
- this(DEFAULT_TIMEOUT_MS, DEFAULT_MAX_RETRIES, DEFAULT_BACKOFF_MULT);
- }
-
- /**
- * Constructs a new retry policy.
- *
- * @param initialTimeoutMs The initial timeout for the policy.
- * @param maxNumRetries The maximum number of retries.
- * @param backoffMultiplier Backoff multiplier for the policy.
- */
- public DefaultRetryPolicy(int initialTimeoutMs, int maxNumRetries, float backoffMultiplier) {
- mCurrentTimeoutMs = initialTimeoutMs;
- mMaxNumRetries = maxNumRetries;
- mBackoffMultiplier = backoffMultiplier;
- }
-
- /** Returns the current timeout. */
- @Override
- public int getCurrentTimeout() {
- return mCurrentTimeoutMs;
- }
-
- /** Returns the current retry count. */
- @Override
- public int getCurrentRetryCount() {
- return mCurrentRetryCount;
- }
-
- /** Returns the backoff multiplier for the policy. */
- public float getBackoffMultiplier() {
- return mBackoffMultiplier;
- }
-
- /**
- * Prepares for the next retry by applying a backoff to the timeout.
- *
- * @param error The error code of the last attempt.
- */
- @Override
- public void retry(VolleyError error) throws VolleyError {
- mCurrentRetryCount++;
- mCurrentTimeoutMs += (int) (mCurrentTimeoutMs * mBackoffMultiplier);
- if (!hasAttemptRemaining()) {
- throw error;
- }
- }
-
- /** Returns true if this policy has attempts remaining, false otherwise. */
- protected boolean hasAttemptRemaining() {
- return mCurrentRetryCount <= mMaxNumRetries;
- }
-}
diff --git a/volley/src/main/java/com/android/volley/ExecutorDelivery.java b/volley/src/main/java/com/android/volley/ExecutorDelivery.java
deleted file mode 100644
index fd992f9..0000000
--- a/volley/src/main/java/com/android/volley/ExecutorDelivery.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-import android.os.Handler;
-import java.util.concurrent.Executor;
-
-/** Delivers responses and errors. */
-public class ExecutorDelivery implements ResponseDelivery {
- /** Used for posting responses, typically to the main thread. */
- private final Executor mResponsePoster;
-
- /**
- * Creates a new response delivery interface.
- *
- * @param handler {@link Handler} to post responses on
- */
- public ExecutorDelivery(final Handler handler) {
- // Make an Executor that just wraps the handler.
- mResponsePoster =
- new Executor() {
- @Override
- public void execute(Runnable command) {
- handler.post(command);
- }
- };
- }
-
- /**
- * Creates a new response delivery interface, mockable version for testing.
- *
- * @param executor For running delivery tasks
- */
- public ExecutorDelivery(Executor executor) {
- mResponsePoster = executor;
- }
-
- @Override
- public void postResponse(Request> request, Response> response) {
- postResponse(request, response, null);
- }
-
- @Override
- public void postResponse(Request> request, Response> response, Runnable runnable) {
- request.markDelivered();
- request.addMarker("post-response");
- mResponsePoster.execute(new ResponseDeliveryRunnable(request, response, runnable));
- }
-
- @Override
- public void postError(Request> request, VolleyError error) {
- request.addMarker("post-error");
- Response> response = Response.error(error);
- mResponsePoster.execute(new ResponseDeliveryRunnable(request, response, null));
- }
-
- /** A Runnable used for delivering network responses to a listener on the main thread. */
- @SuppressWarnings("rawtypes")
- private static class ResponseDeliveryRunnable implements Runnable {
- private final Request mRequest;
- private final Response mResponse;
- private final Runnable mRunnable;
-
- public ResponseDeliveryRunnable(Request request, Response response, Runnable runnable) {
- mRequest = request;
- mResponse = response;
- mRunnable = runnable;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public void run() {
- // NOTE: If cancel() is called off the thread that we're currently running in (by
- // default, the main thread), we cannot guarantee that deliverResponse()/deliverError()
- // won't be called, since it may be canceled after we check isCanceled() but before we
- // deliver the response. Apps concerned about this guarantee must either call cancel()
- // from the same thread or implement their own guarantee about not invoking their
- // listener after cancel() has been called.
-
- // If this request has canceled, finish it and don't deliver.
- if (mRequest.isCanceled()) {
- mRequest.finish("canceled-at-delivery");
- return;
- }
-
- // Deliver a normal response or error, depending.
- if (mResponse.isSuccess()) {
- mRequest.deliverResponse(mResponse.result);
- } else {
- mRequest.deliverError(mResponse.error);
- }
-
- // If this is an intermediate response, add a marker, otherwise we're done
- // and the request can be finished.
- if (mResponse.intermediate) {
- mRequest.addMarker("intermediate-response");
- } else {
- mRequest.finish("done");
- }
-
- // If we have been provided a post-delivery runnable, run it.
- if (mRunnable != null) {
- mRunnable.run();
- }
- }
- }
-}
diff --git a/volley/src/main/java/com/android/volley/Header.java b/volley/src/main/java/com/android/volley/Header.java
deleted file mode 100644
index cd9c6ec..0000000
--- a/volley/src/main/java/com/android/volley/Header.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.android.volley;
-
-import android.text.TextUtils;
-
-/** An HTTP header. */
-public final class Header {
- private final String mName;
- private final String mValue;
-
- public Header(String name, String value) {
- mName = name;
- mValue = value;
- }
-
- public final String getName() {
- return mName;
- }
-
- public final String getValue() {
- return mValue;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- Header header = (Header) o;
-
- return TextUtils.equals(mName, header.mName) && TextUtils.equals(mValue, header.mValue);
- }
-
- @Override
- public int hashCode() {
- int result = mName.hashCode();
- result = 31 * result + mValue.hashCode();
- return result;
- }
-
- @Override
- public String toString() {
- return "Header[name=" + mName + ",value=" + mValue + "]";
- }
-}
diff --git a/volley/src/main/java/com/android/volley/Network.java b/volley/src/main/java/com/android/volley/Network.java
deleted file mode 100644
index 16d5858..0000000
--- a/volley/src/main/java/com/android/volley/Network.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-/** An interface for performing requests. */
-public interface Network {
- /**
- * Performs the specified request.
- *
- * @param request Request to process
- * @return A {@link NetworkResponse} with data and caching metadata; will never be null
- * @throws VolleyError on errors
- */
- NetworkResponse performRequest(Request> request) throws VolleyError;
-}
diff --git a/volley/src/main/java/com/android/volley/NetworkDispatcher.java b/volley/src/main/java/com/android/volley/NetworkDispatcher.java
deleted file mode 100644
index 327afed..0000000
--- a/volley/src/main/java/com/android/volley/NetworkDispatcher.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-import android.annotation.TargetApi;
-import android.net.TrafficStats;
-import android.os.Build;
-import android.os.Process;
-import android.os.SystemClock;
-import android.support.annotation.VisibleForTesting;
-import java.util.concurrent.BlockingQueue;
-
-/**
- * Provides a thread for performing network dispatch from a queue of requests.
- *
- *
Requests added to the specified queue are processed from the network via a specified {@link
- * Network} interface. Responses are committed to cache, if eligible, using a specified {@link
- * Cache} interface. Valid responses and errors are posted back to the caller via a {@link
- * ResponseDelivery}.
- */
-public class NetworkDispatcher extends Thread {
-
- /** The queue of requests to service. */
- private final BlockingQueue> mQueue;
- /** The network interface for processing requests. */
- private final Network mNetwork;
- /** The cache to write to. */
- private final Cache mCache;
- /** For posting responses and errors. */
- private final ResponseDelivery mDelivery;
- /** Used for telling us to die. */
- private volatile boolean mQuit = false;
-
- /**
- * Creates a new network dispatcher thread. You must call {@link #start()} in order to begin
- * processing.
- *
- * @param queue Queue of incoming requests for triage
- * @param network Network interface to use for performing requests
- * @param cache Cache interface to use for writing responses to cache
- * @param delivery Delivery interface to use for posting responses
- */
- public NetworkDispatcher(
- BlockingQueue> queue,
- Network network,
- Cache cache,
- ResponseDelivery delivery) {
- mQueue = queue;
- mNetwork = network;
- mCache = cache;
- mDelivery = delivery;
- }
-
- /**
- * Forces this dispatcher to quit immediately. If any requests are still in the queue, they are
- * not guaranteed to be processed.
- */
- public void quit() {
- mQuit = true;
- interrupt();
- }
-
- @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
- private void addTrafficStatsTag(Request> request) {
- // Tag the request (if API >= 14)
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
- TrafficStats.setThreadStatsTag(request.getTrafficStatsTag());
- }
- }
-
- @Override
- public void run() {
- Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
- while (true) {
- try {
- processRequest();
- } catch (InterruptedException e) {
- // We may have been interrupted because it was time to quit.
- if (mQuit) {
- Thread.currentThread().interrupt();
- return;
- }
- VolleyLog.e(
- "Ignoring spurious interrupt of NetworkDispatcher thread; "
- + "use quit() to terminate it");
- }
- }
- }
-
- // Extracted to its own method to ensure locals have a constrained liveness scope by the GC.
- // This is needed to avoid keeping previous request references alive for an indeterminate amount
- // of time. Update consumer-proguard-rules.pro when modifying this. See also
- // https://github.com/google/volley/issues/114
- private void processRequest() throws InterruptedException {
- // Take a request from the queue.
- Request> request = mQueue.take();
- processRequest(request);
- }
-
- @VisibleForTesting
- void processRequest(Request> request) {
- long startTimeMs = SystemClock.elapsedRealtime();
- try {
- request.addMarker("network-queue-take");
-
- // If the request was cancelled already, do not perform the
- // network request.
- if (request.isCanceled()) {
- request.finish("network-discard-cancelled");
- request.notifyListenerResponseNotUsable();
- return;
- }
-
- addTrafficStatsTag(request);
-
- // Perform the network request.
- NetworkResponse networkResponse = mNetwork.performRequest(request);
- request.addMarker("network-http-complete");
-
- // If the server returned 304 AND we delivered a response already,
- // we're done -- don't deliver a second identical response.
- if (networkResponse.notModified && request.hasHadResponseDelivered()) {
- request.finish("not-modified");
- request.notifyListenerResponseNotUsable();
- return;
- }
-
- // Parse the response here on the worker thread.
- Response> response = request.parseNetworkResponse(networkResponse);
- request.addMarker("network-parse-complete");
-
- // Write to cache if applicable.
- // TODO: Only update cache metadata instead of entire record for 304s.
- if (request.shouldCache() && response.cacheEntry != null) {
- mCache.put(request.getCacheKey(), response.cacheEntry);
- request.addMarker("network-cache-written");
- }
-
- // Post the response back.
- request.markDelivered();
- mDelivery.postResponse(request, response);
- request.notifyListenerResponseReceived(response);
- } catch (VolleyError volleyError) {
- volleyError.setNetworkTimeMs(SystemClock.elapsedRealtime() - startTimeMs);
- parseAndDeliverNetworkError(request, volleyError);
- request.notifyListenerResponseNotUsable();
- } catch (Exception e) {
- VolleyLog.e(e, "Unhandled exception %s", e.toString());
- VolleyError volleyError = new VolleyError(e);
- volleyError.setNetworkTimeMs(SystemClock.elapsedRealtime() - startTimeMs);
- mDelivery.postError(request, volleyError);
- request.notifyListenerResponseNotUsable();
- }
- }
-
- private void parseAndDeliverNetworkError(Request> request, VolleyError error) {
- error = request.parseNetworkError(error);
- mDelivery.postError(request, error);
- }
-}
diff --git a/volley/src/main/java/com/android/volley/NetworkError.java b/volley/src/main/java/com/android/volley/NetworkError.java
deleted file mode 100644
index 6b2b19f..0000000
--- a/volley/src/main/java/com/android/volley/NetworkError.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-/** Indicates that there was a network error when performing a Volley request. */
-@SuppressWarnings("serial")
-public class NetworkError extends VolleyError {
- public NetworkError() {
- super();
- }
-
- public NetworkError(Throwable cause) {
- super(cause);
- }
-
- public NetworkError(NetworkResponse networkResponse) {
- super(networkResponse);
- }
-}
diff --git a/volley/src/main/java/com/android/volley/NetworkResponse.java b/volley/src/main/java/com/android/volley/NetworkResponse.java
deleted file mode 100644
index 01f48c6..0000000
--- a/volley/src/main/java/com/android/volley/NetworkResponse.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-import java.net.HttpURLConnection;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-/** Data and headers returned from {@link Network#performRequest(Request)}. */
-public class NetworkResponse {
-
- /**
- * Creates a new network response.
- *
- * @param statusCode the HTTP status code
- * @param data Response body
- * @param headers Headers returned with this response, or null for none
- * @param notModified True if the server returned a 304 and the data was already in cache
- * @param networkTimeMs Round-trip network time to receive network response
- * @deprecated see {@link #NetworkResponse(int, byte[], boolean, long, List)}. This constructor
- * cannot handle server responses containing multiple headers with the same name. This
- * constructor may be removed in a future release of Volley.
- */
- @Deprecated
- public NetworkResponse(
- int statusCode,
- byte[] data,
- Map headers,
- boolean notModified,
- long networkTimeMs) {
- this(statusCode, data, headers, toAllHeaderList(headers), notModified, networkTimeMs);
- }
-
- /**
- * Creates a new network response.
- *
- * @param statusCode the HTTP status code
- * @param data Response body
- * @param notModified True if the server returned a 304 and the data was already in cache
- * @param networkTimeMs Round-trip network time to receive network response
- * @param allHeaders All headers returned with this response, or null for none
- */
- public NetworkResponse(
- int statusCode,
- byte[] data,
- boolean notModified,
- long networkTimeMs,
- List allHeaders) {
- this(statusCode, data, toHeaderMap(allHeaders), allHeaders, notModified, networkTimeMs);
- }
-
- /**
- * Creates a new network response.
- *
- * @param statusCode the HTTP status code
- * @param data Response body
- * @param headers Headers returned with this response, or null for none
- * @param notModified True if the server returned a 304 and the data was already in cache
- * @deprecated see {@link #NetworkResponse(int, byte[], boolean, long, List)}. This constructor
- * cannot handle server responses containing multiple headers with the same name. This
- * constructor may be removed in a future release of Volley.
- */
- @Deprecated
- public NetworkResponse(
- int statusCode, byte[] data, Map headers, boolean notModified) {
- this(statusCode, data, headers, notModified, /* networkTimeMs= */ 0);
- }
-
- /**
- * Creates a new network response for an OK response with no headers.
- *
- * @param data Response body
- */
- public NetworkResponse(byte[] data) {
- this(
- HttpURLConnection.HTTP_OK,
- data,
- /* notModified= */ false,
- /* networkTimeMs= */ 0,
- Collections.emptyList());
- }
-
- /**
- * Creates a new network response for an OK response.
- *
- * @param data Response body
- * @param headers Headers returned with this response, or null for none
- * @deprecated see {@link #NetworkResponse(int, byte[], boolean, long, List)}. This constructor
- * cannot handle server responses containing multiple headers with the same name. This
- * constructor may be removed in a future release of Volley.
- */
- @Deprecated
- public NetworkResponse(byte[] data, Map headers) {
- this(
- HttpURLConnection.HTTP_OK,
- data,
- headers,
- /* notModified= */ false,
- /* networkTimeMs= */ 0);
- }
-
- private NetworkResponse(
- int statusCode,
- byte[] data,
- Map headers,
- List allHeaders,
- boolean notModified,
- long networkTimeMs) {
- this.statusCode = statusCode;
- this.data = data;
- this.headers = headers;
- if (allHeaders == null) {
- this.allHeaders = null;
- } else {
- this.allHeaders = Collections.unmodifiableList(allHeaders);
- }
- this.notModified = notModified;
- this.networkTimeMs = networkTimeMs;
- }
-
- /** The HTTP status code. */
- public final int statusCode;
-
- /** Raw data from this response. */
- public final byte[] data;
-
- /**
- * Response headers.
- *
- *
This map is case-insensitive. It should not be mutated directly.
- *
- *
Note that if the server returns two headers with the same (case-insensitive) name, this
- * map will only contain the last one. Use {@link #allHeaders} to inspect all headers returned
- * by the server.
- */
- public final Map headers;
-
- /** All response headers. Must not be mutated directly. */
- public final List allHeaders;
-
- /** True if the server returned a 304 (Not Modified). */
- public final boolean notModified;
-
- /** Network roundtrip time in milliseconds. */
- public final long networkTimeMs;
-
- private static Map toHeaderMap(List allHeaders) {
- if (allHeaders == null) {
- return null;
- }
- if (allHeaders.isEmpty()) {
- return Collections.emptyMap();
- }
- Map headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
- // Later elements in the list take precedence.
- for (Header header : allHeaders) {
- headers.put(header.getName(), header.getValue());
- }
- return headers;
- }
-
- private static List toAllHeaderList(Map headers) {
- if (headers == null) {
- return null;
- }
- if (headers.isEmpty()) {
- return Collections.emptyList();
- }
- List allHeaders = new ArrayList<>(headers.size());
- for (Map.Entry header : headers.entrySet()) {
- allHeaders.add(new Header(header.getKey(), header.getValue()));
- }
- return allHeaders;
- }
-}
diff --git a/volley/src/main/java/com/android/volley/NoConnectionError.java b/volley/src/main/java/com/android/volley/NoConnectionError.java
deleted file mode 100644
index 185eb35..0000000
--- a/volley/src/main/java/com/android/volley/NoConnectionError.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-/** Error indicating that no connection could be established when performing a Volley request. */
-@SuppressWarnings("serial")
-public class NoConnectionError extends NetworkError {
- public NoConnectionError() {
- super();
- }
-
- public NoConnectionError(Throwable reason) {
- super(reason);
- }
-}
diff --git a/volley/src/main/java/com/android/volley/ParseError.java b/volley/src/main/java/com/android/volley/ParseError.java
deleted file mode 100644
index 04a9d58..0000000
--- a/volley/src/main/java/com/android/volley/ParseError.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-/** Indicates that the server's response could not be parsed. */
-@SuppressWarnings("serial")
-public class ParseError extends VolleyError {
- public ParseError() {}
-
- public ParseError(NetworkResponse networkResponse) {
- super(networkResponse);
- }
-
- public ParseError(Throwable cause) {
- super(cause);
- }
-}
diff --git a/volley/src/main/java/com/android/volley/Request.java b/volley/src/main/java/com/android/volley/Request.java
deleted file mode 100644
index cd7290a..0000000
--- a/volley/src/main/java/com/android/volley/Request.java
+++ /dev/null
@@ -1,688 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-import android.net.TrafficStats;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.Looper;
-import android.support.annotation.CallSuper;
-import android.support.annotation.GuardedBy;
-import android.support.annotation.Nullable;
-import android.text.TextUtils;
-import com.android.volley.VolleyLog.MarkerLog;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * Base class for all network requests.
- *
- * @param The type of parsed response this request expects.
- */
-public abstract class Request implements Comparable> {
-
- /** Default encoding for POST or PUT parameters. See {@link #getParamsEncoding()}. */
- private static final String DEFAULT_PARAMS_ENCODING = "UTF-8";
-
- /** Supported request methods. */
- public interface Method {
- int DEPRECATED_GET_OR_POST = -1;
- int GET = 0;
- int POST = 1;
- int PUT = 2;
- int DELETE = 3;
- int HEAD = 4;
- int OPTIONS = 5;
- int TRACE = 6;
- int PATCH = 7;
- }
-
- /** Callback to notify when the network request returns. */
- /* package */ interface NetworkRequestCompleteListener {
-
- /** Callback when a network response has been received. */
- void onResponseReceived(Request> request, Response> response);
-
- /** Callback when request returns from network without valid response. */
- void onNoUsableResponseReceived(Request> request);
- }
-
- /** An event log tracing the lifetime of this request; for debugging. */
- private final MarkerLog mEventLog = MarkerLog.ENABLED ? new MarkerLog() : null;
-
- /**
- * Request method of this request. Currently supports GET, POST, PUT, DELETE, HEAD, OPTIONS,
- * TRACE, and PATCH.
- */
- private final int mMethod;
-
- /** URL of this request. */
- private final String mUrl;
-
- /** Default tag for {@link TrafficStats}. */
- private final int mDefaultTrafficStatsTag;
-
- /** Lock to guard state which can be mutated after a request is added to the queue. */
- private final Object mLock = new Object();
-
- /** Listener interface for errors. */
- @Nullable
- @GuardedBy("mLock")
- private Response.ErrorListener mErrorListener;
-
- /** Sequence number of this request, used to enforce FIFO ordering. */
- private Integer mSequence;
-
- /** The request queue this request is associated with. */
- private RequestQueue mRequestQueue;
-
- /** Whether or not responses to this request should be cached. */
- // TODO(#190): Turn this off by default for anything other than GET requests.
- private boolean mShouldCache = true;
-
- /** Whether or not this request has been canceled. */
- @GuardedBy("mLock")
- private boolean mCanceled = false;
-
- /** Whether or not a response has been delivered for this request yet. */
- @GuardedBy("mLock")
- private boolean mResponseDelivered = false;
-
- /** Whether the request should be retried in the event of an HTTP 5xx (server) error. */
- private boolean mShouldRetryServerErrors = false;
-
- /** The retry policy for this request. */
- private RetryPolicy mRetryPolicy;
-
- /**
- * When a request can be retrieved from cache but must be refreshed from the network, the cache
- * entry will be stored here so that in the event of a "Not Modified" response, we can be sure
- * it hasn't been evicted from cache.
- */
- private Cache.Entry mCacheEntry = null;
-
- /** An opaque token tagging this request; used for bulk cancellation. */
- private Object mTag;
-
- /** Listener that will be notified when a response has been delivered. */
- @GuardedBy("mLock")
- private NetworkRequestCompleteListener mRequestCompleteListener;
-
- /**
- * Creates a new request with the given URL and error listener. Note that the normal response
- * listener is not provided here as delivery of responses is provided by subclasses, who have a
- * better idea of how to deliver an already-parsed response.
- *
- * @deprecated Use {@link #Request(int, String, com.android.volley.Response.ErrorListener)}.
- */
- @Deprecated
- public Request(String url, Response.ErrorListener listener) {
- this(Method.DEPRECATED_GET_OR_POST, url, listener);
- }
-
- /**
- * Creates a new request with the given method (one of the values from {@link Method}), URL, and
- * error listener. Note that the normal response listener is not provided here as delivery of
- * responses is provided by subclasses, who have a better idea of how to deliver an
- * already-parsed response.
- */
- public Request(int method, String url, @Nullable Response.ErrorListener listener) {
- mMethod = method;
- mUrl = url;
- mErrorListener = listener;
- setRetryPolicy(new DefaultRetryPolicy());
-
- mDefaultTrafficStatsTag = findDefaultTrafficStatsTag(url);
- }
-
- /** Return the method for this request. Can be one of the values in {@link Method}. */
- public int getMethod() {
- return mMethod;
- }
-
- /**
- * Set a tag on this request. Can be used to cancel all requests with this tag by {@link
- * RequestQueue#cancelAll(Object)}.
- *
- * @return This Request object to allow for chaining.
- */
- public Request> setTag(Object tag) {
- mTag = tag;
- return this;
- }
-
- /**
- * Returns this request's tag.
- *
- * @see Request#setTag(Object)
- */
- public Object getTag() {
- return mTag;
- }
-
- /** @return this request's {@link com.android.volley.Response.ErrorListener}. */
- @Nullable
- public Response.ErrorListener getErrorListener() {
- synchronized (mLock) {
- return mErrorListener;
- }
- }
-
- /** @return A tag for use with {@link TrafficStats#setThreadStatsTag(int)} */
- public int getTrafficStatsTag() {
- return mDefaultTrafficStatsTag;
- }
-
- /** @return The hashcode of the URL's host component, or 0 if there is none. */
- private static int findDefaultTrafficStatsTag(String url) {
- if (!TextUtils.isEmpty(url)) {
- Uri uri = Uri.parse(url);
- if (uri != null) {
- String host = uri.getHost();
- if (host != null) {
- return host.hashCode();
- }
- }
- }
- return 0;
- }
-
- /**
- * Sets the retry policy for this request.
- *
- * @return This Request object to allow for chaining.
- */
- public Request> setRetryPolicy(RetryPolicy retryPolicy) {
- mRetryPolicy = retryPolicy;
- return this;
- }
-
- /** Adds an event to this request's event log; for debugging. */
- public void addMarker(String tag) {
- if (MarkerLog.ENABLED) {
- mEventLog.add(tag, Thread.currentThread().getId());
- }
- }
-
- /**
- * Notifies the request queue that this request has finished (successfully or with error).
- *
- *
Also dumps all events from this request's event log; for debugging.
- */
- void finish(final String tag) {
- if (mRequestQueue != null) {
- mRequestQueue.finish(this);
- }
- if (MarkerLog.ENABLED) {
- final long threadId = Thread.currentThread().getId();
- if (Looper.myLooper() != Looper.getMainLooper()) {
- // If we finish marking off of the main thread, we need to
- // actually do it on the main thread to ensure correct ordering.
- Handler mainThread = new Handler(Looper.getMainLooper());
- mainThread.post(
- new Runnable() {
- @Override
- public void run() {
- mEventLog.add(tag, threadId);
- mEventLog.finish(Request.this.toString());
- }
- });
- return;
- }
-
- mEventLog.add(tag, threadId);
- mEventLog.finish(this.toString());
- }
- }
-
- /**
- * Associates this request with the given queue. The request queue will be notified when this
- * request has finished.
- *
- * @return This Request object to allow for chaining.
- */
- public Request> setRequestQueue(RequestQueue requestQueue) {
- mRequestQueue = requestQueue;
- return this;
- }
-
- /**
- * Sets the sequence number of this request. Used by {@link RequestQueue}.
- *
- * @return This Request object to allow for chaining.
- */
- public final Request> setSequence(int sequence) {
- mSequence = sequence;
- return this;
- }
-
- /** Returns the sequence number of this request. */
- public final int getSequence() {
- if (mSequence == null) {
- throw new IllegalStateException("getSequence called before setSequence");
- }
- return mSequence;
- }
-
- /** Returns the URL of this request. */
- public String getUrl() {
- return mUrl;
- }
-
- /** Returns the cache key for this request. By default, this is the URL. */
- public String getCacheKey() {
- String url = getUrl();
- // If this is a GET request, just use the URL as the key.
- // For callers using DEPRECATED_GET_OR_POST, we assume the method is GET, which matches
- // legacy behavior where all methods had the same cache key. We can't determine which method
- // will be used because doing so requires calling getPostBody() which is expensive and may
- // throw AuthFailureError.
- // TODO(#190): Remove support for non-GET methods.
- int method = getMethod();
- if (method == Method.GET || method == Method.DEPRECATED_GET_OR_POST) {
- return url;
- }
- return Integer.toString(method) + '-' + url;
- }
-
- /**
- * Annotates this request with an entry retrieved for it from cache. Used for cache coherency
- * support.
- *
- * @return This Request object to allow for chaining.
- */
- public Request> setCacheEntry(Cache.Entry entry) {
- mCacheEntry = entry;
- return this;
- }
-
- /** Returns the annotated cache entry, or null if there isn't one. */
- public Cache.Entry getCacheEntry() {
- return mCacheEntry;
- }
-
- /**
- * Mark this request as canceled.
- *
- *
No callback will be delivered as long as either:
- *
- *
- *
This method is called on the same thread as the {@link ResponseDelivery} is running on.
- * By default, this is the main thread.
- *
The request subclass being used overrides cancel() and ensures that it does not invoke
- * the listener in {@link #deliverResponse} after cancel() has been called in a
- * thread-safe manner.
- *
- *
- *
There are no guarantees if both of these conditions aren't met.
- */
- @CallSuper
- public void cancel() {
- synchronized (mLock) {
- mCanceled = true;
- mErrorListener = null;
- }
- }
-
- /** Returns true if this request has been canceled. */
- public boolean isCanceled() {
- synchronized (mLock) {
- return mCanceled;
- }
- }
-
- /**
- * Returns a list of extra HTTP headers to go along with this request. Can throw {@link
- * AuthFailureError} as authentication may be required to provide these values.
- *
- * @throws AuthFailureError In the event of auth failure
- */
- public Map getHeaders() throws AuthFailureError {
- return Collections.emptyMap();
- }
-
- /**
- * Returns a Map of POST parameters to be used for this request, or null if a simple GET should
- * be used. Can throw {@link AuthFailureError} as authentication may be required to provide
- * these values.
- *
- *
Note that only one of getPostParams() and getPostBody() can return a non-null value.
- *
- * @throws AuthFailureError In the event of auth failure
- * @deprecated Use {@link #getParams()} instead.
- */
- @Deprecated
- protected Map getPostParams() throws AuthFailureError {
- return getParams();
- }
-
- /**
- * Returns which encoding should be used when converting POST parameters returned by {@link
- * #getPostParams()} into a raw POST body.
- *
- *
This controls both encodings:
- *
- *
- *
The string encoding used when converting parameter names and values into bytes prior to
- * URL encoding them.
- *
The string encoding used when converting the URL encoded parameters into a raw byte
- * array.
- *
- *
- * @deprecated Use {@link #getParamsEncoding()} instead.
- */
- @Deprecated
- protected String getPostParamsEncoding() {
- return getParamsEncoding();
- }
-
- /** @deprecated Use {@link #getBodyContentType()} instead. */
- @Deprecated
- public String getPostBodyContentType() {
- return getBodyContentType();
- }
-
- /**
- * Returns the raw POST body to be sent.
- *
- * @throws AuthFailureError In the event of auth failure
- * @deprecated Use {@link #getBody()} instead.
- */
- @Deprecated
- public byte[] getPostBody() throws AuthFailureError {
- // Note: For compatibility with legacy clients of volley, this implementation must remain
- // here instead of simply calling the getBody() function because this function must
- // call getPostParams() and getPostParamsEncoding() since legacy clients would have
- // overridden these two member functions for POST requests.
- Map postParams = getPostParams();
- if (postParams != null && postParams.size() > 0) {
- return encodeParameters(postParams, getPostParamsEncoding());
- }
- return null;
- }
-
- /**
- * Returns a Map of parameters to be used for a POST or PUT request. Can throw {@link
- * AuthFailureError} as authentication may be required to provide these values.
- *
- *
Note that you can directly override {@link #getBody()} for custom data.
- *
- * @throws AuthFailureError in the event of auth failure
- */
- protected Map getParams() throws AuthFailureError {
- return null;
- }
-
- /**
- * Returns which encoding should be used when converting POST or PUT parameters returned by
- * {@link #getParams()} into a raw POST or PUT body.
- *
- *
This controls both encodings:
- *
- *
- *
The string encoding used when converting parameter names and values into bytes prior to
- * URL encoding them.
- *
The string encoding used when converting the URL encoded parameters into a raw byte
- * array.
- *
- */
- protected String getParamsEncoding() {
- return DEFAULT_PARAMS_ENCODING;
- }
-
- /** Returns the content type of the POST or PUT body. */
- public String getBodyContentType() {
- return "application/x-www-form-urlencoded; charset=" + getParamsEncoding();
- }
-
- /**
- * Returns the raw POST or PUT body to be sent.
- *
- *
By default, the body consists of the request parameters in
- * application/x-www-form-urlencoded format. When overriding this method, consider overriding
- * {@link #getBodyContentType()} as well to match the new body format.
- *
- * @throws AuthFailureError in the event of auth failure
- */
- public byte[] getBody() throws AuthFailureError {
- Map params = getParams();
- if (params != null && params.size() > 0) {
- return encodeParameters(params, getParamsEncoding());
- }
- return null;
- }
-
- /** Converts params into an application/x-www-form-urlencoded encoded string. */
- private byte[] encodeParameters(Map params, String paramsEncoding) {
- StringBuilder encodedParams = new StringBuilder();
- try {
- for (Map.Entry entry : params.entrySet()) {
- if (entry.getKey() == null || entry.getValue() == null) {
- throw new IllegalArgumentException(
- String.format(
- "Request#getParams() or Request#getPostParams() returned a map "
- + "containing a null key or value: (%s, %s). All keys "
- + "and values must be non-null.",
- entry.getKey(), entry.getValue()));
- }
- encodedParams.append(URLEncoder.encode(entry.getKey(), paramsEncoding));
- encodedParams.append('=');
- encodedParams.append(URLEncoder.encode(entry.getValue(), paramsEncoding));
- encodedParams.append('&');
- }
- return encodedParams.toString().getBytes(paramsEncoding);
- } catch (UnsupportedEncodingException uee) {
- throw new RuntimeException("Encoding not supported: " + paramsEncoding, uee);
- }
- }
-
- /**
- * Set whether or not responses to this request should be cached.
- *
- * @return This Request object to allow for chaining.
- */
- public final Request> setShouldCache(boolean shouldCache) {
- mShouldCache = shouldCache;
- return this;
- }
-
- /** Returns true if responses to this request should be cached. */
- public final boolean shouldCache() {
- return mShouldCache;
- }
-
- /**
- * Sets whether or not the request should be retried in the event of an HTTP 5xx (server) error.
- *
- * @return This Request object to allow for chaining.
- */
- public final Request> setShouldRetryServerErrors(boolean shouldRetryServerErrors) {
- mShouldRetryServerErrors = shouldRetryServerErrors;
- return this;
- }
-
- /**
- * Returns true if this request should be retried in the event of an HTTP 5xx (server) error.
- */
- public final boolean shouldRetryServerErrors() {
- return mShouldRetryServerErrors;
- }
-
- /**
- * Priority values. Requests will be processed from higher priorities to lower priorities, in
- * FIFO order.
- */
- public enum Priority {
- LOW,
- NORMAL,
- HIGH,
- IMMEDIATE
- }
-
- /** Returns the {@link Priority} of this request; {@link Priority#NORMAL} by default. */
- public Priority getPriority() {
- return Priority.NORMAL;
- }
-
- /**
- * Returns the socket timeout in milliseconds per retry attempt. (This value can be changed per
- * retry attempt if a backoff is specified via backoffTimeout()). If there are no retry attempts
- * remaining, this will cause delivery of a {@link TimeoutError} error.
- */
- public final int getTimeoutMs() {
- return getRetryPolicy().getCurrentTimeout();
- }
-
- /** Returns the retry policy that should be used for this request. */
- public RetryPolicy getRetryPolicy() {
- return mRetryPolicy;
- }
-
- /**
- * Mark this request as having a response delivered on it. This can be used later in the
- * request's lifetime for suppressing identical responses.
- */
- public void markDelivered() {
- synchronized (mLock) {
- mResponseDelivered = true;
- }
- }
-
- /** Returns true if this request has had a response delivered for it. */
- public boolean hasHadResponseDelivered() {
- synchronized (mLock) {
- return mResponseDelivered;
- }
- }
-
- /**
- * Subclasses must implement this to parse the raw network response and return an appropriate
- * response type. This method will be called from a worker thread. The response will not be
- * delivered if you return null.
- *
- * @param response Response from the network
- * @return The parsed response, or null in the case of an error
- */
- protected abstract Response parseNetworkResponse(NetworkResponse response);
-
- /**
- * Subclasses can override this method to parse 'networkError' and return a more specific error.
- *
- *
The default implementation just returns the passed 'networkError'.
- *
- * @param volleyError the error retrieved from the network
- * @return an NetworkError augmented with additional information
- */
- protected VolleyError parseNetworkError(VolleyError volleyError) {
- return volleyError;
- }
-
- /**
- * Subclasses must implement this to perform delivery of the parsed response to their listeners.
- * The given response is guaranteed to be non-null; responses that fail to parse are not
- * delivered.
- *
- * @param response The parsed response returned by {@link
- * #parseNetworkResponse(NetworkResponse)}
- */
- protected abstract void deliverResponse(T response);
-
- /**
- * Delivers error message to the ErrorListener that the Request was initialized with.
- *
- * @param error Error details
- */
- public void deliverError(VolleyError error) {
- Response.ErrorListener listener;
- synchronized (mLock) {
- listener = mErrorListener;
- }
- if (listener != null) {
- listener.onErrorResponse(error);
- }
- }
-
- /**
- * {@link NetworkRequestCompleteListener} that will receive callbacks when the request returns
- * from the network.
- */
- /* package */ void setNetworkRequestCompleteListener(
- NetworkRequestCompleteListener requestCompleteListener) {
- synchronized (mLock) {
- mRequestCompleteListener = requestCompleteListener;
- }
- }
-
- /**
- * Notify NetworkRequestCompleteListener that a valid response has been received which can be
- * used for other, waiting requests.
- *
- * @param response received from the network
- */
- /* package */ void notifyListenerResponseReceived(Response> response) {
- NetworkRequestCompleteListener listener;
- synchronized (mLock) {
- listener = mRequestCompleteListener;
- }
- if (listener != null) {
- listener.onResponseReceived(this, response);
- }
- }
-
- /**
- * Notify NetworkRequestCompleteListener that the network request did not result in a response
- * which can be used for other, waiting requests.
- */
- /* package */ void notifyListenerResponseNotUsable() {
- NetworkRequestCompleteListener listener;
- synchronized (mLock) {
- listener = mRequestCompleteListener;
- }
- if (listener != null) {
- listener.onNoUsableResponseReceived(this);
- }
- }
-
- /**
- * Our comparator sorts from high to low priority, and secondarily by sequence number to provide
- * FIFO ordering.
- */
- @Override
- public int compareTo(Request other) {
- Priority left = this.getPriority();
- Priority right = other.getPriority();
-
- // High-priority requests are "lesser" so they are sorted to the front.
- // Equal priorities are sorted by sequence number to provide FIFO ordering.
- return left == right ? this.mSequence - other.mSequence : right.ordinal() - left.ordinal();
- }
-
- @Override
- public String toString() {
- String trafficStatsTag = "0x" + Integer.toHexString(getTrafficStatsTag());
- return (isCanceled() ? "[X] " : "[ ] ")
- + getUrl()
- + " "
- + trafficStatsTag
- + " "
- + getPriority()
- + " "
- + mSequence;
- }
-}
diff --git a/volley/src/main/java/com/android/volley/RequestQueue.java b/volley/src/main/java/com/android/volley/RequestQueue.java
deleted file mode 100644
index a9312be..0000000
--- a/volley/src/main/java/com/android/volley/RequestQueue.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-import android.os.Handler;
-import android.os.Looper;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.PriorityBlockingQueue;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * A request dispatch queue with a thread pool of dispatchers.
- *
- *
Calling {@link #add(Request)} will enqueue the given Request for dispatch, resolving from
- * either cache or network on a worker thread, and then delivering a parsed response on the main
- * thread.
- */
-public class RequestQueue {
-
- /** Callback interface for completed requests. */
- // TODO: This should not be a generic class, because the request type can't be determined at
- // compile time, so all calls to onRequestFinished are unsafe. However, changing this would be
- // an API-breaking change. See also: https://github.com/google/volley/pull/109
- public interface RequestFinishedListener {
- /** Called when a request has finished processing. */
- void onRequestFinished(Request request);
- }
-
- /** Used for generating monotonically-increasing sequence numbers for requests. */
- private final AtomicInteger mSequenceGenerator = new AtomicInteger();
-
- /**
- * The set of all requests currently being processed by this RequestQueue. A Request will be in
- * this set if it is waiting in any queue or currently being processed by any dispatcher.
- */
- private final Set> mCurrentRequests = new HashSet<>();
-
- /** The cache triage queue. */
- private final PriorityBlockingQueue> mCacheQueue = new PriorityBlockingQueue<>();
-
- /** The queue of requests that are actually going out to the network. */
- private final PriorityBlockingQueue> mNetworkQueue = new PriorityBlockingQueue<>();
-
- /** Number of network request dispatcher threads to start. */
- private static final int DEFAULT_NETWORK_THREAD_POOL_SIZE = 4;
-
- /** Cache interface for retrieving and storing responses. */
- private final Cache mCache;
-
- /** Network interface for performing requests. */
- private final Network mNetwork;
-
- /** Response delivery mechanism. */
- private final ResponseDelivery mDelivery;
-
- /** The network dispatchers. */
- private final NetworkDispatcher[] mDispatchers;
-
- /** The cache dispatcher. */
- private CacheDispatcher mCacheDispatcher;
-
- private final List mFinishedListeners = new ArrayList<>();
-
- /**
- * Creates the worker pool. Processing will not begin until {@link #start()} is called.
- *
- * @param cache A Cache to use for persisting responses to disk
- * @param network A Network interface for performing HTTP requests
- * @param threadPoolSize Number of network dispatcher threads to create
- * @param delivery A ResponseDelivery interface for posting responses and errors
- */
- public RequestQueue(
- Cache cache, Network network, int threadPoolSize, ResponseDelivery delivery) {
- mCache = cache;
- mNetwork = network;
- mDispatchers = new NetworkDispatcher[threadPoolSize];
- mDelivery = delivery;
- }
-
- /**
- * Creates the worker pool. Processing will not begin until {@link #start()} is called.
- *
- * @param cache A Cache to use for persisting responses to disk
- * @param network A Network interface for performing HTTP requests
- * @param threadPoolSize Number of network dispatcher threads to create
- */
- public RequestQueue(Cache cache, Network network, int threadPoolSize) {
- this(
- cache,
- network,
- threadPoolSize,
- new ExecutorDelivery(new Handler(Looper.getMainLooper())));
- }
-
- /**
- * Creates the worker pool. Processing will not begin until {@link #start()} is called.
- *
- * @param cache A Cache to use for persisting responses to disk
- * @param network A Network interface for performing HTTP requests
- */
- public RequestQueue(Cache cache, Network network) {
- this(cache, network, DEFAULT_NETWORK_THREAD_POOL_SIZE);
- }
-
- /** Starts the dispatchers in this queue. */
- public void start() {
- stop(); // Make sure any currently running dispatchers are stopped.
- // Create the cache dispatcher and start it.
- mCacheDispatcher = new CacheDispatcher(mCacheQueue, mNetworkQueue, mCache, mDelivery);
- mCacheDispatcher.start();
-
- // Create network dispatchers (and corresponding threads) up to the pool size.
- for (int i = 0; i < mDispatchers.length; i++) {
- NetworkDispatcher networkDispatcher =
- new NetworkDispatcher(mNetworkQueue, mNetwork, mCache, mDelivery);
- mDispatchers[i] = networkDispatcher;
- networkDispatcher.start();
- }
- }
-
- /** Stops the cache and network dispatchers. */
- public void stop() {
- if (mCacheDispatcher != null) {
- mCacheDispatcher.quit();
- }
- for (final NetworkDispatcher mDispatcher : mDispatchers) {
- if (mDispatcher != null) {
- mDispatcher.quit();
- }
- }
- }
-
- /** Gets a sequence number. */
- public int getSequenceNumber() {
- return mSequenceGenerator.incrementAndGet();
- }
-
- /** Gets the {@link Cache} instance being used. */
- public Cache getCache() {
- return mCache;
- }
-
- /**
- * A simple predicate or filter interface for Requests, for use by {@link
- * RequestQueue#cancelAll(RequestFilter)}.
- */
- public interface RequestFilter {
- boolean apply(Request> request);
- }
-
- /**
- * Cancels all requests in this queue for which the given filter applies.
- *
- * @param filter The filtering function to use
- */
- public void cancelAll(RequestFilter filter) {
- synchronized (mCurrentRequests) {
- for (Request> request : mCurrentRequests) {
- if (filter.apply(request)) {
- request.cancel();
- }
- }
- }
- }
-
- /**
- * Cancels all requests in this queue with the given tag. Tag must be non-null and equality is
- * by identity.
- */
- public void cancelAll(final Object tag) {
- if (tag == null) {
- throw new IllegalArgumentException("Cannot cancelAll with a null tag");
- }
- cancelAll(
- new RequestFilter() {
- @Override
- public boolean apply(Request> request) {
- return request.getTag() == tag;
- }
- });
- }
-
- /**
- * Adds a Request to the dispatch queue.
- *
- * @param request The request to service
- * @return The passed-in request
- */
- public Request add(Request request) {
- // Tag the request as belonging to this queue and add it to the set of current requests.
- request.setRequestQueue(this);
- synchronized (mCurrentRequests) {
- mCurrentRequests.add(request);
- }
-
- // Process requests in the order they are added.
- request.setSequence(getSequenceNumber());
- request.addMarker("add-to-queue");
-
- // If the request is uncacheable, skip the cache queue and go straight to the network.
- if (!request.shouldCache()) {
- mNetworkQueue.add(request);
- return request;
- }
- mCacheQueue.add(request);
- return request;
- }
-
- /**
- * Called from {@link Request#finish(String)}, indicating that processing of the given request
- * has finished.
- */
- @SuppressWarnings("unchecked") // see above note on RequestFinishedListener
- void finish(Request request) {
- // Remove from the set of requests currently being processed.
- synchronized (mCurrentRequests) {
- mCurrentRequests.remove(request);
- }
- synchronized (mFinishedListeners) {
- for (RequestFinishedListener listener : mFinishedListeners) {
- listener.onRequestFinished(request);
- }
- }
- }
-
- public void addRequestFinishedListener(RequestFinishedListener listener) {
- synchronized (mFinishedListeners) {
- mFinishedListeners.add(listener);
- }
- }
-
- /** Remove a RequestFinishedListener. Has no effect if listener was not previously added. */
- public void removeRequestFinishedListener(RequestFinishedListener listener) {
- synchronized (mFinishedListeners) {
- mFinishedListeners.remove(listener);
- }
- }
-}
diff --git a/volley/src/main/java/com/android/volley/Response.java b/volley/src/main/java/com/android/volley/Response.java
deleted file mode 100644
index 2f50e2d..0000000
--- a/volley/src/main/java/com/android/volley/Response.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-/**
- * Encapsulates a parsed response for delivery.
- *
- * @param Parsed type of this response
- */
-public class Response {
-
- /** Callback interface for delivering parsed responses. */
- public interface Listener {
- /** Called when a response is received. */
- void onResponse(T response);
- }
-
- /** Callback interface for delivering error responses. */
- public interface ErrorListener {
- /**
- * Callback method that an error has been occurred with the provided error code and optional
- * user-readable message.
- */
- void onErrorResponse(VolleyError error);
- }
-
- /** Returns a successful response containing the parsed result. */
- public static Response success(T result, Cache.Entry cacheEntry) {
- return new Response<>(result, cacheEntry);
- }
-
- /**
- * Returns a failed response containing the given error code and an optional localized message
- * displayed to the user.
- */
- public static Response error(VolleyError error) {
- return new Response<>(error);
- }
-
- /** Parsed response, or null in the case of error. */
- public final T result;
-
- /** Cache metadata for this response, or null in the case of error. */
- public final Cache.Entry cacheEntry;
-
- /** Detailed error information if errorCode != OK. */
- public final VolleyError error;
-
- /** True if this response was a soft-expired one and a second one MAY be coming. */
- public boolean intermediate = false;
-
- /** Returns whether this response is considered successful. */
- public boolean isSuccess() {
- return error == null;
- }
-
- private Response(T result, Cache.Entry cacheEntry) {
- this.result = result;
- this.cacheEntry = cacheEntry;
- this.error = null;
- }
-
- private Response(VolleyError error) {
- this.result = null;
- this.cacheEntry = null;
- this.error = error;
- }
-}
diff --git a/volley/src/main/java/com/android/volley/ResponseDelivery.java b/volley/src/main/java/com/android/volley/ResponseDelivery.java
deleted file mode 100644
index 10aa137..0000000
--- a/volley/src/main/java/com/android/volley/ResponseDelivery.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-public interface ResponseDelivery {
- /** Parses a response from the network or cache and delivers it. */
- void postResponse(Request> request, Response> response);
-
- /**
- * Parses a response from the network or cache and delivers it. The provided Runnable will be
- * executed after delivery.
- */
- void postResponse(Request> request, Response> response, Runnable runnable);
-
- /** Posts an error for the given request. */
- void postError(Request> request, VolleyError error);
-}
diff --git a/volley/src/main/java/com/android/volley/RetryPolicy.java b/volley/src/main/java/com/android/volley/RetryPolicy.java
deleted file mode 100644
index 3ef26de..0000000
--- a/volley/src/main/java/com/android/volley/RetryPolicy.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-/**
- * Retry policy for a request.
- *
- *
A retry policy can control two parameters:
- *
- *
- *
The number of tries. This can be a simple counter or more complex logic based on the type
- * of error passed to {@link #retry(VolleyError)}, although {@link #getCurrentRetryCount()}
- * should always return the current retry count for logging purposes.
- *
The request timeout for each try, via {@link #getCurrentTimeout()}. In the common case that
- * a request times out before the response has been received from the server, retrying again
- * with a longer timeout can increase the likelihood of success (at the expense of causing the
- * user to wait longer, especially if the request still fails).
- *
- *
- *
Note that currently, retries triggered by a retry policy are attempted immediately in sequence
- * with no delay between them (although the time between tries may increase if the requests are
- * timing out and {@link #getCurrentTimeout()} is returning increasing values).
- *
- *
By default, Volley uses {@link DefaultRetryPolicy}.
- */
-public interface RetryPolicy {
-
- /** Returns the current timeout (used for logging). */
- int getCurrentTimeout();
-
- /** Returns the current retry count (used for logging). */
- int getCurrentRetryCount();
-
- /**
- * Prepares for the next retry by applying a backoff to the timeout.
- *
- * @param error The error code of the last attempt.
- * @throws VolleyError In the event that the retry could not be performed (for example if we ran
- * out of attempts), the passed in error is thrown.
- */
- void retry(VolleyError error) throws VolleyError;
-}
diff --git a/volley/src/main/java/com/android/volley/ServerError.java b/volley/src/main/java/com/android/volley/ServerError.java
deleted file mode 100644
index 84b2eb4..0000000
--- a/volley/src/main/java/com/android/volley/ServerError.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-/** Indicates that the server responded with an error response. */
-@SuppressWarnings("serial")
-public class ServerError extends VolleyError {
- public ServerError(NetworkResponse networkResponse) {
- super(networkResponse);
- }
-
- public ServerError() {
- super();
- }
-}
diff --git a/volley/src/main/java/com/android/volley/TimeoutError.java b/volley/src/main/java/com/android/volley/TimeoutError.java
deleted file mode 100644
index 227ae08..0000000
--- a/volley/src/main/java/com/android/volley/TimeoutError.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-/** Indicates that the connection or the socket timed out. */
-@SuppressWarnings("serial")
-public class TimeoutError extends VolleyError {}
diff --git a/volley/src/main/java/com/android/volley/VolleyError.java b/volley/src/main/java/com/android/volley/VolleyError.java
deleted file mode 100644
index 45086da..0000000
--- a/volley/src/main/java/com/android/volley/VolleyError.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-/** Exception style class encapsulating Volley errors */
-@SuppressWarnings("serial")
-public class VolleyError extends Exception {
- public final NetworkResponse networkResponse;
- private long networkTimeMs;
-
- public VolleyError() {
- networkResponse = null;
- }
-
- public VolleyError(NetworkResponse response) {
- networkResponse = response;
- }
-
- public VolleyError(String exceptionMessage) {
- super(exceptionMessage);
- networkResponse = null;
- }
-
- public VolleyError(String exceptionMessage, Throwable reason) {
- super(exceptionMessage, reason);
- networkResponse = null;
- }
-
- public VolleyError(Throwable cause) {
- super(cause);
- networkResponse = null;
- }
-
- /* package */ void setNetworkTimeMs(long networkTimeMs) {
- this.networkTimeMs = networkTimeMs;
- }
-
- public long getNetworkTimeMs() {
- return networkTimeMs;
- }
-}
diff --git a/volley/src/main/java/com/android/volley/VolleyLog.java b/volley/src/main/java/com/android/volley/VolleyLog.java
deleted file mode 100644
index 8477668..0000000
--- a/volley/src/main/java/com/android/volley/VolleyLog.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley;
-
-import android.os.SystemClock;
-import android.util.Log;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Logging helper class.
- *
- *
to see Volley logs call:
- * {@code /platform-tools/adb shell setprop log.tag.Volley VERBOSE}
- */
-public class VolleyLog {
- public static String TAG = "Volley";
-
- public static boolean DEBUG = Log.isLoggable(TAG, Log.VERBOSE);
-
- /**
- * {@link Class#getName()} uses reflection and calling it on a potentially hot code path may
- * have some cost. To minimize this cost we fetch class name once here and use it later.
- */
- private static final String CLASS_NAME = VolleyLog.class.getName();
-
- /**
- * Customize the log tag for your application, so that other apps using Volley don't mix their
- * logs with yours.
- * Enable the log property for your tag before starting your app:
- * {@code adb shell setprop log.tag.<tag>}
- */
- public static void setTag(String tag) {
- d("Changing log tag to %s", tag);
- TAG = tag;
-
- // Reinitialize the DEBUG "constant"
- DEBUG = Log.isLoggable(TAG, Log.VERBOSE);
- }
-
- public static void v(String format, Object... args) {
- if (DEBUG) {
- Log.v(TAG, buildMessage(format, args));
- }
- }
-
- public static void d(String format, Object... args) {
- Log.d(TAG, buildMessage(format, args));
- }
-
- public static void e(String format, Object... args) {
- Log.e(TAG, buildMessage(format, args));
- }
-
- public static void e(Throwable tr, String format, Object... args) {
- Log.e(TAG, buildMessage(format, args), tr);
- }
-
- public static void wtf(String format, Object... args) {
- Log.wtf(TAG, buildMessage(format, args));
- }
-
- public static void wtf(Throwable tr, String format, Object... args) {
- Log.wtf(TAG, buildMessage(format, args), tr);
- }
-
- /**
- * Formats the caller's provided message and prepends useful info like calling thread ID and
- * method name.
- */
- private static String buildMessage(String format, Object... args) {
- String msg = (args == null) ? format : String.format(Locale.US, format, args);
- StackTraceElement[] trace = new Throwable().fillInStackTrace().getStackTrace();
-
- String caller = "";
- // Walk up the stack looking for the first caller outside of VolleyLog.
- // It will be at least two frames up, so start there.
- for (int i = 2; i < trace.length; i++) {
- String clazz = trace[i].getClassName();
- if (!clazz.equals(VolleyLog.CLASS_NAME)) {
- String callingClass = trace[i].getClassName();
- callingClass = callingClass.substring(callingClass.lastIndexOf('.') + 1);
- callingClass = callingClass.substring(callingClass.lastIndexOf('$') + 1);
-
- caller = callingClass + "." + trace[i].getMethodName();
- break;
- }
- }
- return String.format(Locale.US, "[%d] %s: %s", Thread.currentThread().getId(), caller, msg);
- }
-
- /** A simple event log with records containing a name, thread ID, and timestamp. */
- static class MarkerLog {
- public static final boolean ENABLED = VolleyLog.DEBUG;
-
- /** Minimum duration from first marker to last in an marker log to warrant logging. */
- private static final long MIN_DURATION_FOR_LOGGING_MS = 0;
-
- private static class Marker {
- public final String name;
- public final long thread;
- public final long time;
-
- public Marker(String name, long thread, long time) {
- this.name = name;
- this.thread = thread;
- this.time = time;
- }
- }
-
- private final List mMarkers = new ArrayList<>();
- private boolean mFinished = false;
-
- /** Adds a marker to this log with the specified name. */
- public synchronized void add(String name, long threadId) {
- if (mFinished) {
- throw new IllegalStateException("Marker added to finished log");
- }
-
- mMarkers.add(new Marker(name, threadId, SystemClock.elapsedRealtime()));
- }
-
- /**
- * Closes the log, dumping it to logcat if the time difference between the first and last
- * markers is greater than {@link #MIN_DURATION_FOR_LOGGING_MS}.
- *
- * @param header Header string to print above the marker log.
- */
- public synchronized void finish(String header) {
- mFinished = true;
-
- long duration = getTotalDuration();
- if (duration <= MIN_DURATION_FOR_LOGGING_MS) {
- return;
- }
-
- long prevTime = mMarkers.get(0).time;
- d("(%-4d ms) %s", duration, header);
- for (Marker marker : mMarkers) {
- long thisTime = marker.time;
- d("(+%-4d) [%2d] %s", (thisTime - prevTime), marker.thread, marker.name);
- prevTime = thisTime;
- }
- }
-
- @Override
- protected void finalize() throws Throwable {
- // Catch requests that have been collected (and hence end-of-lifed)
- // but had no debugging output printed for them.
- if (!mFinished) {
- finish("Request on the loose");
- e("Marker log finalized without finish() - uncaught exit point for request");
- }
- }
-
- /** Returns the time difference between the first and last events in this log. */
- private long getTotalDuration() {
- if (mMarkers.size() == 0) {
- return 0;
- }
-
- long first = mMarkers.get(0).time;
- long last = mMarkers.get(mMarkers.size() - 1).time;
- return last - first;
- }
- }
-}
diff --git a/volley/src/main/java/com/android/volley/toolbox/AdaptedHttpStack.java b/volley/src/main/java/com/android/volley/toolbox/AdaptedHttpStack.java
deleted file mode 100644
index c75c25f..0000000
--- a/volley/src/main/java/com/android/volley/toolbox/AdaptedHttpStack.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.android.volley.toolbox;
-
-import com.android.volley.AuthFailureError;
-import com.android.volley.Header;
-import com.android.volley.Request;
-import java.io.IOException;
-import java.net.SocketTimeoutException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import org.apache.http.conn.ConnectTimeoutException;
-
-/**
- * {@link BaseHttpStack} implementation wrapping a {@link HttpStack}.
- *
- *
{@link BasicNetwork} uses this if it is provided a {@link HttpStack} at construction time,
- * allowing it to have one implementation based atop {@link BaseHttpStack}.
- */
-@SuppressWarnings("deprecation")
-class AdaptedHttpStack extends BaseHttpStack {
-
- private final HttpStack mHttpStack;
-
- AdaptedHttpStack(HttpStack httpStack) {
- mHttpStack = httpStack;
- }
-
- @Override
- public HttpResponse executeRequest(Request> request, Map additionalHeaders)
- throws IOException, AuthFailureError {
- org.apache.http.HttpResponse apacheResp;
- try {
- apacheResp = mHttpStack.performRequest(request, additionalHeaders);
- } catch (ConnectTimeoutException e) {
- // BasicNetwork won't know that this exception should be retried like a timeout, since
- // it's an Apache-specific error, so wrap it in a standard timeout exception.
- throw new SocketTimeoutException(e.getMessage());
- }
-
- int statusCode = apacheResp.getStatusLine().getStatusCode();
-
- org.apache.http.Header[] headers = apacheResp.getAllHeaders();
- List headerList = new ArrayList<>(headers.length);
- for (org.apache.http.Header header : headers) {
- headerList.add(new Header(header.getName(), header.getValue()));
- }
-
- if (apacheResp.getEntity() == null) {
- return new HttpResponse(statusCode, headerList);
- }
-
- long contentLength = apacheResp.getEntity().getContentLength();
- if ((int) contentLength != contentLength) {
- throw new IOException("Response too large: " + contentLength);
- }
-
- return new HttpResponse(
- statusCode,
- headerList,
- (int) apacheResp.getEntity().getContentLength(),
- apacheResp.getEntity().getContent());
- }
-}
diff --git a/volley/src/main/java/com/android/volley/toolbox/AndroidAuthenticator.java b/volley/src/main/java/com/android/volley/toolbox/AndroidAuthenticator.java
deleted file mode 100644
index 72271fc..0000000
--- a/volley/src/main/java/com/android/volley/toolbox/AndroidAuthenticator.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley.toolbox;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.accounts.AccountManagerFuture;
-import android.annotation.SuppressLint;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.annotation.VisibleForTesting;
-import com.android.volley.AuthFailureError;
-
-/**
- * An Authenticator that uses {@link AccountManager} to get auth tokens of a specified type for a
- * specified account.
- */
-// TODO: Update this to account for runtime permissions
-@SuppressLint("MissingPermission")
-public class AndroidAuthenticator implements Authenticator {
- private final AccountManager mAccountManager;
- private final Account mAccount;
- private final String mAuthTokenType;
- private final boolean mNotifyAuthFailure;
-
- /**
- * Creates a new authenticator.
- *
- * @param context Context for accessing AccountManager
- * @param account Account to authenticate as
- * @param authTokenType Auth token type passed to AccountManager
- */
- public AndroidAuthenticator(Context context, Account account, String authTokenType) {
- this(context, account, authTokenType, /* notifyAuthFailure= */ false);
- }
-
- /**
- * Creates a new authenticator.
- *
- * @param context Context for accessing AccountManager
- * @param account Account to authenticate as
- * @param authTokenType Auth token type passed to AccountManager
- * @param notifyAuthFailure Whether to raise a notification upon auth failure
- */
- public AndroidAuthenticator(
- Context context, Account account, String authTokenType, boolean notifyAuthFailure) {
- this(AccountManager.get(context), account, authTokenType, notifyAuthFailure);
- }
-
- @VisibleForTesting
- AndroidAuthenticator(
- AccountManager accountManager,
- Account account,
- String authTokenType,
- boolean notifyAuthFailure) {
- mAccountManager = accountManager;
- mAccount = account;
- mAuthTokenType = authTokenType;
- mNotifyAuthFailure = notifyAuthFailure;
- }
-
- /** Returns the Account being used by this authenticator. */
- public Account getAccount() {
- return mAccount;
- }
-
- /** Returns the Auth Token Type used by this authenticator. */
- public String getAuthTokenType() {
- return mAuthTokenType;
- }
-
- // TODO: Figure out what to do about notifyAuthFailure
- @SuppressWarnings("deprecation")
- @Override
- public String getAuthToken() throws AuthFailureError {
- AccountManagerFuture future =
- mAccountManager.getAuthToken(
- mAccount,
- mAuthTokenType,
- mNotifyAuthFailure,
- /* callback= */ null,
- /* handler= */ null);
- Bundle result;
- try {
- result = future.getResult();
- } catch (Exception e) {
- throw new AuthFailureError("Error while retrieving auth token", e);
- }
- String authToken = null;
- if (future.isDone() && !future.isCancelled()) {
- if (result.containsKey(AccountManager.KEY_INTENT)) {
- Intent intent = result.getParcelable(AccountManager.KEY_INTENT);
- throw new AuthFailureError(intent);
- }
- authToken = result.getString(AccountManager.KEY_AUTHTOKEN);
- }
- if (authToken == null) {
- throw new AuthFailureError("Got null auth token for type: " + mAuthTokenType);
- }
-
- return authToken;
- }
-
- @Override
- public void invalidateAuthToken(String authToken) {
- mAccountManager.invalidateAuthToken(mAccount.type, authToken);
- }
-}
diff --git a/volley/src/main/java/com/android/volley/toolbox/Authenticator.java b/volley/src/main/java/com/android/volley/toolbox/Authenticator.java
deleted file mode 100644
index 2ba43db..0000000
--- a/volley/src/main/java/com/android/volley/toolbox/Authenticator.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley.toolbox;
-
-import com.android.volley.AuthFailureError;
-
-/** An interface for interacting with auth tokens. */
-public interface Authenticator {
- /**
- * Synchronously retrieves an auth token.
- *
- * @throws AuthFailureError If authentication did not succeed
- */
- String getAuthToken() throws AuthFailureError;
-
- /** Invalidates the provided auth token. */
- void invalidateAuthToken(String authToken);
-}
diff --git a/volley/src/main/java/com/android/volley/toolbox/BaseHttpStack.java b/volley/src/main/java/com/android/volley/toolbox/BaseHttpStack.java
deleted file mode 100644
index 4f596e1..0000000
--- a/volley/src/main/java/com/android/volley/toolbox/BaseHttpStack.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * 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.android.volley.toolbox;
-
-import com.android.volley.AuthFailureError;
-import com.android.volley.Header;
-import com.android.volley.Request;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.SocketTimeoutException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import org.apache.http.ProtocolVersion;
-import org.apache.http.StatusLine;
-import org.apache.http.entity.BasicHttpEntity;
-import org.apache.http.message.BasicHeader;
-import org.apache.http.message.BasicHttpResponse;
-import org.apache.http.message.BasicStatusLine;
-
-/** An HTTP stack abstraction. */
-@SuppressWarnings("deprecation") // for HttpStack
-public abstract class BaseHttpStack implements HttpStack {
-
- /**
- * Performs an HTTP request with the given parameters.
- *
- *
A GET request is sent if request.getPostBody() == null. A POST request is sent otherwise,
- * and the Content-Type header is set to request.getPostBodyContentType().
- *
- * @param request the request to perform
- * @param additionalHeaders additional headers to be sent together with {@link
- * Request#getHeaders()}
- * @return the {@link HttpResponse}
- * @throws SocketTimeoutException if the request times out
- * @throws IOException if another I/O error occurs during the request
- * @throws AuthFailureError if an authentication failure occurs during the request
- */
- public abstract HttpResponse executeRequest(
- Request> request, Map additionalHeaders)
- throws IOException, AuthFailureError;
-
- /**
- * @deprecated use {@link #executeRequest} instead to avoid a dependency on the deprecated
- * Apache HTTP library. Nothing in Volley's own source calls this method. However, since
- * {@link BasicNetwork#mHttpStack} is exposed to subclasses, we provide this implementation
- * in case legacy client apps are dependent on that field. This method may be removed in a
- * future release of Volley.
- */
- @Deprecated
- @Override
- public final org.apache.http.HttpResponse performRequest(
- Request> request, Map additionalHeaders)
- throws IOException, AuthFailureError {
- HttpResponse response = executeRequest(request, additionalHeaders);
-
- ProtocolVersion protocolVersion = new ProtocolVersion("HTTP", 1, 1);
- StatusLine statusLine =
- new BasicStatusLine(
- protocolVersion, response.getStatusCode(), /* reasonPhrase= */ "");
- BasicHttpResponse apacheResponse = new BasicHttpResponse(statusLine);
-
- List headers = new ArrayList<>();
- for (Header header : response.getHeaders()) {
- headers.add(new BasicHeader(header.getName(), header.getValue()));
- }
- apacheResponse.setHeaders(headers.toArray(new org.apache.http.Header[headers.size()]));
-
- InputStream responseStream = response.getContent();
- if (responseStream != null) {
- BasicHttpEntity entity = new BasicHttpEntity();
- entity.setContent(responseStream);
- entity.setContentLength(response.getContentLength());
- apacheResponse.setEntity(entity);
- }
-
- return apacheResponse;
- }
-}
diff --git a/volley/src/main/java/com/android/volley/toolbox/BasicNetwork.java b/volley/src/main/java/com/android/volley/toolbox/BasicNetwork.java
deleted file mode 100644
index b527cb9..0000000
--- a/volley/src/main/java/com/android/volley/toolbox/BasicNetwork.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley.toolbox;
-
-import android.os.SystemClock;
-import com.android.volley.AuthFailureError;
-import com.android.volley.Cache;
-import com.android.volley.Cache.Entry;
-import com.android.volley.ClientError;
-import com.android.volley.Header;
-import com.android.volley.Network;
-import com.android.volley.NetworkError;
-import com.android.volley.NetworkResponse;
-import com.android.volley.NoConnectionError;
-import com.android.volley.Request;
-import com.android.volley.RetryPolicy;
-import com.android.volley.ServerError;
-import com.android.volley.TimeoutError;
-import com.android.volley.VolleyError;
-import com.android.volley.VolleyLog;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.SocketTimeoutException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-/** A network performing Volley requests over an {@link HttpStack}. */
-public class BasicNetwork implements Network {
- protected static final boolean DEBUG = VolleyLog.DEBUG;
-
- private static final int SLOW_REQUEST_THRESHOLD_MS = 3000;
-
- private static final int DEFAULT_POOL_SIZE = 4096;
-
- /**
- * @deprecated Should never have been exposed in the API. This field may be removed in a future
- * release of Volley.
- */
- @Deprecated protected final HttpStack mHttpStack;
-
- private final BaseHttpStack mBaseHttpStack;
-
- protected final ByteArrayPool mPool;
-
- /**
- * @param httpStack HTTP stack to be used
- * @deprecated use {@link #BasicNetwork(BaseHttpStack)} instead to avoid depending on Apache
- * HTTP. This method may be removed in a future release of Volley.
- */
- @Deprecated
- public BasicNetwork(HttpStack httpStack) {
- // If a pool isn't passed in, then build a small default pool that will give us a lot of
- // benefit and not use too much memory.
- this(httpStack, new ByteArrayPool(DEFAULT_POOL_SIZE));
- }
-
- /**
- * @param httpStack HTTP stack to be used
- * @param pool a buffer pool that improves GC performance in copy operations
- * @deprecated use {@link #BasicNetwork(BaseHttpStack, ByteArrayPool)} instead to avoid
- * depending on Apache HTTP. This method may be removed in a future release of Volley.
- */
- @Deprecated
- public BasicNetwork(HttpStack httpStack, ByteArrayPool pool) {
- mHttpStack = httpStack;
- mBaseHttpStack = new AdaptedHttpStack(httpStack);
- mPool = pool;
- }
-
- /** @param httpStack HTTP stack to be used */
- public BasicNetwork(BaseHttpStack httpStack) {
- // If a pool isn't passed in, then build a small default pool that will give us a lot of
- // benefit and not use too much memory.
- this(httpStack, new ByteArrayPool(DEFAULT_POOL_SIZE));
- }
-
- /**
- * @param httpStack HTTP stack to be used
- * @param pool a buffer pool that improves GC performance in copy operations
- */
- public BasicNetwork(BaseHttpStack httpStack, ByteArrayPool pool) {
- mBaseHttpStack = httpStack;
- // Populate mHttpStack for backwards compatibility, since it is a protected field. However,
- // we won't use it directly here, so clients which don't access it directly won't need to
- // depend on Apache HTTP.
- mHttpStack = httpStack;
- mPool = pool;
- }
-
- @Override
- public NetworkResponse performRequest(Request> request) throws VolleyError {
- long requestStart = SystemClock.elapsedRealtime();
- while (true) {
- HttpResponse httpResponse = null;
- byte[] responseContents = null;
- List responseHeaders = Collections.emptyList();
- try {
- // Gather headers.
- Map additionalRequestHeaders =
- getCacheHeaders(request.getCacheEntry());
- httpResponse = mBaseHttpStack.executeRequest(request, additionalRequestHeaders);
- int statusCode = httpResponse.getStatusCode();
-
- responseHeaders = httpResponse.getHeaders();
- // Handle cache validation.
- if (statusCode == HttpURLConnection.HTTP_NOT_MODIFIED) {
- Entry entry = request.getCacheEntry();
- if (entry == null) {
- return new NetworkResponse(
- HttpURLConnection.HTTP_NOT_MODIFIED,
- /* data= */ null,
- /* notModified= */ true,
- SystemClock.elapsedRealtime() - requestStart,
- responseHeaders);
- }
- // Combine cached and response headers so the response will be complete.
- List combinedHeaders = combineHeaders(responseHeaders, entry);
- return new NetworkResponse(
- HttpURLConnection.HTTP_NOT_MODIFIED,
- entry.data,
- /* notModified= */ true,
- SystemClock.elapsedRealtime() - requestStart,
- combinedHeaders);
- }
-
- // Some responses such as 204s do not have content. We must check.
- InputStream inputStream = httpResponse.getContent();
- if (inputStream != null) {
- responseContents =
- inputStreamToBytes(inputStream, httpResponse.getContentLength());
- } else {
- // Add 0 byte response as a way of honestly representing a
- // no-content request.
- responseContents = new byte[0];
- }
-
- // if the request is slow, log it.
- long requestLifetime = SystemClock.elapsedRealtime() - requestStart;
- logSlowRequests(requestLifetime, request, responseContents, statusCode);
-
- if (statusCode < 200 || statusCode > 299) {
- throw new IOException();
- }
- return new NetworkResponse(
- statusCode,
- responseContents,
- /* notModified= */ false,
- SystemClock.elapsedRealtime() - requestStart,
- responseHeaders);
- } catch (SocketTimeoutException e) {
- attemptRetryOnException("socket", request, new TimeoutError());
- } catch (MalformedURLException e) {
- throw new RuntimeException("Bad URL " + request.getUrl(), e);
- } catch (IOException e) {
- int statusCode;
- if (httpResponse != null) {
- statusCode = httpResponse.getStatusCode();
- } else {
- throw new NoConnectionError(e);
- }
- VolleyLog.e("Unexpected response code %d for %s", statusCode, request.getUrl());
- NetworkResponse networkResponse;
- if (responseContents != null) {
- networkResponse =
- new NetworkResponse(
- statusCode,
- responseContents,
- /* notModified= */ false,
- SystemClock.elapsedRealtime() - requestStart,
- responseHeaders);
- if (statusCode == HttpURLConnection.HTTP_UNAUTHORIZED
- || statusCode == HttpURLConnection.HTTP_FORBIDDEN) {
- attemptRetryOnException(
- "auth", request, new AuthFailureError(networkResponse));
- } else if (statusCode >= 400 && statusCode <= 499) {
- // Don't retry other client errors.
- throw new ClientError(networkResponse);
- } else if (statusCode >= 500 && statusCode <= 599) {
- if (request.shouldRetryServerErrors()) {
- attemptRetryOnException(
- "server", request, new ServerError(networkResponse));
- } else {
- throw new ServerError(networkResponse);
- }
- } else {
- // 3xx? No reason to retry.
- throw new ServerError(networkResponse);
- }
- } else {
- attemptRetryOnException("network", request, new NetworkError());
- }
- }
- }
- }
-
- /** Logs requests that took over SLOW_REQUEST_THRESHOLD_MS to complete. */
- private void logSlowRequests(
- long requestLifetime, Request> request, byte[] responseContents, int statusCode) {
- if (DEBUG || requestLifetime > SLOW_REQUEST_THRESHOLD_MS) {
- VolleyLog.d(
- "HTTP response for request=<%s> [lifetime=%d], [size=%s], "
- + "[rc=%d], [retryCount=%s]",
- request,
- requestLifetime,
- responseContents != null ? responseContents.length : "null",
- statusCode,
- request.getRetryPolicy().getCurrentRetryCount());
- }
- }
-
- /**
- * Attempts to prepare the request for a retry. If there are no more attempts remaining in the
- * request's retry policy, a timeout exception is thrown.
- *
- * @param request The request to use.
- */
- private static void attemptRetryOnException(
- String logPrefix, Request> request, VolleyError exception) throws VolleyError {
- RetryPolicy retryPolicy = request.getRetryPolicy();
- int oldTimeout = request.getTimeoutMs();
-
- try {
- retryPolicy.retry(exception);
- } catch (VolleyError e) {
- request.addMarker(
- String.format("%s-timeout-giveup [timeout=%s]", logPrefix, oldTimeout));
- throw e;
- }
- request.addMarker(String.format("%s-retry [timeout=%s]", logPrefix, oldTimeout));
- }
-
- private Map getCacheHeaders(Cache.Entry entry) {
- // If there's no cache entry, we're done.
- if (entry == null) {
- return Collections.emptyMap();
- }
-
- Map headers = new HashMap<>();
-
- if (entry.etag != null) {
- headers.put("If-None-Match", entry.etag);
- }
-
- if (entry.lastModified > 0) {
- headers.put(
- "If-Modified-Since", HttpHeaderParser.formatEpochAsRfc1123(entry.lastModified));
- }
-
- return headers;
- }
-
- protected void logError(String what, String url, long start) {
- long now = SystemClock.elapsedRealtime();
- VolleyLog.v("HTTP ERROR(%s) %d ms to fetch %s", what, (now - start), url);
- }
-
- /** Reads the contents of an InputStream into a byte[]. */
- private byte[] inputStreamToBytes(InputStream in, int contentLength)
- throws IOException, ServerError {
- PoolingByteArrayOutputStream bytes = new PoolingByteArrayOutputStream(mPool, contentLength);
- byte[] buffer = null;
- try {
- if (in == null) {
- throw new ServerError();
- }
- buffer = mPool.getBuf(1024);
- int count;
- while ((count = in.read(buffer)) != -1) {
- bytes.write(buffer, 0, count);
- }
- return bytes.toByteArray();
- } finally {
- try {
- // Close the InputStream and release the resources by "consuming the content".
- if (in != null) {
- in.close();
- }
- } catch (IOException e) {
- // This can happen if there was an exception above that left the stream in
- // an invalid state.
- VolleyLog.v("Error occurred when closing InputStream");
- }
- mPool.returnBuf(buffer);
- bytes.close();
- }
- }
-
- /**
- * Converts Headers[] to Map<String, String>.
- *
- * @deprecated Should never have been exposed in the API. This method may be removed in a future
- * release of Volley.
- */
- @Deprecated
- protected static Map convertHeaders(Header[] headers) {
- Map result = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
- for (int i = 0; i < headers.length; i++) {
- result.put(headers[i].getName(), headers[i].getValue());
- }
- return result;
- }
-
- /**
- * Combine cache headers with network response headers for an HTTP 304 response.
- *
- *
An HTTP 304 response does not have all header fields. We have to use the header fields
- * from the cache entry plus the new ones from the response. See also:
- * http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5
- *
- * @param responseHeaders Headers from the network response.
- * @param entry The cached response.
- * @return The combined list of headers.
- */
- private static List combineHeaders(List responseHeaders, Entry entry) {
- // First, create a case-insensitive set of header names from the network
- // response.
- Set headerNamesFromNetworkResponse = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
- if (!responseHeaders.isEmpty()) {
- for (Header header : responseHeaders) {
- headerNamesFromNetworkResponse.add(header.getName());
- }
- }
-
- // Second, add headers from the cache entry to the network response as long as
- // they didn't appear in the network response, which should take precedence.
- List combinedHeaders = new ArrayList<>(responseHeaders);
- if (entry.allResponseHeaders != null) {
- if (!entry.allResponseHeaders.isEmpty()) {
- for (Header header : entry.allResponseHeaders) {
- if (!headerNamesFromNetworkResponse.contains(header.getName())) {
- combinedHeaders.add(header);
- }
- }
- }
- } else {
- // Legacy caches only have entry.responseHeaders.
- if (!entry.responseHeaders.isEmpty()) {
- for (Map.Entry header : entry.responseHeaders.entrySet()) {
- if (!headerNamesFromNetworkResponse.contains(header.getKey())) {
- combinedHeaders.add(new Header(header.getKey(), header.getValue()));
- }
- }
- }
- }
- return combinedHeaders;
- }
-}
diff --git a/volley/src/main/java/com/android/volley/toolbox/ByteArrayPool.java b/volley/src/main/java/com/android/volley/toolbox/ByteArrayPool.java
deleted file mode 100644
index 0134fa2..0000000
--- a/volley/src/main/java/com/android/volley/toolbox/ByteArrayPool.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.android.volley.toolbox;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * ByteArrayPool is a source and repository of byte[] objects. Its purpose is to supply
- * those buffers to consumers who need to use them for a short period of time and then dispose of
- * them. Simply creating and disposing such buffers in the conventional manner can considerable heap
- * churn and garbage collection delays on Android, which lacks good management of short-lived heap
- * objects. It may be advantageous to trade off some memory in the form of a permanently allocated
- * pool of buffers in order to gain heap performance improvements; that is what this class does.
- *
- *
A good candidate user for this class is something like an I/O system that uses large temporary
- * byte[] buffers to copy data around. In these use cases, often the consumer wants the
- * buffer to be a certain minimum size to ensure good performance (e.g. when copying data chunks off
- * of a stream), but doesn't mind if the buffer is larger than the minimum. Taking this into account
- * and also to maximize the odds of being able to reuse a recycled buffer, this class is free to
- * return buffers larger than the requested size. The caller needs to be able to gracefully deal
- * with getting buffers any size over the minimum.
- *
- *
If there is not a suitably-sized buffer in its recycling pool when a buffer is requested, this
- * class will allocate a new buffer and return it.
- *
- *
This class has no special ownership of buffers it creates; the caller is free to take a buffer
- * it receives from this pool, use it permanently, and never return it to the pool; additionally, it
- * is not harmful to return to this pool a buffer that was allocated elsewhere, provided there are
- * no other lingering references to it.
- *
- *
This class ensures that the total size of the buffers in its recycling pool never exceeds a
- * certain byte limit. When a buffer is returned that would cause the pool to exceed the limit,
- * least-recently-used buffers are disposed.
- */
-public class ByteArrayPool {
- /** The buffer pool, arranged both by last use and by buffer size */
- private final List mBuffersByLastUse = new ArrayList<>();
-
- private final List mBuffersBySize = new ArrayList<>(64);
-
- /** The total size of the buffers in the pool */
- private int mCurrentSize = 0;
-
- /**
- * The maximum aggregate size of the buffers in the pool. Old buffers are discarded to stay
- * under this limit.
- */
- private final int mSizeLimit;
-
- /** Compares buffers by size */
- protected static final Comparator BUF_COMPARATOR =
- new Comparator() {
- @Override
- public int compare(byte[] lhs, byte[] rhs) {
- return lhs.length - rhs.length;
- }
- };
-
- /** @param sizeLimit the maximum size of the pool, in bytes */
- public ByteArrayPool(int sizeLimit) {
- mSizeLimit = sizeLimit;
- }
-
- /**
- * Returns a buffer from the pool if one is available in the requested size, or allocates a new
- * one if a pooled one is not available.
- *
- * @param len the minimum size, in bytes, of the requested buffer. The returned buffer may be
- * larger.
- * @return a byte[] buffer is always returned.
- */
- public synchronized byte[] getBuf(int len) {
- for (int i = 0; i < mBuffersBySize.size(); i++) {
- byte[] buf = mBuffersBySize.get(i);
- if (buf.length >= len) {
- mCurrentSize -= buf.length;
- mBuffersBySize.remove(i);
- mBuffersByLastUse.remove(buf);
- return buf;
- }
- }
- return new byte[len];
- }
-
- /**
- * Returns a buffer to the pool, throwing away old buffers if the pool would exceed its allotted
- * size.
- *
- * @param buf the buffer to return to the pool.
- */
- public synchronized void returnBuf(byte[] buf) {
- if (buf == null || buf.length > mSizeLimit) {
- return;
- }
- mBuffersByLastUse.add(buf);
- int pos = Collections.binarySearch(mBuffersBySize, buf, BUF_COMPARATOR);
- if (pos < 0) {
- pos = -pos - 1;
- }
- mBuffersBySize.add(pos, buf);
- mCurrentSize += buf.length;
- trim();
- }
-
- /** Removes buffers from the pool until it is under its size limit. */
- private synchronized void trim() {
- while (mCurrentSize > mSizeLimit) {
- byte[] buf = mBuffersByLastUse.remove(0);
- mBuffersBySize.remove(buf);
- mCurrentSize -= buf.length;
- }
- }
-}
diff --git a/volley/src/main/java/com/android/volley/toolbox/ClearCacheRequest.java b/volley/src/main/java/com/android/volley/toolbox/ClearCacheRequest.java
deleted file mode 100644
index 856ef80..0000000
--- a/volley/src/main/java/com/android/volley/toolbox/ClearCacheRequest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.volley.toolbox;
-
-import android.os.Handler;
-import android.os.Looper;
-import com.android.volley.Cache;
-import com.android.volley.NetworkResponse;
-import com.android.volley.Request;
-import com.android.volley.Response;
-
-/** A synthetic request used for clearing the cache. */
-public class ClearCacheRequest extends Request