package at.tugraz.examreminder.service;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.provider.CalendarContract;
import android.text.format.Time;
import android.util.Log;
import at.tugraz.examreminder.ExamReminderApplication;
import at.tugraz.examreminder.core.Exam;
import java.util.*;
public class CalendarHelper {
private Context context;
private static String CALENDAR_ID = null;
private final static String TAG = "CalendarHelper";
public CalendarHelper(Context context) {
this.context = context;
}
public void addExamEvent(long calendar_id, Exam exam) {
String title = exam.course.name + " " + exam.course.type;
String location = exam.place;
String description = "Registration deadline"; //@TODO after crawled
long event_id = addEvent(calendar_id, exam.course.name, exam.getFrom(), exam.getTo(), description, location);
exam.event_id = event_id;
}
public void addExamEvents(SortedSet<Exam> exams) {
long calendar_id = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(context).getString("pref_android_calendar_to_use", "-1"));
if(calendar_id < 0)
return;
for(Exam exam : exams) {
addExamEvent(calendar_id, exam);
}
}
public void deleteExamEvents(SortedSet<Exam> exams) {
for(Exam exam : exams){
deleteExamEvent(exam);
}
}
public void deleteExamEvent(Exam exam) {
if(exam.event_id >= 0) {
deleteEvent(exam.event_id);
exam.event_id = -1;
}
}
public long addEvent(long calendar_id, String title, GregorianCalendar start, GregorianCalendar end, String description, String location) {
ContentValues event = new ContentValues();
event.put(CalendarContract.Events.CALENDAR_ID, calendar_id);
event.put(CalendarContract.Events.TITLE, title);
if(description != null)
event.put(CalendarContract.Events.DESCRIPTION, description);
if(location != null)
event.put(CalendarContract.Events.EVENT_LOCATION, location);
event.put(CalendarContract.Events.DTSTART, start.getTimeInMillis());
event.put(CalendarContract.Events.DTEND, end.getTimeInMillis());
event.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
Uri eventsUri = CalendarContract.Events.CONTENT_URI;
Uri result = context.getContentResolver().insert(eventsUri, event);
long id = Long.parseLong(result.getLastPathSegment());
Log.v(TAG, "Created Calendar event with id: " + id + " in calendar with id: " + calendar_id);
return id;
}
public void deleteEvent(long event_id) {
Uri.Builder builder = CalendarContract.Events.CONTENT_URI.buildUpon();
Uri uri = builder.appendPath(String.valueOf(event_id)).build();
context.getContentResolver().delete(uri, null, null);
Log.v(TAG, "Deleted Calendar event with id: " + event_id);
}
public List<Calendar> getLocalCalendars() {
Cursor cursor = null;
List<Calendar> calendars = new ArrayList<Calendar>();
ContentResolver contentResolver = ExamReminderApplication.getAppContext().getContentResolver();
Uri uri = CalendarContract.Calendars.CONTENT_URI;
String[] eventProjection = new String[] {
CalendarContract.Calendars._ID,
CalendarContract.Calendars.NAME,
CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
CalendarContract.Calendars.ACCOUNT_NAME
};
cursor = contentResolver.query(uri, eventProjection, null, null, null);
while(cursor.moveToNext()) {
Calendar calendar = new Calendar();
calendar.ID = Long.parseLong(cursor.getString(0));
calendar.name = cursor.getString(1);
calendar.displayName = cursor.getString(2);
calendar.accountName = cursor.getString(3);
if(!(calendar.name == null || calendar.accountName == null))
calendars.add(calendar);
}
return calendars;
}
public class Calendar {
public long ID;
public String name;
public String displayName;
public String accountName;
}
}