@ -1,21 +1,26 @@
package com.todoroo.astrid.gcal ;
package com.todoroo.astrid.gcal ;
import java.util.Date ;
import android.app.Activity ;
import android.app.Activity ;
import android.content.ContentResolver ;
import android.content.ContentValues ;
import android.content.ContentValues ;
import android.content.Intent ;
import android.net.Uri ;
import android.text.TextUtils ;
import android.view.LayoutInflater ;
import android.view.LayoutInflater ;
import android.view.View ;
import android.view.View ;
import android.view.ViewGroup ;
import android.view.ViewGroup ;
import android.view.View.OnClickListener ;
import android.widget.ArrayAdapter ;
import android.widget.ArrayAdapter ;
import android.widget.Button ;
import android.widget.Button ;
import android.widget.CheckBox ;
import android.widget.CheckBox ;
import android.widget.CompoundButton ;
import android.widget.CompoundButton ;
import android.widget.CompoundButton.OnCheckedChangeListener ;
import android.widget.Spinner ;
import android.widget.Spinner ;
import android.widget.CompoundButton.OnCheckedChangeListener ;
import com.flurry.android.FlurryAgent ;
import com.flurry.android.FlurryAgent ;
import com.timsu.astrid.R ;
import com.timsu.astrid.R ;
import com.todoroo.andlib.service.Autowired ;
import com.todoroo.andlib.service.ExceptionService ;
import com.todoroo.astrid.activity.TaskEditActivity.TaskEditControlSet ;
import com.todoroo.astrid.activity.TaskEditActivity.TaskEditControlSet ;
import com.todoroo.astrid.gcal.Calendars.CalendarResult ;
import com.todoroo.astrid.gcal.Calendars.CalendarResult ;
import com.todoroo.astrid.model.Task ;
import com.todoroo.astrid.model.Task ;
@ -33,17 +38,19 @@ public class GCalControlSet implements TaskEditControlSet {
// --- instance variables
// --- instance variables
@Autowired
private ExceptionService exceptionService ;
private final Activity activity ;
private final Activity activity ;
private final CalendarResult calendars ;
private Uri calendarUri = null ;
private final CalendarResult calendars ;
private final CheckBox addToCalendar ;
private final CheckBox addToCalendar ;
private final Spinner calendarSelector ;
private final Spinner calendarSelector ;
private final Button viewCalendarEvent ;
private final Button viewCalendarEvent ;
public GCalControlSet ( Activity activity , ViewGroup parent ) {
public GCalControlSet ( final Activity activity , ViewGroup parent ) {
this . activity = activity ;
this . activity = activity ;
LayoutInflater . from ( activity ) . inflate ( R . layout . gcal_control , parent , true ) ;
LayoutInflater . from ( activity ) . inflate ( R . layout . gcal_control , parent , true ) ;
@ -51,7 +58,7 @@ public class GCalControlSet implements TaskEditControlSet {
this . calendarSelector = ( Spinner ) activity . findViewById ( R . id . calendars ) ;
this . calendarSelector = ( Spinner ) activity . findViewById ( R . id . calendars ) ;
this . viewCalendarEvent = ( Button ) activity . findViewById ( R . id . view_calendar_event ) ;
this . viewCalendarEvent = ( Button ) activity . findViewById ( R . id . view_calendar_event ) ;
calendars = Calendars . getCalendars ( activity ) ;
calendars = Calendars . getCalendars ( ) ;
ArrayAdapter < String > adapter = new ArrayAdapter < String > ( activity ,
ArrayAdapter < String > adapter = new ArrayAdapter < String > ( activity ,
android . R . layout . simple_spinner_item , calendars . calendars ) ;
android . R . layout . simple_spinner_item , calendars . calendars ) ;
adapter . setDropDownViewResource ( android . R . layout . simple_spinner_dropdown_item ) ;
adapter . setDropDownViewResource ( android . R . layout . simple_spinner_dropdown_item ) ;
@ -64,92 +71,80 @@ public class GCalControlSet implements TaskEditControlSet {
}
}
} ) ;
} ) ;
}
viewCalendarEvent . setOnClickListener ( new OnClickListener ( ) {
@Override
/ * * Take the values from the model and set the calendar start and end times
public void onClick ( View v ) {
* based on these . Sets keys ' dtstart ' and ' dtend ' .
if ( calendarUri = = null )
*
return ;
* @param preferred preferred due date or null
Intent intent = new Intent ( Intent . ACTION_EDIT , calendarUri ) ;
* @param definite definite due date or null
activity . startActivity ( intent ) ;
* @param estimatedSeconds estimated duration or null
* @param values
* /
@SuppressWarnings ( { "nls" , "unused" } )
public void createCalendarStartEndTimes ( Date preferred , Date definite ,
Integer estimatedSeconds , ContentValues values ) {
FlurryAgent . onEvent ( "create-calendar-event" ) ;
Long deadlineDate = null ;
if ( preferred ! = null & & preferred . after ( new Date ( ) ) )
deadlineDate = preferred . getTime ( ) ;
else if ( definite ! = null )
deadlineDate = definite . getTime ( ) ;
else
deadlineDate = System . currentTimeMillis ( ) + 24 * 3600 * 1000L ;
int estimatedTime = DEFAULT_CAL_TIME ;
if ( estimatedSeconds ! = null & & estimatedSeconds > 0 ) {
estimatedTime = estimatedSeconds ;
}
values . put ( "dtstart" , deadlineDate - estimatedTime * 1000L ) ;
values . put ( "dtend" , deadlineDate ) ;
}
@SuppressWarnings ( "unused" )
protected void onPause ( ) {
// create calendar event
/ * if ( addToCalendar . isChecked ( ) & & model . getCalendarUri ( ) = = null ) {
Uri uri = Uri . parse ( "content://calendar/events" ) ;
ContentResolver cr = getContentResolver ( ) ;
ContentValues values = new ContentValues ( ) ;
values . put ( "title" , title . getText ( ) . toString ( ) ) ;
values . put ( "calendar_id" , Preferences . getDefaultCalendarIDSafe ( this ) ) ;
values . put ( "description" , notes . getText ( ) . toString ( ) ) ;
values . put ( "hasAlarm" , 0 ) ;
values . put ( "transparency" , 0 ) ;
values . put ( "visibility" , 0 ) ;
createCalendarStartEndTimes ( model . getPreferredDueDate ( ) ,
model . getDefiniteDueDate ( ) , model . getEstimatedSeconds ( ) ,
values ) ;
Uri result = null ;
try {
result = cr . insert ( uri , values ) ;
model . setCalendarUri ( result . toString ( ) ) ;
} catch ( IllegalArgumentException e ) {
Log . e ( "astrid" , "Error creating calendar event!" , e ) ;
}
}
} * /
} ) ;
// save save save
/ * if ( addToCalendar . isChecked ( ) & & model . getCalendarUri ( ) ! = null ) {
Uri result = Uri . parse ( model . getCalendarUri ( ) ) ;
Intent intent = new Intent ( Intent . ACTION_EDIT , result ) ;
ContentValues values = new ContentValues ( ) ;
createCalendarStartEndTimes ( model . getPreferredDueDate ( ) ,
model . getDefiniteDueDate ( ) , model . getEstimatedSeconds ( ) ,
values ) ;
intent . putExtra ( "beginTime" , values . getAsLong ( "dtstart" ) ) ;
intent . putExtra ( "endTime" , values . getAsLong ( "dtend" ) ) ;
startActivity ( intent ) ;
} * /
}
}
@Override
@Override
public void readFromTask ( Task task ) {
public void readFromTask ( Task task ) {
//
String uri = task . getValue ( Task . CALENDAR_URI ) ;
if ( ! TextUtils . isEmpty ( uri ) ) {
try {
calendarUri = Uri . parse ( uri ) ;
addToCalendar . setVisibility ( View . GONE ) ;
calendarSelector . setVisibility ( View . GONE ) ;
viewCalendarEvent . setVisibility ( View . VISIBLE ) ;
} catch ( Exception e ) {
exceptionService . reportError ( "unable-to-parse-calendar: " + //$NON-NLS-1$
task . getValue ( Task . CALENDAR_URI ) , e ) ;
}
}
}
}
@SuppressWarnings ( "nls" )
@Override
@Override
public void writeToModel ( Task task ) {
public void writeToModel ( Task task ) {
//
if ( addToCalendar . isChecked ( ) & & calendarUri = = null ) {
FlurryAgent . onEvent ( "create-calendar-event" ) ;
try {
Uri uri = Calendars . getCalendarContentUri ( Calendars . CALENDAR_CONTENT_EVENTS ) ;
ContentResolver cr = activity . getContentResolver ( ) ;
ContentValues values = new ContentValues ( ) ;
values . put ( "title" , task . getValue ( Task . TITLE ) ) ;
String calendarId = calendars . calendarIds [ calendarSelector . getSelectedItemPosition ( ) ] ;
Calendars . setDefaultCalendar ( calendarId ) ;
values . put ( "calendar_id" , calendarId ) ;
values . put ( "description" , task . getValue ( Task . NOTES ) ) ;
values . put ( "hasAlarm" , 0 ) ;
values . put ( "transparency" , 0 ) ;
values . put ( "visibility" , 0 ) ;
long dueDate = task . getValue ( Task . DUE_DATE ) ;
if ( task . hasDueDate ( ) ) {
if ( task . hasDueTime ( ) ) {
int estimatedTime = task . getValue ( Task . ESTIMATED_SECONDS ) ;
if ( estimatedTime < = 0 )
estimatedTime = DEFAULT_CAL_TIME ;
values . put ( "dtstart" , dueDate - estimatedTime ) ;
values . put ( "dtend" , dueDate ) ;
} else {
values . put ( "dtstart" , dueDate ) ;
values . put ( "dtend" , dueDate ) ;
values . put ( "allDay" , "1" ) ;
}
}
calendarUri = cr . insert ( uri , values ) ;
task . setValue ( Task . CALENDAR_URI , calendarUri . toString ( ) ) ;
// pop up the new event
Intent intent = new Intent ( Intent . ACTION_EDIT , calendarUri ) ;
intent . putExtra ( "beginTime" , values . getAsLong ( "dtstart" ) ) ;
intent . putExtra ( "endTime" , values . getAsLong ( "dtend" ) ) ;
activity . startActivity ( intent ) ;
} catch ( Exception e ) {
exceptionService . displayAndReportError ( activity ,
activity . getString ( R . string . gcal_TEA_error ) , e ) ;
}
}
}
}
}
}