1 package org.average.whereami;
3 import org.average.whereami.PersistentStore;
5 import java.io.IOException;
7 import com.google.api.client.googleapis.json.GoogleJsonResponseException;
8 import com.google.api.client.http.HttpResponseException;
9 import com.google.api.client.util.DateTime;
10 import com.google.api.services.calendar.Calendar;
11 import com.google.api.services.calendar.CalendarRequest;
12 import com.google.api.services.calendar.model.CalendarList;
13 import com.google.api.services.calendar.model.CalendarListEntry;
14 import com.google.api.services.calendar.model.Event;
15 import com.google.api.services.calendar.model.Events;
16 import com.google.common.collect.Lists;
18 import android.content.Context;
19 import android.content.res.Resources;
20 import android.util.Log;
22 public final class PhoneLog extends Oracle {
24 final String TAG = getClass().getName();
26 private Calendar calendar;
28 private PersistentStore store;
29 private String calendar_name;
30 private String peer_name;
31 private String calendar_id;
32 private String nocalendar;
34 public PhoneLog(final Resources res, final PersistentStore store) {
37 nocalendar = res.getString(R.string.nocalendar);
38 calendar_name = store.get("calendar_name");
39 peer_name = store.get("peer_name");
40 calendar_id = store.get("calendar_id");
42 calendar = Calendar.builder(httpTransport, jsonFactory)
43 .setHttpRequestInitializer(accessProtectedResource)
44 .setApplicationName("WhereAmI/1.0").build();
48 public final String getResult() {
50 Log.v(TAG, "entering getResult");
51 if (calendar_id == null || calendar_id == "") {
52 calendar_id = scanCalendars(calendar_name);
53 store.put("calendar_id", calendar_id);
55 if (calendar_id == null || calendar_id == "") {
56 return scanEvents(calendar_id, peer_name);
58 return nocalendar + " \"" +
61 } catch (GoogleJsonResponseException e) {
62 Log.v(TAG, "GoogleJsonResponseException: " + e);
63 if (e.getResponse().getStatusCode() == 401) {
64 return authErrorMessage;
66 return e.getMessage();
68 } catch (HttpResponseException e) {
69 Log.v(TAG, "HttpResponseException: " + e);
70 return e.getMessage();
71 } catch (IOException e) {
73 return e.getMessage();
77 private String scanCalendars(String calendar_name)
78 throws java.io.IOException {
80 Log.v(TAG, "Entering scanCalendars for \"" +
81 calendar_name + "\"");
83 CalendarList cl = calendar.calendarList().list().execute();
85 String pt = cl.getNextPageToken();
86 Log.v(TAG, "got cl with pt=" + pt);
87 for (CalendarListEntry le : cl.getItems()) {
88 Log.v(TAG, "entry " + le.getId() + ":\"" +
89 le.getSummary() + "\"");
90 if (le.getSummary().equals(calendar_name)) {
92 //break; // get all in the log
95 if (pt != null && pt != "") {
96 cl = calendar.calendarList().list()
97 .setPageToken(pt).execute();
106 private String scanEvents(String calendar_id, String peer_name)
107 throws java.io.IOException {
109 String res = "No records found";
110 Log.v(TAG, "Entering scanEvents for \"" +
111 peer_name + "\" in \"" + calendar_id + "\"");
113 Events events = calendar.events().list(calendar_id)
114 //.setOrderBy("starttime")
115 //.setSortOrder("descending") // this does not exist
118 String pt = events.getNextPageToken();
119 Log.v(TAG, "got events with pt=" + pt);
120 for (Event event : events.getItems()) {
122 Log.v(TAG, "event " +
123 event.getStart() + " \"" +
124 event.getSummary() + "\"");
125 if ((event.getSummary().startsWith("Called ") ||
126 event.getSummary().startsWith("Call from ")) &&
127 event.getSummary().contains(peer_name)) {
128 res = makeMessage(event);
131 if (count < 100 && pt != null && pt != "") {
132 events = calendar.events().list(calendar_id)
133 .setPageToken(pt).execute();
142 private String makeMessage(Event event) {
143 Log.v(TAG, "Chosen event: " + event.getStatus() +
144 " start " + event.getStart() +
145 " end " + event.getEnd());
146 return event.getId();