]> www.average.org Git - WhereAmI.git/blobdiff - src/org/average/whereami/LastLocation.java
Stay alive unless closed from menu
[WhereAmI.git] / src / org / average / whereami / LastLocation.java
index 76e8ef28c73e02c82288f2a71eaefd0398592e69..5899bf5b24d1e6f09adb4ea84752d1d1315881ba 100644 (file)
@@ -1,10 +1,15 @@
 package org.average.whereami;
 
+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.googleapis.json.GoogleJsonResponseException;
 import com.google.api.client.http.HttpResponseException;
@@ -21,8 +26,6 @@ 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;
@@ -30,24 +33,26 @@ public final class LastLocation extends Oracle {
        private String myname;
        private String registered;
        private SayWhen sayWhen;
+       private Latitude latitude;
 
-       public LastLocation(final Resources res, final PersistentStore store) {
-               super(res, 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);
-               myname = res.getString(R.string.myname);
-               registered = res.getString(R.string.registered);
-               sayWhen = new SayWhen(res);
-
-               latitude = Latitude.builder(httpTransport, jsonFactory)
-                       .setHttpRequestInitializer(accessProtectedResource)
+       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 =
@@ -60,20 +65,33 @@ public final class LastLocation extends Oracle {
                                        cloc.getLongitude().toString());
                        Long tsm = Long.parseLong(
                                        cloc.getTimestampMs().toString());
-                       return locationMessage(lat, lon, tsm);
+                       return new Utterance(true,
+                                       locationMessage(lat, lon, tsm));
                } catch (GoogleJsonResponseException e) {
                        Log.e(TAG, "GoogleJsonResponseException: " + e);
                        if (e.getResponse().getStatusCode() == 401) {
-                               return authErrorMessage;
+                               return new Utterance(false,
+                                       base.authErrorMessage + "\n" +
+                                       e.getMessage());
                        } else {
-                               return e.getMessage();
+                               return new Utterance(false, e.getMessage());
                        }
                 } catch (HttpResponseException e) {
                        Log.e(TAG, "HttpResponseException: " + e);
-                       return e.getMessage();
+                       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) {
-                       e.printStackTrace();
-                       return e.getMessage();
+                       Log.e(TAG, "IOException: " + e);
+                       return new Utterance(false, e.getMessage());
                 }
        }
 
@@ -87,8 +105,9 @@ public final class LastLocation extends Oracle {
                                        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;