diff options
author | Koushik Dutta <koushd@gmail.com> | 2014-11-10 19:11:02 -0800 |
---|---|---|
committer | Koushik Dutta <koushd@gmail.com> | 2014-11-10 19:11:02 -0800 |
commit | 0799f67c389fbbe71aad3fd502b1e637d8de2e68 (patch) | |
tree | 7b6b303a40e2427a30a1822923ea73dcee0880ac | |
parent | 255ff987a813acd8002710fa8fee95511d59224c (diff) | |
download | AndroidAsync-0799f67c389fbbe71aad3fd502b1e637d8de2e68.tar.gz AndroidAsync-0799f67c389fbbe71aad3fd502b1e637d8de2e68.tar.bz2 AndroidAsync-0799f67c389fbbe71aad3fd502b1e637d8de2e68.zip |
Preserve header casing.
Fix sample.
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; |