Skip to content

Commit ed529a5

Browse files
committed
Add ability to store persistent cookies if configured with an android Context
1 parent c02e4bb commit ed529a5

File tree

3 files changed

+543
-2
lines changed

3 files changed

+543
-2
lines changed

src/AndroidClient/android/src/main/java/net/servicestack/android/AndroidServiceClient.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,58 @@
33

44
package net.servicestack.android;
55

6+
import android.content.Context;
67
import android.os.AsyncTask;
78

8-
import net.servicestack.client.AsyncComplete;
99
import net.servicestack.client.AsyncError;
1010
import net.servicestack.client.AsyncResult;
1111
import net.servicestack.client.AsyncResultVoid;
1212
import net.servicestack.client.AsyncServiceClient;
13+
import net.servicestack.client.AsyncSuccess;
1314
import net.servicestack.client.AsyncSuccessVoid;
1415
import net.servicestack.client.IReturn;
1516
import net.servicestack.client.IReturnVoid;
1617
import net.servicestack.client.JsonServiceClient;
17-
import net.servicestack.client.AsyncSuccess;
1818
import net.servicestack.client.Utils;
19+
import net.servicestack.cookies.SerializableCookieStore;
1920

2021
import java.lang.reflect.Type;
22+
import java.net.CookieHandler;
23+
import java.net.CookieManager;
24+
import java.net.CookiePolicy;
2125
import java.net.HttpURLConnection;
2226
import java.util.Map;
2327

2428
public class AndroidServiceClient extends JsonServiceClient implements AsyncServiceClient {
2529

30+
Context context;
31+
2632
public AndroidServiceClient(String baseUrl) {
2733
super(baseUrl);
2834
}
2935

36+
public AndroidServiceClient(String baseUrl, Context context) {
37+
super(baseUrl, false);
38+
this.context = context;
39+
this.initCookieHandler();
40+
}
41+
42+
@Override
43+
public void initCookieHandler() {
44+
//Automatically populate response cookies
45+
if (CookieHandler.getDefault() == null) {
46+
if (this.context != null) {
47+
SerializableCookieStore cookieStore = new SerializableCookieStore(context);
48+
CookieManager cookieManager = new CookieManager(cookieStore, CookiePolicy.ACCEPT_ALL);
49+
CookieHandler.setDefault(cookieManager);
50+
} else {
51+
//Doesn't support getCookieStore() throws UnsupportedOperationException
52+
CookieManager cookieManager = new CookieManager(null, CookiePolicy.ACCEPT_ALL);
53+
CookieHandler.setDefault(cookieManager);
54+
}
55+
}
56+
}
57+
3058
// Override to customize execution of AsyncTask
3159
public <T,TResponse> void execTask(AsyncTask<T,Void,TResponse> asyncTask, T... request){
3260
asyncTask.execute(request);
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package net.servicestack.cookies;
2+
3+
import java.io.IOException;
4+
import java.io.ObjectInputStream;
5+
import java.io.ObjectOutputStream;
6+
import java.io.Serializable;
7+
import java.net.HttpCookie;
8+
9+
//FROM: https://gist.github.com/manishk3008/2a2373c6c155a5df6326
10+
public class SerializableCookie implements Serializable {
11+
private HttpCookie cookie;
12+
private static final long serialVersionUID = 2532101328282342578L;
13+
public SerializableCookie(HttpCookie cookie) {
14+
this.cookie = cookie;
15+
}
16+
17+
public HttpCookie getCookie() {
18+
return cookie;
19+
}
20+
21+
private void writeObject(ObjectOutputStream out) throws IOException {
22+
out.writeObject(cookie.getName());
23+
out.writeObject(cookie.getValue());
24+
out.writeObject(cookie.getComment());
25+
out.writeObject(cookie.getCommentURL());
26+
out.writeBoolean(cookie.getDiscard());
27+
out.writeObject(cookie.getDomain());
28+
out.writeLong(cookie.getMaxAge());
29+
out.writeObject(cookie.getPath());
30+
out.writeObject(cookie.getPortlist());
31+
out.writeBoolean(cookie.getSecure());
32+
out.writeInt(cookie.getVersion());
33+
}
34+
35+
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
36+
String name = (String) in.readObject();
37+
String value = (String) in.readObject();
38+
cookie = new HttpCookie(name, value);
39+
cookie.setComment((String) in.readObject());
40+
cookie.setCommentURL((String) in.readObject());
41+
cookie.setDiscard(in.readBoolean());
42+
cookie.setDomain((String) in.readObject());
43+
cookie.setMaxAge(in.readLong());
44+
cookie.setPath((String) in.readObject());
45+
cookie.setPortlist((String) in.readObject());
46+
cookie.setSecure(in.readBoolean());
47+
cookie.setVersion(in.readInt());
48+
}
49+
}

0 commit comments

Comments
 (0)