X-Git-Url: http://www.average.org/gitweb/?p=WhereAmI.git;a=blobdiff_plain;f=src%2Forg%2Faverage%2Fwhereami%2FLastLocation.java;h=5899bf5b24d1e6f09adb4ea84752d1d1315881ba;hp=b710e169f59bff77562076496d5dcdea5d0a3d20;hb=HEAD;hpb=b6c7f6d70cd87f9d3b8b7f6eaff05ea2d9efe816 diff --git a/src/org/average/whereami/LastLocation.java b/src/org/average/whereami/LastLocation.java index b710e16..5899bf5 100644 --- a/src/org/average/whereami/LastLocation.java +++ b/src/org/average/whereami/LastLocation.java @@ -1,78 +1,58 @@ package org.average.whereami; -import org.average.whereami.CredentialStore; +import org.average.whereami.APIBase; +import org.average.whereami.Oracle; +import org.average.whereami.Utterance; +import org.average.whereami.PersistentStore; +import org.average.whereami.SayWhen; import java.lang.Math; +import java.io.IOException; +import java.net.UnknownHostException; +import org.apache.http.conn.HttpHostConnectException; -import com.google.api.client.extensions.android2.AndroidHttp; -import com.google.api.client.auth.oauth2.draft10.AccessTokenResponse; -import com.google.api.client.googleapis.auth.oauth2.draft10.GoogleAccessProtectedResource; +import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.http.HttpResponseException; -import com.google.api.client.http.HttpTransport; -import com.google.api.client.http.javanet.NetHttpTransport; -import com.google.api.client.json.JsonFactory; -import com.google.api.client.json.jackson.JacksonFactory; import com.google.api.services.latitude.Latitude; import com.google.api.services.latitude.LatitudeRequest; import com.google.api.services.latitude.model.Location; import android.content.Context; -import android.content.SharedPreferences; import android.content.res.Resources; +import android.text.format.Time; import android.util.Log; public final class LastLocation extends Oracle { final String TAG = getClass().getName(); - private Latitude latitude; - private String[] loc_names; private String[] loc_lats; private String[] loc_lons; private String[] loc_dists; + private String myname; + private String registered; + private SayWhen sayWhen; + private Latitude latitude; - public LastLocation(final Resources res, final CredentialStore store) { - loc_names = res.getStringArray(R.array.loc_names); - loc_lats = res.getStringArray(R.array.loc_lats); - loc_lons = res.getStringArray(R.array.loc_lons); - loc_dists = res.getStringArray(R.array.loc_dists); - - HttpTransport transport = AndroidHttp.newCompatibleTransport(); - JsonFactory jsonFactory = new JacksonFactory(); - AccessTokenResponse token = store.read(); - Log.v(TAG, "tokens - access: \"" + token.accessToken + - "\", refresh: \"" + token.refreshToken + - "\", client_id: \"" + ClientCredentials.CLIENT_ID + - "\", client_secret: \"" + - ClientCredentials.CLIENT_SECRET + - "\""); - GoogleAccessProtectedResource accessProtectedResource = - new GoogleAccessProtectedResource( - token.accessToken, - transport, jsonFactory, - ClientCredentials.CLIENT_ID, - ClientCredentials.CLIENT_SECRET, - token.refreshToken) - { - @Override - public void onAccessToken( - String accessToken) { - Log.v(TAG, "Update access token to \"" + accessToken + "\""); - store.updateAccessToken( - accessToken); - } - } - ; - Latitude.Builder lbldr = Latitude.builder(transport, - jsonFactory); - lbldr.setHttpRequestInitializer(accessProtectedResource); - lbldr.setApplicationName("WhereAmI/1.0"); - latitude = lbldr.build(); + public LastLocation(APIBase base) { + super(base); + loc_names = base.res.getStringArray(R.array.loc_names); + loc_lats = base.res.getStringArray(R.array.loc_lats); + loc_lons = base.res.getStringArray(R.array.loc_lons); + loc_dists = base.res.getStringArray(R.array.loc_dists); + myname = base.res.getString(R.string.myname); + registered = base.res.getString(R.string.registered); + sayWhen = new SayWhen(base.res); + latitude = Latitude.builder(base.httpTransport, + base.jsonFactory) + .setHttpRequestInitializer( + base.accessProtectedResource) + .setApplicationName("WhereAmI/1.0").build(); } @Override - public final String getResult() { + public final Utterance getResult() { try { Log.v(TAG, "entering getResult"); Latitude.CurrentLocation.Get request = @@ -85,11 +65,33 @@ public final class LastLocation extends Oracle { cloc.getLongitude().toString()); Long tsm = Long.parseLong( cloc.getTimestampMs().toString()); - return locationMessage(lat, lon, tsm); - } catch (Exception ex) { - Log.v(TAG, "exception in getResult: " + ex); - ex.printStackTrace(); - return ex.getMessage(); + return new Utterance(true, + locationMessage(lat, lon, tsm)); + } catch (GoogleJsonResponseException e) { + Log.e(TAG, "GoogleJsonResponseException: " + e); + if (e.getResponse().getStatusCode() == 401) { + return new Utterance(false, + base.authErrorMessage + "\n" + + e.getMessage()); + } else { + return new Utterance(false, e.getMessage()); + } + } catch (HttpResponseException e) { + Log.e(TAG, "HttpResponseException: " + e); + return new Utterance(false, e.getMessage()); + } catch (UnknownHostException e) { + Log.e(TAG, "UnknownHostException: " + e); + return new Utterance(false, + base.connectErrorMessage + "\n" + + e.getMessage()); + } catch (HttpHostConnectException e) { + Log.e(TAG, "HttpHostConnectException: " + e); + return new Utterance(false, + base.connectErrorMessage + "\n" + + e.getMessage()); + } catch (IOException e) { + Log.e(TAG, "IOException: " + e); + return new Utterance(false, e.getMessage()); } } @@ -97,19 +99,22 @@ public final class LastLocation extends Oracle { Log.v(TAG, "entering locationMessage(" + lat + "," + lon + "," + tsm + ")"); String locmsg = ""; + String agomsg = ""; for (int i = 0; i < loc_names.length; i++) { Double dist = haversine(lat, lon, Double.parseDouble(loc_lats[i]), Double.parseDouble(loc_lons[i])); Log.v(TAG, "Dist from " + loc_names[i] + - " is " + dist); - if ((loc_dists[i] == "0") || + " is " + dist + + ", threshold " + loc_dists[i]); + if ((loc_dists[i].equals("0")) || (dist < Double.parseDouble(loc_dists[i]))) { locmsg = loc_names[i]; break; } } - return locmsg; + return myname + " " + locmsg + ", " + registered + + " " + sayWhen.say(tsm); } private Double toRad(Double deg) {