]> www.average.org Git - WhereAmI.git/blobdiff - src/org/average/whereami/PhoneLog.java
Network access error message
[WhereAmI.git] / src / org / average / whereami / PhoneLog.java
index ff64fa9b3863aaf9092064a3205bf51c34f9d840..7ce53eaa06920e39f08566f7699aca4f07047400 100644 (file)
@@ -1,8 +1,14 @@
 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.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;
@@ -24,56 +30,87 @@ public final class PhoneLog extends Oracle {
 
        final String TAG = getClass().getName();
 
-       private Calendar calendar;
-
-       private PersistentStore store;
        private String calendar_name;
        private String peer_name;
        private String calendar_id;
        private String nocalendar;
        private String noevents;
+       private String last_call;
+       private String in_call;
+       private String out_call;
+       private String duration;
+       private String lessthan;
+       private String minutes1;
+       private String minutes2to4;
+       private String minutes5up;
+       private SayWhen sayWhen;
+       private Calendar calendar;
 
-       public PhoneLog(final Resources res, final PersistentStore store) {
-               super(res, store);
-               this.store = store;
-               nocalendar = res.getString(R.string.nocalendar);
-               noevents = res.getString(R.string.noevents);
-               calendar_name = store.get("calendar_name");
-               peer_name = store.get("peer_name");
-               calendar_id = store.get("calendar_id");
-
-               calendar = Calendar.builder(httpTransport, jsonFactory)
-                       .setHttpRequestInitializer(accessProtectedResource)
+       public PhoneLog(APIBase base) {
+               super(base);
+               nocalendar = base.res.getString(R.string.nocalendar);
+               noevents = base.res.getString(R.string.noevents);
+               last_call = base.res.getString(R.string.last_call);
+               in_call = base.res.getString(R.string.in_call);
+               out_call = base.res.getString(R.string.out_call);
+               duration = base.res.getString(R.string.duration);
+               lessthan = base.res.getString(R.string.lessthan);
+               minutes1 = base.res.getString(R.string.minutes1);
+               minutes2to4 = base.res.getString(R.string.minutes2to4);
+               minutes5up = base.res.getString(R.string.minutes5up);
+               sayWhen = new SayWhen(base.res);
+               calendar_name = base.store.get("calendar_name");
+               peer_name = base.store.get("peer_name");
+               calendar_id = base.store.get("calendar_id");
+               calendar = Calendar.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");
                        if (calendar_id == null || calendar_id == "") {
                                calendar_id = scanCalendars(calendar_name);
                        }
                        if (calendar_id == null || calendar_id == "") {
-                               return nocalendar + " \"" +
-                                       calendar_name + "\"";
+                               return new Utterance(true,
+                                       nocalendar + " \"" +
+                                       calendar_name + "\"");
                        } else {
-                               store.put("calendar_id", calendar_id);
-                               return scanEvents(calendar_id, peer_name);
+                               base.store.put("calendar_id", calendar_id);
+                               return new Utterance(true,
+                                       scanEvents(calendar_id, peer_name));
                        }
                } 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());
                }
        }
 
@@ -135,13 +172,13 @@ public final class PhoneLog extends Oracle {
                                Log.v(TAG, "event " + evStart +
                                        " - " + evStop +
                                        " : \"" + evSummary + "\"");
-                               if ((evSummary.startsWith("Called ") ||
-                                    evSummary.startsWith("Call from ")) &&
+                               if ((evSummary.startsWith("Call To ") ||
+                                    evSummary.startsWith("Call From ")) &&
                                    evStart > latestStartTime) {
                                                latestStartTime = evStart;
                                                latestStopTime = evStop;
                                                latestWasOutgoing = evSummary
-                                                       .startsWith("Called ");
+                                                       .startsWith("Call To ");
                                                wasFound = true;
                                }
                        }
@@ -167,12 +204,26 @@ public final class PhoneLog extends Oracle {
                                        Boolean latestWasOutgoing) {
                Time stime = new Time();
                stime.set(latestStartTime);
-               Long durms = latestStopTime - latestStartTime;
+               Long dur = (latestStopTime - latestStartTime) / 60000L;
                Log.v(TAG, "Chosen event: start " + stime +
-                       " for " + durms + " msec");
-               Long nowms = System.currentTimeMillis();
-               return "" + (latestWasOutgoing?"Out ":"In  ") +
-                       (durms/3600000) + " min " +
-                       stime.format("%H:%M");
+                       " for " + dur + " min");
+               String minutes;
+               String howlong = dur.toString();
+               if (dur == 0) {
+                       howlong = lessthan;
+                       minutes = minutes2to4;
+               } else if ((dur / 10) == 1) {
+                       minutes = minutes5up;
+               } else if ((dur % 10) == 1) {
+                       minutes = minutes1;
+               } else if ((dur % 10) < 5) {
+                       minutes = minutes2to4;
+               } else {
+                       minutes = minutes5up;
+               }
+               return last_call +
+                       " " + (latestWasOutgoing?out_call:in_call) +
+                       " " + sayWhen.say(latestStartTime) +
+                       " " + duration + " " + howlong + " " + minutes;
        }
 }