X-Git-Url: http://www.average.org/gitweb/?p=WhereAmI.git;a=blobdiff_plain;f=src%2Forg%2Faverage%2Fwhereami%2FPhoneLog.java;h=74bb9ebebe264e10c2bc7cec8fc277f3db67bd9b;hp=2665c340449914d3de40ae4352b12a562d2253d2;hb=09460a92702c5407c5ddf1e6576391568685006d;hpb=3a239c1eebf08ee80a1a05f0dc06fd54e52bf28d diff --git a/src/org/average/whereami/PhoneLog.java b/src/org/average/whereami/PhoneLog.java index 2665c34..74bb9eb 100644 --- a/src/org/average/whereami/PhoneLog.java +++ b/src/org/average/whereami/PhoneLog.java @@ -1,6 +1,7 @@ package org.average.whereami; import org.average.whereami.PersistentStore; +import org.average.whereami.SayWhen; import java.io.IOException; @@ -17,6 +18,7 @@ import com.google.common.collect.Lists; import android.content.Context; import android.content.res.Resources; +import android.text.format.Time; import android.util.Log; public final class PhoneLog extends Oracle { @@ -30,11 +32,31 @@ public final class PhoneLog extends Oracle { 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; 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); + last_call = res.getString(R.string.last_call); + in_call = res.getString(R.string.in_call); + out_call = res.getString(R.string.out_call); + duration = res.getString(R.string.duration); + lessthan = res.getString(R.string.lessthan); + minutes1 = res.getString(R.string.minutes1); + minutes2to4 = res.getString(R.string.minutes2to4); + minutes5up = res.getString(R.string.minutes5up); + sayWhen = new SayWhen(res); calendar_name = store.get("calendar_name"); peer_name = store.get("peer_name"); calendar_id = store.get("calendar_id"); @@ -50,23 +72,23 @@ public final class PhoneLog extends Oracle { Log.v(TAG, "entering getResult"); if (calendar_id == null || calendar_id == "") { calendar_id = scanCalendars(calendar_name); - store.put("calendar_id", calendar_id); } if (calendar_id == null || calendar_id == "") { - return scanEvents(calendar_id, peer_name); - } else { return nocalendar + " \"" + calendar_name + "\""; + } else { + store.put("calendar_id", calendar_id); + return scanEvents(calendar_id, peer_name); } } catch (GoogleJsonResponseException e) { - Log.v(TAG, "GoogleJsonResponseException: " + e); + Log.e(TAG, "GoogleJsonResponseException: " + e); if (e.getResponse().getStatusCode() == 401) { return authErrorMessage; } else { return e.getMessage(); } } catch (HttpResponseException e) { - Log.v(TAG, "HttpResponseException: " + e); + Log.e(TAG, "HttpResponseException: " + e); return e.getMessage(); } catch (IOException e) { e.printStackTrace(); @@ -105,44 +127,85 @@ public final class PhoneLog extends Oracle { private String scanEvents(String calendar_id, String peer_name) throws java.io.IOException { - Integer count = 0; - String res = "No records found"; Log.v(TAG, "Entering scanEvents for \"" + peer_name + "\" in \"" + calendar_id + "\""); + Integer count = 0; + Time ago = new Time(); + ago.set(System.currentTimeMillis() - 604800000L); + Long latestStartTime = 0L; + Long latestStopTime = 0L; + Boolean latestWasOutgoing = false; + Boolean wasFound = false; Events events = calendar.events().list(calendar_id) - //.setOrderBy("starttime") - //.setSortOrder("descending") // this does not exist + .setTimeMin(ago.format3339(false)) + .setQ(peer_name) .execute(); while (true) { String pt = events.getNextPageToken(); Log.v(TAG, "got events with pt=" + pt); for (Event event : events.getItems()) { count++; - Log.v(TAG, "event " + - event.getStart() + " \"" + - event.getSummary() + "\""); - if ((event.getSummary().startsWith("Called ") || - event.getSummary().startsWith("Call from ")) && - event.getSummary().contains(peer_name)) { - res = makeMessage(event); + String evSummary = event.getSummary(); + Long evStart = event.getStart() + .getDateTime().getValue(); + Long evStop = event.getEnd() + .getDateTime().getValue(); + Log.v(TAG, "event " + evStart + + " - " + evStop + + " : \"" + evSummary + "\""); + if ((evSummary.startsWith("Call To ") || + evSummary.startsWith("Call From ")) && + evStart > latestStartTime) { + latestStartTime = evStart; + latestStopTime = evStop; + latestWasOutgoing = evSummary + .startsWith("Call To "); + wasFound = true; } } if (count < 100 && pt != null && pt != "") { events = calendar.events().list(calendar_id) + .setTimeMin(ago.format3339(false)) + .setQ(peer_name) .setPageToken(pt).execute(); } else { break; } } - return res; + if (wasFound) { + return makeMessage(latestStartTime, latestStopTime, + latestWasOutgoing); + } else { + return noevents; + } } - private String makeMessage(Event event) { - Log.v(TAG, "Chosen event: " + event.getStatus() + - " start " + event.getStart() + - " end " + event.getEnd()); - return event.getId(); + private String makeMessage(Long latestStartTime, Long latestStopTime, + Boolean latestWasOutgoing) { + Time stime = new Time(); + stime.set(latestStartTime); + Long dur = (latestStopTime - latestStartTime) / 60000L; + Log.v(TAG, "Chosen event: start " + stime + + " 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; } }