package com.uwflow.flow_android.util; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Intent; import android.net.Uri; import android.provider.AlarmClock; import android.provider.CalendarContract; import com.uwflow.flow_android.db_object.Exam; import com.uwflow.flow_android.db_object.ScheduleCourse; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * Created by jasperfung on 3/2/14. */ public class CalendarHelper { private static final String seasons[] = { "Winter", "Winter", "Winter", "Winter", "Spring", "Spring", "Spring", "Spring", "Fall", "Fall", "Fall", "Fall" }; private static final String shortMonth[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; private static final String daysOfWeek[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; public static String getSeason( Date date ) { return seasons[ date.getMonth() ]; } public static String getShortMonth( Date date ) { return shortMonth[ date.getMonth() ]; } public static String getShortString(Date date) { StringBuilder sb = new StringBuilder(); DateFormat df = new SimpleDateFormat("yy"); sb.append(getShortMonth(date)); sb.append(" "); sb.append(df.format(date)); return sb.toString(); } public static String getDateString(Date date) { SimpleDateFormat df = new SimpleDateFormat ("E, MMM d"); return df.format(date); } public static String getTimeString(Date date) { SimpleDateFormat df = new SimpleDateFormat ("h:mma"); return df.format(date); } public static String formatTermNicely(String termId) { if (termId == null) return null; String[] tokens = termId.split("_"); int year = Integer.valueOf(tokens[0]).intValue(); int month = Integer.valueOf(tokens[1]).intValue() - 1; if (month >= 12) return null; return String.format("%s %d", seasons[month], year); } public static String getDayOfWeek(int i) { return daysOfWeek[i - 1 < 0 ? 0 : i - 1]; } public static Intent getAddCalenderEventIntent(Exam exam) { String courseId = exam.getCourseId(); String sections = exam.getSections(); String location = exam.getLocation(); String startDate = ""; String endDate = ""; String startTime = ""; String endTime = ""; Intent intent = new Intent(Intent.ACTION_INSERT); if (exam.getStartDate() != 0 && exam.getEndDate() != 0) { // Missing start/end date. Let's leave this to the user to enter startDate = getDateString(new Date(exam.getStartDate())); endDate = getDateString(new Date(exam.getEndDate())); startTime = getTimeString(new Date(exam.getStartDate())); endTime = getTimeString(new Date(exam.getEndDate())); // TODO: verify that the format of exam.getStartDate() is appropriate intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, exam.getStartDate()) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, exam.getEndDate()); } intent.setData(CalendarContract.Events.CONTENT_URI) .putExtra(CalendarContract.Events.TITLE, String.format("%s Exam", courseId.toUpperCase())) .putExtra(CalendarContract.Events.DESCRIPTION, String.format("Course: %s\nSection: %s\nDate: %s\nTime: %s - %s\nLocation: %s", courseId, sections, startDate, startTime, endTime, location)) .putExtra(CalendarContract.Events.EVENT_LOCATION, location) .putExtra(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY); return intent; } public static Intent getAddAlarmIntent(String title, String location, Date startDate) { Calendar calendar = GregorianCalendar.getInstance(); calendar.setTime(startDate); Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM); intent.putExtra(AlarmClock.EXTRA_HOUR, calendar.get(Calendar.HOUR_OF_DAY)); intent.putExtra(AlarmClock.EXTRA_MINUTES, calendar.get(Calendar.MINUTE)); intent.putExtra(AlarmClock.EXTRA_MESSAGE, String.format("%s - %s", title, location)); // To show the Alarm app after adding an alarm, uncomment the line below: // intent.putExtra(AlarmClock.EXTRA_SKIP_UI, true); /* Note: API 19 (KitKat) allows you to set the alarm's day(s) via the extra AlarmClock.EXTRA_DAYS */ return intent; } public static Calendar getCurrentWeek() { Calendar currentWeek = Calendar.getInstance(); currentWeek.setFirstDayOfWeek(Calendar.MONDAY); currentWeek.set(Calendar.HOUR_OF_DAY, 0); currentWeek.clear(Calendar.MINUTE); currentWeek.clear(Calendar.SECOND); currentWeek.clear(Calendar.MILLISECOND); return currentWeek; } public static Date getCurrentWeekStartDate() { // Get a calendar set to the current week final Calendar currentWeek = getCurrentWeek(); // Create a start Date for this week currentWeek.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return currentWeek.getTime(); } public static Date getCurrentWeekEndDate() { // Get a calendar set to the current week final Calendar currentWeek = getCurrentWeek(); // Create an end Date for this week currentWeek.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); return currentWeek.getTime(); } }