1 package org.average.whereami;
3 import org.average.whereami.CredentialStore;
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 String calendar_name = "Call Log";
29 private String calendar_id = null;
30 private String peer_name = "Alla Cherkashina";
32 public PhoneLog(final Resources res, final CredentialStore store) {
35 calendar = Calendar.builder(httpTransport, jsonFactory)
36 .setHttpRequestInitializer(accessProtectedResource)
37 .setApplicationName("WhereAmI/1.0").build();
41 public final String getResult() {
43 Log.v(TAG, "entering getResult");
44 if (calendar_id == null) {
45 calendar_id = scanCalendars(calendar_name);
47 return scanEvents(calendar_id, peer_name);
48 } catch (GoogleJsonResponseException e) {
49 Log.v(TAG, "GoogleJsonResponseException: " + e);
50 if (e.getResponse().getStatusCode() == 401) {
51 return authErrorMessage;
53 return e.getMessage();
55 } catch (HttpResponseException e) {
56 Log.v(TAG, "HttpResponseException: " + e);
57 return e.getMessage();
58 } catch (IOException e) {
60 return e.getMessage();
64 private String scanCalendars(String calendar_name)
65 throws java.io.IOException {
67 Log.v(TAG, "Entering scanCalendars for \"" +
68 calendar_name + "\"");
70 CalendarList cl = calendar.calendarList().list().execute();
72 String pt = cl.getNextPageToken();
73 Log.v(TAG, "got cl with pt=" + pt);
74 for (CalendarListEntry le : cl.getItems()) {
75 Log.v(TAG, "entry " + le.getId() + ":\"" +
76 le.getSummary() + "\"");
77 if (le.getSummary().equals(calendar_name)) {
79 //break; // get all in the log
82 if (pt != null && pt != "") {
83 cl = calendar.calendarList().list()
84 .setPageToken(pt).execute();
93 private String scanEvents(String calendar_id, String peer_name)
94 throws java.io.IOException {
96 String res = "No records found";
97 Log.v(TAG, "Entering scanEvents for \"" +
98 peer_name + "\" in \"" + calendar_id + "\"");
100 Events events = calendar.events().list(calendar_id)
101 //.setOrderBy("starttime")
102 //.setSortOrder("descending") // this does not exist
105 String pt = events.getNextPageToken();
106 Log.v(TAG, "got events with pt=" + pt);
107 for (Event event : events.getItems()) {
109 Log.v(TAG, "event " +
110 event.getStart() + " \"" +
111 event.getSummary() + "\"");
112 if ((event.getSummary().startsWith("Called ") ||
113 event.getSummary().startsWith("Call from ")) &&
114 event.getSummary().contains(peer_name)) {
115 res = makeMessage(event);
118 if (count < 100 && pt != null && pt != "") {
119 events = calendar.events().list(calendar_id)
120 .setPageToken(pt).execute();
129 private String makeMessage(Event event) {
130 Log.v(TAG, "Chosen event: " + event.getStatus() +
131 " start " + event.getStart() +
132 " end " + event.getEnd());
133 return event.getId();