]> www.average.org Git - WhereAmI.git/blob - src/org/average/whereami/APIBase.java
make threads share one instance of GoogleAccessProtectedResource
[WhereAmI.git] / src / org / average / whereami / APIBase.java
1 package org.average.whereami;
2
3 import org.average.whereami.PersistentStore;
4
5 import java.io.IOException;
6 import com.google.api.client.http.HttpTransport;
7 import java.util.logging.Handler;
8 import java.util.logging.Level;
9 import java.util.logging.LogRecord;
10 import java.util.logging.Logger;
11
12 import com.google.api.client.extensions.android2.AndroidHttp;
13 import com.google.api.client.auth.oauth2.draft10.AccessTokenResponse;
14 import com.google.api.client.googleapis.auth.oauth2.draft10.GoogleAccessProtectedResource;
15 import com.google.api.client.http.HttpResponseException;
16 import com.google.api.client.http.HttpTransport;
17 import com.google.api.client.http.javanet.NetHttpTransport;
18 import com.google.api.client.json.JsonFactory;
19 import com.google.api.client.json.jackson.JacksonFactory;
20
21 import android.content.res.Resources;
22 import android.util.Log;
23
24 public class APIBase {
25
26         final String TAG = getClass().getName();
27
28         public PersistentStore store;
29         public Resources res;
30         public HttpTransport httpTransport =
31                         AndroidHttp.newCompatibleTransport();
32         public JsonFactory jsonFactory = new JacksonFactory();
33         public MyAccessProtectedResource accessProtectedResource;
34
35         public String authErrorMessage;
36
37         public APIBase(final Resources res, final PersistentStore store) {
38                 this.res = res;
39                 this.store = store;
40                 AccessTokenResponse token = store.readTokens();
41                 Log.v(TAG, "tokens - access: \"" + token.accessToken +
42                         "\", refresh: \"" + token.refreshToken +
43                         "\", client_id: \"" + ClientCredentials.CLIENT_ID +
44                         "\", client_secret: \"" +
45                                 ClientCredentials.CLIENT_SECRET +
46                         "\"");
47                 accessProtectedResource = new MyAccessProtectedResource(
48                         token.accessToken, httpTransport, jsonFactory,
49                         ClientCredentials.CLIENT_ID,
50                         ClientCredentials.CLIENT_SECRET,
51                         token.refreshToken);
52                 authErrorMessage = res.getString(R.string.autherror);
53                 enableLogging();
54         }
55
56         private class MyAccessProtectedResource
57                 extends GoogleAccessProtectedResource {
58
59                 public MyAccessProtectedResource(
60                                 String accessToken,
61                                 HttpTransport transport,
62                                 JsonFactory jsonFactory,
63                                 String clientId,
64                                 String clientSecret,
65                                 String refreshToken) {
66                         super(accessToken, transport, jsonFactory,
67                                 clientId, clientSecret, refreshToken);
68                 }
69
70                 @Override
71                 public void onAccessToken(String accessToken) {
72                         Log.v(TAG, "Update access token to \""
73                                 + accessToken + "\"");
74                         store.updateAccessToken( accessToken);
75                 }
76
77                 @Override
78                 protected boolean executeRefreshToken() throws IOException {
79                         Log.v(TAG, "executeRefreshToken was called");
80                         return super.executeRefreshToken();
81                 }
82         }
83
84         private static void enableLogging() {
85                 Logger logger = Logger.getLogger(HttpTransport.class.getName());
86                 logger.setLevel(Level.CONFIG);
87                 logger.addHandler(new Handler() {
88                         @Override
89                         public void close() throws SecurityException {}
90                         @Override
91                         public void flush() {}
92                         @Override
93                         public void publish(LogRecord record) {
94                                 Log.d("HttpTransport", record.getMessage());
95                         }
96                 });
97         }
98 }