1 package org.average.whereami;
3 import org.average.whereami.CredentialStore;
5 //import java.lang.Long;
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;
19 import android.content.Context;
20 import android.content.SharedPreferences;
21 import android.util.Log;
23 public final class LastLocation extends Oracle {
25 final String TAG = getClass().getName();
27 private Latitude latitude;
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 +
39 GoogleAccessProtectedResource accessProtectedResource =
40 new GoogleAccessProtectedResource(
42 transport, jsonFactory,
43 ClientCredentials.CLIENT_ID,
44 ClientCredentials.CLIENT_SECRET,
48 public void onAccessToken(
50 Log.v(TAG, "Update access token to \"" + accessToken + "\"");
51 store.updateAccessToken(
56 Latitude.Builder lbldr = Latitude.builder(transport,
58 lbldr.setHttpRequestInitializer(accessProtectedResource);
59 lbldr.setApplicationName("WhereAmI/1.0");
60 latitude = lbldr.build();
64 public final String getResult() {
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);
81 return ex.getMessage();
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;