aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoushik Dutta <koushd@gmail.com>2014-11-10 19:11:02 -0800
committerKoushik Dutta <koushd@gmail.com>2014-11-10 19:11:02 -0800
commit0799f67c389fbbe71aad3fd502b1e637d8de2e68 (patch)
tree7b6b303a40e2427a30a1822923ea73dcee0880ac
parent255ff987a813acd8002710fa8fee95511d59224c (diff)
downloadAndroidAsync-0799f67c389fbbe71aad3fd502b1e637d8de2e68.tar.gz
AndroidAsync-0799f67c389fbbe71aad3fd502b1e637d8de2e68.tar.bz2
AndroidAsync-0799f67c389fbbe71aad3fd502b1e637d8de2e68.zip
Preserve header casing.
Fix sample.
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/AsyncServer.java2
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/Headers.java26
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/Multimap.java8
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/util/HashList.java7
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/util/TaggedList.java20
-rw-r--r--AndroidAsyncSample/AndroidAsyncSample.iml82
-rw-r--r--AndroidAsyncSample/build.gradle36
-rw-r--r--AndroidAsyncSample/src/com/koushikdutta/async/sample/MainActivity.java19
8 files changed, 165 insertions, 35 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java
index acfc8bc..1b8ab50 100644
--- a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java
+++ b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java
@@ -626,7 +626,7 @@ public class AsyncServer {
runLoop(server, selector, queue);
}
catch (AsyncSelectorException e) {
- Log.e(LOGTAG, "Selector exception", e);
+ Log.i(LOGTAG, "Selector exception, shutting down", e);
try {
// StreamUtility.closeQuiety is throwing ArrayStoreException?
selector.getSelector().close();
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/Headers.java b/AndroidAsync/src/com/koushikdutta/async/http/Headers.java
index 9724ce9..df1b075 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/Headers.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/Headers.java
@@ -4,6 +4,7 @@ package com.koushikdutta.async.http;
import android.text.TextUtils;
import com.koushikdutta.async.http.server.AsyncHttpServer;
+import com.koushikdutta.async.util.TaggedList;
import org.apache.http.Header;
import org.apache.http.message.BasicHeader;
@@ -24,7 +25,12 @@ public class Headers {
map.putAll(mm);
}
- Multimap map = new Multimap();
+ final Multimap map = new Multimap() {
+ @Override
+ protected List<String> newList() {
+ return new TaggedList<String>();
+ }
+ };
public Multimap getMultiMap() {
return map;
}
@@ -38,12 +44,18 @@ public class Headers {
}
public Headers set(String header, String value) {
- map.put(header.toLowerCase(), value);
+ String lc = header.toLowerCase();
+ map.put(lc, value);
+ TaggedList<String> list = (TaggedList<String>)map.get(lc);
+ list.tagNull(header);
return this;
}
public Headers add(String header, String value) {
- map.add(header.toLowerCase(), value);
+ String lc = header.toLowerCase();
+ map.add(lc, value);
+ TaggedList<String> list = (TaggedList<String>)map.get(lc);
+ list.tagNull(header);
return this;
}
@@ -102,8 +114,9 @@ public class Headers {
public Header[] toHeaderArray() {
ArrayList<Header> ret = new ArrayList<Header>();
for (String key: map.keySet()) {
+ TaggedList<String> list = (TaggedList<String>)map.get(key);
for (String v: map.get(key)) {
- ret.add(new BasicHeader(key, v));
+ ret.add(new BasicHeader((String)list.tag(), v));
}
}
return ret.toArray(new Header[ret.size()]);
@@ -112,8 +125,9 @@ public class Headers {
public StringBuilder toStringBuilder() {
StringBuilder result = new StringBuilder(256);
for (String key: map.keySet()) {
- for (String v: map.get(key)) {
- result.append(key)
+ TaggedList<String> list = (TaggedList<String>)map.get(key);
+ for (String v: list) {
+ result.append((String)list.tag())
.append(": ")
.append(v)
.append("\r\n");
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java b/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java
index 913532e..111b336 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/Multimap.java
@@ -18,6 +18,10 @@ public class Multimap extends LinkedHashMap<String, List<String>> implements Ite
public Multimap() {
}
+ protected List<String> newList() {
+ return new ArrayList<String>();
+ }
+
public String getString(String name) {
List<String> ret = get(name);
if (ret == null || ret.size() == 0)
@@ -28,14 +32,14 @@ public class Multimap extends LinkedHashMap<String, List<String>> implements Ite
public void add(String name, String value) {
List<String> ret = get(name);
if (ret == null) {
- ret = new ArrayList<String>();
+ ret = newList();
put(name, ret);
}
ret.add(value);
}
public void put(String name, String value) {
- ArrayList<String> ret = new ArrayList<String>();
+ List<String> ret = newList();
ret.add(value);
put(name, ret);
}
diff --git a/AndroidAsync/src/com/koushikdutta/async/util/HashList.java b/AndroidAsync/src/com/koushikdutta/async/util/HashList.java
index cd1d123..80727a9 100644
--- a/AndroidAsync/src/com/koushikdutta/async/util/HashList.java
+++ b/AndroidAsync/src/com/koushikdutta/async/util/HashList.java
@@ -8,9 +8,6 @@ import java.util.Set;
* Created by koush on 5/27/13.
*/
public class HashList<T> {
- class TaggedList<T> extends ArrayList<T> {
- Object tag;
- }
Hashtable<String, TaggedList<T>> internal = new Hashtable<String, TaggedList<T>>();
public HashList() {
@@ -24,7 +21,7 @@ public class HashList<T> {
TaggedList<T> list = internal.get(key);
if (list == null)
return null;
- return (V)list.tag;
+ return list.tag();
}
public synchronized <V> void tag(String key, V tag) {
@@ -33,7 +30,7 @@ public class HashList<T> {
list = new TaggedList<T>();
internal.put(key, list);
}
- list.tag = tag;
+ list.tag(tag);
}
public synchronized ArrayList<T> remove(String key) {
diff --git a/AndroidAsync/src/com/koushikdutta/async/util/TaggedList.java b/AndroidAsync/src/com/koushikdutta/async/util/TaggedList.java
new file mode 100644
index 0000000..8159352
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/util/TaggedList.java
@@ -0,0 +1,20 @@
+package com.koushikdutta.async.util;
+
+import java.util.ArrayList;
+
+public class TaggedList<T> extends ArrayList<T> {
+ private Object tag;
+
+ public synchronized <V> V tag() {
+ return (V)tag;
+ }
+
+ public synchronized <V> void tag(V tag) {
+ this.tag = tag;
+ }
+
+ public synchronized <V> void tagNull(V tag) {
+ if (this.tag == null)
+ this.tag = tag;
+ }
+} \ No newline at end of file
diff --git a/AndroidAsyncSample/AndroidAsyncSample.iml b/AndroidAsyncSample/AndroidAsyncSample.iml
index 64441a2..21fa9a4 100644
--- a/AndroidAsyncSample/AndroidAsyncSample.iml
+++ b/AndroidAsyncSample/AndroidAsyncSample.iml
@@ -1,26 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
+<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="Gradle.AndroidAsync" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
+ <facet type="android-gradle" name="Android-Gradle">
+ <configuration>
+ <option name="GRADLE_PROJECT_PATH" value=":AndroidAsync:AndroidAsyncSample" />
+ </configuration>
+ </facet>
<facet type="android" name="Android">
<configuration>
- <notImportedProperties>
- <property>MANIFEST_FILE_PATH</property>
- <property>RESOURCES_DIR_PATH</property>
- <property>ASSETS_DIR_PATH</property>
- <property>NATIVE_LIBS_DIR_PATH</property>
- </notImportedProperties>
+ <option name="SELECTED_BUILD_VARIANT" value="debug" />
+ <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+ <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+ <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" />
+ <option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
+ <option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugTestSources" />
+ <option name="ALLOW_USER_CONFIGURATION" value="false" />
+ <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/res" />
+ <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
</component>
- <component name="NewModuleRootManager" inherit-compiler-output="true">
+ <component name="NewModuleRootManager" inherit-compiler-output="false">
+ <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
<exclude-output />
<content url="file://$MODULE_DIR$">
- <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/debug" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/test/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/test/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/test/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/test/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/test/debug" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/test/debug" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/res" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
+ <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
</content>
- <orderEntry type="inheritedJdk" />
+ <orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
- <orderEntry type="module" module-name="AndroidAsync" />
+ <orderEntry type="module" module-name="AndroidAsync-AndroidAsync" exported="" />
</component>
</module>
diff --git a/AndroidAsyncSample/build.gradle b/AndroidAsyncSample/build.gradle
new file mode 100644
index 0000000..6bbfb2a
--- /dev/null
+++ b/AndroidAsyncSample/build.gradle
@@ -0,0 +1,36 @@
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:+'
+ }
+}
+apply plugin: 'com.android.application'
+
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ compile project(':AndroidAsync:AndroidAsync')
+}
+
+android {
+ sourceSets {
+ main {
+ manifest.srcFile 'AndroidManifest.xml'
+ res.srcDirs = ['res/']
+ java.srcDirs = ['src/']
+ }
+ }
+
+ defaultConfig {
+ targetSdkVersion 21
+ minSdkVersion 9
+ }
+
+ compileSdkVersion 21
+ buildToolsVersion "21.1.0"
+}
+
diff --git a/AndroidAsyncSample/src/com/koushikdutta/async/sample/MainActivity.java b/AndroidAsyncSample/src/com/koushikdutta/async/sample/MainActivity.java
index b87b3ea..ac37803 100644
--- a/AndroidAsyncSample/src/com/koushikdutta/async/sample/MainActivity.java
+++ b/AndroidAsyncSample/src/com/koushikdutta/async/sample/MainActivity.java
@@ -1,12 +1,5 @@
package com.koushikdutta.async.sample;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-
-import org.apache.http.NameValuePair;
-import org.apache.http.message.BasicNameValuePair;
-
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
@@ -26,13 +19,19 @@ import android.widget.Toast;
import com.koushikdutta.async.http.AsyncHttpClient;
import com.koushikdutta.async.http.AsyncHttpGet;
import com.koushikdutta.async.http.AsyncHttpPost;
-import com.koushikdutta.async.http.AsyncHttpRequest;
import com.koushikdutta.async.http.AsyncHttpResponse;
-import com.koushikdutta.async.http.ResponseCacheMiddleware;
import com.koushikdutta.async.http.body.UrlEncodedFormBody;
+import com.koushikdutta.async.http.cache.ResponseCacheMiddleware;
+
+import org.apache.http.NameValuePair;
+import org.apache.http.message.BasicNameValuePair;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
public class MainActivity extends Activity {
- static ResponseCacheMiddleware cacher;
+ static ResponseCacheMiddleware cacher;
ImageView rommanager;
ImageView tether;