]> www.average.org Git - WhereAmI.git/blob - src/org/average/whereami/LastLocation.java
use http transport that does not crash,
[WhereAmI.git] / src / org / average / whereami / LastLocation.java
1 package org.average.whereami;
2
3 import org.average.whereami.CredentialStore;
4
5 //import java.lang.Long;
6
7 import com.google.api.client.extensions.android2.AndroidHttp;
8 import com.google.api.client.auth.oauth2.draft10.AccessTokenResponse;
9 import com.google.api.client.googleapis.auth.oauth2.draft10.GoogleAccessProtectedResource;
10 import com.google.api.client.http.HttpResponseException;
11 import com.google.api.client.http.HttpTransport;
12 import com.google.api.client.http.javanet.NetHttpTransport;
13 import com.google.api.client.json.JsonFactory;
14 import com.google.api.client.json.jackson.JacksonFactory;
15 import com.google.api.services.latitude.Latitude;
16 import com.google.api.services.latitude.LatitudeRequest;
17 import com.google.api.services.latitude.model.Location;
18
19 import android.content.Context;
20 import android.content.SharedPreferences;
21 import android.util.Log;
22
23 public final class LastLocation extends Oracle {
24
25         final String TAG = getClass().getName();
26
27         private Latitude latitude;
28
29         public LastLocation(final CredentialStore store) {
30                 HttpTransport transport = AndroidHttp.newCompatibleTransport();
31                 JsonFactory jsonFactory = new JacksonFactory();
32                 AccessTokenResponse token = store.read();
33                 Log.v(TAG, "tokens - access: \"" + token.accessToken +
34                         "\", refresh: \"" + token.refreshToken +
35                         "\", client_id: \"" + ClientCredentials.CLIENT_ID +
36                         "\", client_secret: \"" +
37                                         ClientCredentials.CLIENT_SECRET +
38                         "\"");
39                 GoogleAccessProtectedResource accessProtectedResource =
40                         new GoogleAccessProtectedResource(
41                                 token.accessToken,
42                                 transport, jsonFactory,
43                                 ClientCredentials.CLIENT_ID,
44                                 ClientCredentials.CLIENT_SECRET,
45                                 token.refreshToken)
46                                 {
47                                         @Override
48                                         public void onAccessToken(
49                                                         String accessToken) {
50                                                 Log.v(TAG, "Update access token to \"" + accessToken + "\"");
51                                                 store.updateAccessToken(
52                                                         accessToken);
53                                         }
54                                 }
55                                 ;
56                 Latitude.Builder lbldr = Latitude.builder(transport,
57                                                                 jsonFactory);
58                 lbldr.setHttpRequestInitializer(accessProtectedResource);
59                 lbldr.setApplicationName("WhereAmI/1.0");
60                 latitude = lbldr.build();
61         }
62
63         @Override
64         public final String getResult() {
65                 try {
66                         Log.v(TAG, "entering getResult");
67                         Latitude.CurrentLocation.Get request =
68                                 latitude.currentLocation().get();
69                         request.setGranularity("best");
70                         Location cloc = request.execute();
71                         Double lat = Double.parseDouble(
72                                         cloc.getLatitude().toString());
73                         Double lon = Double.parseDouble(
74                                         cloc.getLongitude().toString());
75                         Long tsm = Long.parseLong(
76                                         cloc.getTimestampMs().toString());
77                         return locationMessage(lat, lon, tsm);
78                 } catch (Exception ex) {
79                         Log.v(TAG, "exception in getResult: " + ex);
80                         ex.printStackTrace();
81                         return ex.getMessage();
82                 }
83         }
84
85         private String locationMessage(Double lat, Double lon, Long tsm) {
86                 Log.v(TAG, "entering locationMessage(" + lat +
87                                 "," + lon + "," + tsm + ")");
88                 return "Location: " + lat + "N " + lon + "E at " + tsm/1000;
89         }
90 }