Loading src/com/android/calendar/AllInOneActivity.java +19 −5 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.calendar; import static android.provider.CalendarContract.EXTRA_EVENT_ALL_DAY; import static android.provider.CalendarContract.EXTRA_EVENT_BEGIN_TIME; import static android.provider.CalendarContract.EXTRA_EVENT_END_TIME; import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS; Loading Loading @@ -53,6 +54,7 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.provider.CalendarContract; import android.provider.CalendarContract.Attendees; import android.provider.CalendarContract.Calendars; import android.provider.CalendarContract.Events; import android.text.TextUtils; Loading Loading @@ -139,7 +141,8 @@ public class AllInOneActivity extends Activity implements EventHandler, private long mViewEventId = -1; private long mIntentEventStartMillis = -1; private long mIntentEventEndMillis = -1; private int mIntentAttendeeResponse = CalendarController.ATTENDEE_NO_RESPONSE; private int mIntentAttendeeResponse = Attendees.ATTENDEE_STATUS_NONE; private boolean mIntentAllDay = false; // Action bar and Navigation bar (left side of Action bar) private ActionBar mActionBar; Loading Loading @@ -448,7 +451,8 @@ public class AllInOneActivity extends Activity implements EventHandler, mIntentEventStartMillis = intent.getLongExtra(EXTRA_EVENT_BEGIN_TIME, 0); mIntentEventEndMillis = intent.getLongExtra(EXTRA_EVENT_END_TIME, 0); mIntentAttendeeResponse = intent.getIntExtra( ATTENDEE_STATUS, CalendarController.ATTENDEE_NO_RESPONSE); ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_NONE); mIntentAllDay = intent.getBooleanExtra(EXTRA_EVENT_ALL_DAY, false); timeMillis = mIntentEventStartMillis; } } catch (NumberFormatException e) { Loading Loading @@ -567,10 +571,12 @@ public class AllInOneActivity extends Activity implements EventHandler, } mController.sendEventRelatedEventWithExtra(this, EventType.VIEW_EVENT, mViewEventId, mIntentEventStartMillis, mIntentEventEndMillis, -1, -1, mIntentAttendeeResponse, selectedTime); EventInfo.buildViewExtraLong(mIntentAttendeeResponse,mIntentAllDay), selectedTime); mViewEventId = -1; mIntentEventStartMillis = -1; mIntentEventEndMillis = -1; mIntentAllDay = false; } if (mMidnightUpdaterHandler == null) { mMidnightUpdaterHandler = new Handler(); Loading Loading @@ -1166,6 +1172,13 @@ public class AllInOneActivity extends Activity implements EventHandler, if (mCurrentView == ViewType.AGENDA && mShowEventDetailsWithAgenda) { if (event.startTime != null && event.endTime != null) { // Event is all day , adjust the goto time to local time if (event.isAllDay()) { Utils.convertAlldayUtcToLocal( event.startTime, event.startTime.toMillis(false), mTimeZone); Utils.convertAlldayUtcToLocal( event.endTime, event.endTime.toMillis(false), mTimeZone); } mController.sendEvent(this, EventType.GO_TO, event.startTime, event.endTime, event.id, ViewType.AGENDA); } else if (event.selectedTime != null) { Loading @@ -1179,6 +1192,7 @@ public class AllInOneActivity extends Activity implements EventHandler, mController.sendEvent(this, EventType.GO_TO, event.selectedTime, event.selectedTime, -1, ViewType.CURRENT); } int response = event.getResponse(); if ((mCurrentView == ViewType.AGENDA && mShowEventInfoFullScreenAgenda) || ((mCurrentView == ViewType.DAY || (mCurrentView == ViewType.WEEK) || mCurrentView == ViewType.MONTH) && mShowEventInfoFullScreen)){ Loading @@ -1191,13 +1205,13 @@ public class AllInOneActivity extends Activity implements EventHandler, Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.putExtra(EXTRA_EVENT_BEGIN_TIME, event.startTime.toMillis(false)); intent.putExtra(EXTRA_EVENT_END_TIME, event.endTime.toMillis(false)); intent.putExtra(EVENT_ATTENDEE_RESPONSE, (int)event.extraLong); intent.putExtra(EVENT_ATTENDEE_RESPONSE, response); startActivity(intent); } else { // start event info as a dialog EventInfoFragment fragment = new EventInfoFragment(this, event.id, event.startTime.toMillis(false), event.endTime.toMillis(false), (int) event.extraLong, true, event.endTime.toMillis(false), response, true, EventInfoFragment.DIALOG_WINDOW_STYLE); fragment.setDialogParams(event.x, event.y, mActionBar.getHeight()); FragmentManager fm = getFragmentManager(); Loading src/com/android/calendar/CalendarController.java +89 −16 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.calendar; import static android.provider.CalendarContract.EXTRA_EVENT_BEGIN_TIME; import static android.provider.CalendarContract.EXTRA_EVENT_END_TIME; import static android.provider.CalendarContract.EXTRA_EVENT_ALL_DAY; import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS; import com.android.calendar.event.EditEventActivity; import com.android.calendar.selectcalendars.SelectVisibleCalendarsActivity; Loading @@ -37,6 +38,7 @@ import android.database.Cursor; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.provider.CalendarContract.Attendees; import android.provider.CalendarContract.Calendars; import android.provider.CalendarContract.Events; import android.text.TextUtils; Loading Loading @@ -66,17 +68,16 @@ public class CalendarController { public static final int MAX_CALENDAR_WEEK = 3497; // weeks between 1/1/1970 and 1/1/2037 public static final String EVENT_ATTENDEE_RESPONSE = "attendeeResponse"; public static final int ATTENDEE_NO_RESPONSE = -1; private Context mContext; private final Context mContext; // This uses a LinkedHashMap so that we can replace fragments based on the // view id they are being expanded into since we can't guarantee a reference // to the handler will be findable private LinkedHashMap<Integer,EventHandler> eventHandlers = private final LinkedHashMap<Integer,EventHandler> eventHandlers = new LinkedHashMap<Integer,EventHandler>(5); private LinkedList<Integer> mToBeRemovedEventHandlers = new LinkedList<Integer>(); private LinkedHashMap<Integer, EventHandler> mToBeAddedEventHandlers = new LinkedHashMap< private final LinkedList<Integer> mToBeRemovedEventHandlers = new LinkedList<Integer>(); private final LinkedHashMap<Integer, EventHandler> mToBeAddedEventHandlers = new LinkedHashMap< Integer, EventHandler>(); private Pair<Integer, EventHandler> mFirstEventHandler; private Pair<Integer, EventHandler> mToBeAddedFirstEventHandler; Loading @@ -85,16 +86,16 @@ public class CalendarController { private static WeakHashMap<Context, CalendarController> instances = new WeakHashMap<Context, CalendarController>(); private WeakHashMap<Object, Long> filters = new WeakHashMap<Object, Long>(1); private final WeakHashMap<Object, Long> filters = new WeakHashMap<Object, Long>(1); private int mViewType = -1; private int mDetailViewType = -1; private int mPreviousViewType = -1; private long mEventId = -1; private Time mTime = new Time(); private final Time mTime = new Time(); private long mDateFlags = 0; private Runnable mUpdateTimezone = new Runnable() { private final Runnable mUpdateTimezone = new Runnable() { @Override public void run() { mTime.switchTimezone(Utils.getTimeZone(mContext, this)); Loading Loading @@ -150,6 +151,14 @@ public class CalendarController { } public static class EventInfo { private static final long ATTENTEE_STATUS_MASK = 0xFF; private static final long ALL_DAY_MASK = 0x100; private static final int ATTENDEE_STATUS_NONE_MASK = 0x01; private static final int ATTENDEE_STATUS_ACCEPTED_MASK = 0x02; private static final int ATTENDEE_STATUS_DECLINED_MASK = 0x04; private static final int ATTENDEE_STATUS_TENTATIVE_MASK = 0x08; public long eventType; // one of the EventType public int viewType; // one of the ViewType public long id; // event id Loading @@ -163,9 +172,11 @@ public class CalendarController { /** * For EventType.VIEW_EVENT: * It is the default attendee response. * Set to {@link #ATTENDEE_NO_RESPONSE}, Calendar.ATTENDEE_STATUS_ACCEPTED, * Calendar.ATTENDEE_STATUS_DECLINED, or Calendar.ATTENDEE_STATUS_TENTATIVE. * It is the default attendee response and an all day event indicator. * Set to Attendees.ATTENDEE_STATUS_NONE, Attendees.ATTENDEE_STATUS_ACCEPTED, * Attendees.ATTENDEE_STATUS_DECLINED, or Attendees.ATTENDEE_STATUS_TENTATIVE. * To signal the event is an all-day event, "or" ALL_DAY_MASK with the response. * Alternatively, use buildViewExtraLong(), getResponse(), and isAllDay(). * <p> * For EventType.CREATE_EVENT: * Set to {@link #EXTRA_CREATE_ALL_DAY} for creating an all-day event. Loading @@ -180,6 +191,61 @@ public class CalendarController { * Set formatting flags for Utils.formatDateRange */ public long extraLong; public boolean isAllDay() { if (eventType != EventType.VIEW_EVENT) { Log.wtf(TAG, "illegal call to isAllDay , wrong event type " + eventType); return false; } return ((extraLong & ALL_DAY_MASK) != 0) ? true : false; } public int getResponse() { if (eventType != EventType.VIEW_EVENT) { Log.wtf(TAG, "illegal call to getResponse , wrong event type " + eventType); return Attendees.ATTENDEE_STATUS_NONE; } int response = (int)(extraLong & ATTENTEE_STATUS_MASK); switch (response) { case ATTENDEE_STATUS_NONE_MASK: return Attendees.ATTENDEE_STATUS_NONE; case ATTENDEE_STATUS_ACCEPTED_MASK: return Attendees.ATTENDEE_STATUS_ACCEPTED; case ATTENDEE_STATUS_DECLINED_MASK: return Attendees.ATTENDEE_STATUS_DECLINED; case ATTENDEE_STATUS_TENTATIVE_MASK: return Attendees.ATTENDEE_STATUS_TENTATIVE; default: Log.wtf(TAG,"Unknown attendee response " + response); } return ATTENDEE_STATUS_NONE_MASK; } // Used to build the extra long for a VIEW event. public static long buildViewExtraLong(int response, boolean allDay) { long extra = allDay ? ALL_DAY_MASK : 0; switch (response) { case Attendees.ATTENDEE_STATUS_NONE: extra |= ATTENDEE_STATUS_NONE_MASK; break; case Attendees.ATTENDEE_STATUS_ACCEPTED: extra |= ATTENDEE_STATUS_ACCEPTED_MASK; break; case Attendees.ATTENDEE_STATUS_DECLINED: extra |= ATTENDEE_STATUS_DECLINED_MASK; break; case Attendees.ATTENDEE_STATUS_TENTATIVE: extra |= ATTENDEE_STATUS_TENTATIVE_MASK; break; default: Log.wtf(TAG,"Unknown attendee response " + response); extra |= ATTENDEE_STATUS_NONE_MASK; break; } return extra; } } /** Loading Loading @@ -246,8 +312,13 @@ public class CalendarController { public void sendEventRelatedEvent(Object sender, long eventType, long eventId, long startMillis, long endMillis, int x, int y, long selectedMillis) { // TODO: pass the real allDay status or at least a status that says we don't know the // status and have the receiver query the data. // The current use of this method for VIEW_EVENT is by the day view to show an EventInfo // so currently the missing allDay status has no effect. sendEventRelatedEventWithExtra(sender, eventType, eventId, startMillis, endMillis, x, y, CalendarController.ATTENDEE_NO_RESPONSE, selectedMillis); EventInfo.buildViewExtraLong(Attendees.ATTENDEE_STATUS_NONE, false), selectedMillis); } /** Loading @@ -260,8 +331,8 @@ public class CalendarController { * @param endMillis end time * @param x x coordinate in the activity space * @param y y coordinate in the activity space * @param extraLong default response value for the "simple event view". Use * CalendarController.ATTENDEE_NO_RESPONSE for no response. * @param extraLong default response value for the "simple event view" and all day indication. * Use Attendees.ATTENDEE_STATUS_NONE for no response. * @param selectedMillis The time to specify as selected */ public void sendEventRelatedEventWithExtra(Object sender, long eventType, long eventId, Loading Loading @@ -500,7 +571,8 @@ public class CalendarController { event.extraLong == EXTRA_CREATE_ALL_DAY); return; } else if (event.eventType == EventType.VIEW_EVENT) { launchViewEvent(event.id, event.startTime.toMillis(false), endTime); launchViewEvent(event.id, event.startTime.toMillis(false), endTime, event.getResponse()); return; } else if (event.eventType == EventType.EDIT_EVENT) { launchEditEvent(event.id, event.startTime.toMillis(false), endTime, true); Loading Loading @@ -640,13 +712,14 @@ public class CalendarController { mContext.startActivity(intent); } public void launchViewEvent(long eventId, long startMillis, long endMillis) { public void launchViewEvent(long eventId, long startMillis, long endMillis, int response) { Intent intent = new Intent(Intent.ACTION_VIEW); Uri eventUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventId); intent.setData(eventUri); intent.setClass(mContext, AllInOneActivity.class); intent.putExtra(EXTRA_EVENT_BEGIN_TIME, startMillis); intent.putExtra(EXTRA_EVENT_END_TIME, endMillis); intent.putExtra(ATTENDEE_STATUS, response); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); mContext.startActivity(intent); } Loading src/com/android/calendar/EventInfoActivity.java +4 −3 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.calendar; import static android.provider.CalendarContract.EXTRA_EVENT_BEGIN_TIME; import static android.provider.CalendarContract.EXTRA_EVENT_END_TIME; import static com.android.calendar.CalendarController.ATTENDEE_NO_RESPONSE; import static com.android.calendar.CalendarController.EVENT_ATTENDEE_RESPONSE; import android.app.ActionBar; Loading @@ -29,6 +28,7 @@ import android.content.Intent; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; import android.provider.CalendarContract.Attendees; import android.provider.CalendarContract.Events; import android.util.Log; Loading Loading @@ -60,7 +60,8 @@ public class EventInfoActivity extends Activity { } else if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) { mStartMillis = intent.getLongExtra(EXTRA_EVENT_BEGIN_TIME, 0); mEndMillis = intent.getLongExtra(EXTRA_EVENT_END_TIME, 0); attendeeResponse = intent.getIntExtra(EVENT_ATTENDEE_RESPONSE, ATTENDEE_NO_RESPONSE); attendeeResponse = intent.getIntExtra(EVENT_ATTENDEE_RESPONSE, Attendees.ATTENDEE_STATUS_NONE); Uri data = intent.getData(); if (data != null) { try { Loading @@ -77,7 +78,7 @@ public class EventInfoActivity extends Activity { if (!res.getBoolean(R.bool.agenda_show_event_info_full_screen) && !res.getBoolean(R.bool.show_event_info_full_screen)) { CalendarController.getInstance(this) .launchViewEvent(mEventId, mStartMillis, mEndMillis); .launchViewEvent(mEventId, mStartMillis, mEndMillis, attendeeResponse); finish(); return; } Loading src/com/android/calendar/EventInfoFragment.java +5 −5 Original line number Diff line number Diff line Loading @@ -273,8 +273,8 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange private DeleteEventHelper mDeleteHelper; private int mOriginalAttendeeResponse; private int mAttendeeResponseFromIntent = CalendarController.ATTENDEE_NO_RESPONSE; private int mUserSetResponse = CalendarController.ATTENDEE_NO_RESPONSE; private int mAttendeeResponseFromIntent = Attendees.ATTENDEE_STATUS_NONE; private int mUserSetResponse = Attendees.ATTENDEE_STATUS_NONE; private boolean mIsRepeating; private boolean mHasAlarm; private int mMaxReminders; Loading Loading @@ -809,7 +809,7 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange @SuppressWarnings("fallthrough") private void initAttendeesCursor(View view) { mOriginalAttendeeResponse = CalendarController.ATTENDEE_NO_RESPONSE; mOriginalAttendeeResponse = Attendees.ATTENDEE_STATUS_NONE; mCalendarOwnerAttendeeId = EditEventHelper.ATTENDEE_ID_NONE; mNumOfAttendees = 0; if (mAttendeesCursor != null) { Loading Loading @@ -1780,9 +1780,9 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange int response; if (mUserSetResponse != CalendarController.ATTENDEE_NO_RESPONSE) { if (mUserSetResponse != Attendees.ATTENDEE_STATUS_NONE) { response = mUserSetResponse; } else if (mAttendeeResponseFromIntent != CalendarController.ATTENDEE_NO_RESPONSE) { } else if (mAttendeeResponseFromIntent != Attendees.ATTENDEE_STATUS_NONE) { response = mAttendeeResponseFromIntent; } else { response = mOriginalAttendeeResponse; Loading src/com/android/calendar/SearchActivity.java +2 −2 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ public class SearchActivity extends Activity implements CalendarController.Event private ContentResolver mContentResolver; private ContentObserver mObserver = new ContentObserver(new Handler()) { private final ContentObserver mObserver = new ContentObserver(new Handler()) { @Override public boolean deliverSelfNotifications() { return true; Loading Loading @@ -173,7 +173,7 @@ public class SearchActivity extends Activity implements CalendarController.Event mEventInfoFragment = new EventInfoFragment(this, event.id, event.startTime.toMillis(false), event.endTime.toMillis(false), (int) event.extraLong, false, EventInfoFragment.DIALOG_WINDOW_STYLE); event.getResponse(), false, EventInfoFragment.DIALOG_WINDOW_STYLE); ft.replace(R.id.agenda_event_info, mEventInfoFragment); ft.commit(); mController.registerEventHandler(R.id.agenda_event_info, mEventInfoFragment); Loading Loading
src/com/android/calendar/AllInOneActivity.java +19 −5 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.calendar; import static android.provider.CalendarContract.EXTRA_EVENT_ALL_DAY; import static android.provider.CalendarContract.EXTRA_EVENT_BEGIN_TIME; import static android.provider.CalendarContract.EXTRA_EVENT_END_TIME; import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS; Loading Loading @@ -53,6 +54,7 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.provider.CalendarContract; import android.provider.CalendarContract.Attendees; import android.provider.CalendarContract.Calendars; import android.provider.CalendarContract.Events; import android.text.TextUtils; Loading Loading @@ -139,7 +141,8 @@ public class AllInOneActivity extends Activity implements EventHandler, private long mViewEventId = -1; private long mIntentEventStartMillis = -1; private long mIntentEventEndMillis = -1; private int mIntentAttendeeResponse = CalendarController.ATTENDEE_NO_RESPONSE; private int mIntentAttendeeResponse = Attendees.ATTENDEE_STATUS_NONE; private boolean mIntentAllDay = false; // Action bar and Navigation bar (left side of Action bar) private ActionBar mActionBar; Loading Loading @@ -448,7 +451,8 @@ public class AllInOneActivity extends Activity implements EventHandler, mIntentEventStartMillis = intent.getLongExtra(EXTRA_EVENT_BEGIN_TIME, 0); mIntentEventEndMillis = intent.getLongExtra(EXTRA_EVENT_END_TIME, 0); mIntentAttendeeResponse = intent.getIntExtra( ATTENDEE_STATUS, CalendarController.ATTENDEE_NO_RESPONSE); ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_NONE); mIntentAllDay = intent.getBooleanExtra(EXTRA_EVENT_ALL_DAY, false); timeMillis = mIntentEventStartMillis; } } catch (NumberFormatException e) { Loading Loading @@ -567,10 +571,12 @@ public class AllInOneActivity extends Activity implements EventHandler, } mController.sendEventRelatedEventWithExtra(this, EventType.VIEW_EVENT, mViewEventId, mIntentEventStartMillis, mIntentEventEndMillis, -1, -1, mIntentAttendeeResponse, selectedTime); EventInfo.buildViewExtraLong(mIntentAttendeeResponse,mIntentAllDay), selectedTime); mViewEventId = -1; mIntentEventStartMillis = -1; mIntentEventEndMillis = -1; mIntentAllDay = false; } if (mMidnightUpdaterHandler == null) { mMidnightUpdaterHandler = new Handler(); Loading Loading @@ -1166,6 +1172,13 @@ public class AllInOneActivity extends Activity implements EventHandler, if (mCurrentView == ViewType.AGENDA && mShowEventDetailsWithAgenda) { if (event.startTime != null && event.endTime != null) { // Event is all day , adjust the goto time to local time if (event.isAllDay()) { Utils.convertAlldayUtcToLocal( event.startTime, event.startTime.toMillis(false), mTimeZone); Utils.convertAlldayUtcToLocal( event.endTime, event.endTime.toMillis(false), mTimeZone); } mController.sendEvent(this, EventType.GO_TO, event.startTime, event.endTime, event.id, ViewType.AGENDA); } else if (event.selectedTime != null) { Loading @@ -1179,6 +1192,7 @@ public class AllInOneActivity extends Activity implements EventHandler, mController.sendEvent(this, EventType.GO_TO, event.selectedTime, event.selectedTime, -1, ViewType.CURRENT); } int response = event.getResponse(); if ((mCurrentView == ViewType.AGENDA && mShowEventInfoFullScreenAgenda) || ((mCurrentView == ViewType.DAY || (mCurrentView == ViewType.WEEK) || mCurrentView == ViewType.MONTH) && mShowEventInfoFullScreen)){ Loading @@ -1191,13 +1205,13 @@ public class AllInOneActivity extends Activity implements EventHandler, Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.putExtra(EXTRA_EVENT_BEGIN_TIME, event.startTime.toMillis(false)); intent.putExtra(EXTRA_EVENT_END_TIME, event.endTime.toMillis(false)); intent.putExtra(EVENT_ATTENDEE_RESPONSE, (int)event.extraLong); intent.putExtra(EVENT_ATTENDEE_RESPONSE, response); startActivity(intent); } else { // start event info as a dialog EventInfoFragment fragment = new EventInfoFragment(this, event.id, event.startTime.toMillis(false), event.endTime.toMillis(false), (int) event.extraLong, true, event.endTime.toMillis(false), response, true, EventInfoFragment.DIALOG_WINDOW_STYLE); fragment.setDialogParams(event.x, event.y, mActionBar.getHeight()); FragmentManager fm = getFragmentManager(); Loading
src/com/android/calendar/CalendarController.java +89 −16 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.calendar; import static android.provider.CalendarContract.EXTRA_EVENT_BEGIN_TIME; import static android.provider.CalendarContract.EXTRA_EVENT_END_TIME; import static android.provider.CalendarContract.EXTRA_EVENT_ALL_DAY; import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS; import com.android.calendar.event.EditEventActivity; import com.android.calendar.selectcalendars.SelectVisibleCalendarsActivity; Loading @@ -37,6 +38,7 @@ import android.database.Cursor; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.provider.CalendarContract.Attendees; import android.provider.CalendarContract.Calendars; import android.provider.CalendarContract.Events; import android.text.TextUtils; Loading Loading @@ -66,17 +68,16 @@ public class CalendarController { public static final int MAX_CALENDAR_WEEK = 3497; // weeks between 1/1/1970 and 1/1/2037 public static final String EVENT_ATTENDEE_RESPONSE = "attendeeResponse"; public static final int ATTENDEE_NO_RESPONSE = -1; private Context mContext; private final Context mContext; // This uses a LinkedHashMap so that we can replace fragments based on the // view id they are being expanded into since we can't guarantee a reference // to the handler will be findable private LinkedHashMap<Integer,EventHandler> eventHandlers = private final LinkedHashMap<Integer,EventHandler> eventHandlers = new LinkedHashMap<Integer,EventHandler>(5); private LinkedList<Integer> mToBeRemovedEventHandlers = new LinkedList<Integer>(); private LinkedHashMap<Integer, EventHandler> mToBeAddedEventHandlers = new LinkedHashMap< private final LinkedList<Integer> mToBeRemovedEventHandlers = new LinkedList<Integer>(); private final LinkedHashMap<Integer, EventHandler> mToBeAddedEventHandlers = new LinkedHashMap< Integer, EventHandler>(); private Pair<Integer, EventHandler> mFirstEventHandler; private Pair<Integer, EventHandler> mToBeAddedFirstEventHandler; Loading @@ -85,16 +86,16 @@ public class CalendarController { private static WeakHashMap<Context, CalendarController> instances = new WeakHashMap<Context, CalendarController>(); private WeakHashMap<Object, Long> filters = new WeakHashMap<Object, Long>(1); private final WeakHashMap<Object, Long> filters = new WeakHashMap<Object, Long>(1); private int mViewType = -1; private int mDetailViewType = -1; private int mPreviousViewType = -1; private long mEventId = -1; private Time mTime = new Time(); private final Time mTime = new Time(); private long mDateFlags = 0; private Runnable mUpdateTimezone = new Runnable() { private final Runnable mUpdateTimezone = new Runnable() { @Override public void run() { mTime.switchTimezone(Utils.getTimeZone(mContext, this)); Loading Loading @@ -150,6 +151,14 @@ public class CalendarController { } public static class EventInfo { private static final long ATTENTEE_STATUS_MASK = 0xFF; private static final long ALL_DAY_MASK = 0x100; private static final int ATTENDEE_STATUS_NONE_MASK = 0x01; private static final int ATTENDEE_STATUS_ACCEPTED_MASK = 0x02; private static final int ATTENDEE_STATUS_DECLINED_MASK = 0x04; private static final int ATTENDEE_STATUS_TENTATIVE_MASK = 0x08; public long eventType; // one of the EventType public int viewType; // one of the ViewType public long id; // event id Loading @@ -163,9 +172,11 @@ public class CalendarController { /** * For EventType.VIEW_EVENT: * It is the default attendee response. * Set to {@link #ATTENDEE_NO_RESPONSE}, Calendar.ATTENDEE_STATUS_ACCEPTED, * Calendar.ATTENDEE_STATUS_DECLINED, or Calendar.ATTENDEE_STATUS_TENTATIVE. * It is the default attendee response and an all day event indicator. * Set to Attendees.ATTENDEE_STATUS_NONE, Attendees.ATTENDEE_STATUS_ACCEPTED, * Attendees.ATTENDEE_STATUS_DECLINED, or Attendees.ATTENDEE_STATUS_TENTATIVE. * To signal the event is an all-day event, "or" ALL_DAY_MASK with the response. * Alternatively, use buildViewExtraLong(), getResponse(), and isAllDay(). * <p> * For EventType.CREATE_EVENT: * Set to {@link #EXTRA_CREATE_ALL_DAY} for creating an all-day event. Loading @@ -180,6 +191,61 @@ public class CalendarController { * Set formatting flags for Utils.formatDateRange */ public long extraLong; public boolean isAllDay() { if (eventType != EventType.VIEW_EVENT) { Log.wtf(TAG, "illegal call to isAllDay , wrong event type " + eventType); return false; } return ((extraLong & ALL_DAY_MASK) != 0) ? true : false; } public int getResponse() { if (eventType != EventType.VIEW_EVENT) { Log.wtf(TAG, "illegal call to getResponse , wrong event type " + eventType); return Attendees.ATTENDEE_STATUS_NONE; } int response = (int)(extraLong & ATTENTEE_STATUS_MASK); switch (response) { case ATTENDEE_STATUS_NONE_MASK: return Attendees.ATTENDEE_STATUS_NONE; case ATTENDEE_STATUS_ACCEPTED_MASK: return Attendees.ATTENDEE_STATUS_ACCEPTED; case ATTENDEE_STATUS_DECLINED_MASK: return Attendees.ATTENDEE_STATUS_DECLINED; case ATTENDEE_STATUS_TENTATIVE_MASK: return Attendees.ATTENDEE_STATUS_TENTATIVE; default: Log.wtf(TAG,"Unknown attendee response " + response); } return ATTENDEE_STATUS_NONE_MASK; } // Used to build the extra long for a VIEW event. public static long buildViewExtraLong(int response, boolean allDay) { long extra = allDay ? ALL_DAY_MASK : 0; switch (response) { case Attendees.ATTENDEE_STATUS_NONE: extra |= ATTENDEE_STATUS_NONE_MASK; break; case Attendees.ATTENDEE_STATUS_ACCEPTED: extra |= ATTENDEE_STATUS_ACCEPTED_MASK; break; case Attendees.ATTENDEE_STATUS_DECLINED: extra |= ATTENDEE_STATUS_DECLINED_MASK; break; case Attendees.ATTENDEE_STATUS_TENTATIVE: extra |= ATTENDEE_STATUS_TENTATIVE_MASK; break; default: Log.wtf(TAG,"Unknown attendee response " + response); extra |= ATTENDEE_STATUS_NONE_MASK; break; } return extra; } } /** Loading Loading @@ -246,8 +312,13 @@ public class CalendarController { public void sendEventRelatedEvent(Object sender, long eventType, long eventId, long startMillis, long endMillis, int x, int y, long selectedMillis) { // TODO: pass the real allDay status or at least a status that says we don't know the // status and have the receiver query the data. // The current use of this method for VIEW_EVENT is by the day view to show an EventInfo // so currently the missing allDay status has no effect. sendEventRelatedEventWithExtra(sender, eventType, eventId, startMillis, endMillis, x, y, CalendarController.ATTENDEE_NO_RESPONSE, selectedMillis); EventInfo.buildViewExtraLong(Attendees.ATTENDEE_STATUS_NONE, false), selectedMillis); } /** Loading @@ -260,8 +331,8 @@ public class CalendarController { * @param endMillis end time * @param x x coordinate in the activity space * @param y y coordinate in the activity space * @param extraLong default response value for the "simple event view". Use * CalendarController.ATTENDEE_NO_RESPONSE for no response. * @param extraLong default response value for the "simple event view" and all day indication. * Use Attendees.ATTENDEE_STATUS_NONE for no response. * @param selectedMillis The time to specify as selected */ public void sendEventRelatedEventWithExtra(Object sender, long eventType, long eventId, Loading Loading @@ -500,7 +571,8 @@ public class CalendarController { event.extraLong == EXTRA_CREATE_ALL_DAY); return; } else if (event.eventType == EventType.VIEW_EVENT) { launchViewEvent(event.id, event.startTime.toMillis(false), endTime); launchViewEvent(event.id, event.startTime.toMillis(false), endTime, event.getResponse()); return; } else if (event.eventType == EventType.EDIT_EVENT) { launchEditEvent(event.id, event.startTime.toMillis(false), endTime, true); Loading Loading @@ -640,13 +712,14 @@ public class CalendarController { mContext.startActivity(intent); } public void launchViewEvent(long eventId, long startMillis, long endMillis) { public void launchViewEvent(long eventId, long startMillis, long endMillis, int response) { Intent intent = new Intent(Intent.ACTION_VIEW); Uri eventUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventId); intent.setData(eventUri); intent.setClass(mContext, AllInOneActivity.class); intent.putExtra(EXTRA_EVENT_BEGIN_TIME, startMillis); intent.putExtra(EXTRA_EVENT_END_TIME, endMillis); intent.putExtra(ATTENDEE_STATUS, response); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); mContext.startActivity(intent); } Loading
src/com/android/calendar/EventInfoActivity.java +4 −3 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.calendar; import static android.provider.CalendarContract.EXTRA_EVENT_BEGIN_TIME; import static android.provider.CalendarContract.EXTRA_EVENT_END_TIME; import static com.android.calendar.CalendarController.ATTENDEE_NO_RESPONSE; import static com.android.calendar.CalendarController.EVENT_ATTENDEE_RESPONSE; import android.app.ActionBar; Loading @@ -29,6 +28,7 @@ import android.content.Intent; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; import android.provider.CalendarContract.Attendees; import android.provider.CalendarContract.Events; import android.util.Log; Loading Loading @@ -60,7 +60,8 @@ public class EventInfoActivity extends Activity { } else if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) { mStartMillis = intent.getLongExtra(EXTRA_EVENT_BEGIN_TIME, 0); mEndMillis = intent.getLongExtra(EXTRA_EVENT_END_TIME, 0); attendeeResponse = intent.getIntExtra(EVENT_ATTENDEE_RESPONSE, ATTENDEE_NO_RESPONSE); attendeeResponse = intent.getIntExtra(EVENT_ATTENDEE_RESPONSE, Attendees.ATTENDEE_STATUS_NONE); Uri data = intent.getData(); if (data != null) { try { Loading @@ -77,7 +78,7 @@ public class EventInfoActivity extends Activity { if (!res.getBoolean(R.bool.agenda_show_event_info_full_screen) && !res.getBoolean(R.bool.show_event_info_full_screen)) { CalendarController.getInstance(this) .launchViewEvent(mEventId, mStartMillis, mEndMillis); .launchViewEvent(mEventId, mStartMillis, mEndMillis, attendeeResponse); finish(); return; } Loading
src/com/android/calendar/EventInfoFragment.java +5 −5 Original line number Diff line number Diff line Loading @@ -273,8 +273,8 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange private DeleteEventHelper mDeleteHelper; private int mOriginalAttendeeResponse; private int mAttendeeResponseFromIntent = CalendarController.ATTENDEE_NO_RESPONSE; private int mUserSetResponse = CalendarController.ATTENDEE_NO_RESPONSE; private int mAttendeeResponseFromIntent = Attendees.ATTENDEE_STATUS_NONE; private int mUserSetResponse = Attendees.ATTENDEE_STATUS_NONE; private boolean mIsRepeating; private boolean mHasAlarm; private int mMaxReminders; Loading Loading @@ -809,7 +809,7 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange @SuppressWarnings("fallthrough") private void initAttendeesCursor(View view) { mOriginalAttendeeResponse = CalendarController.ATTENDEE_NO_RESPONSE; mOriginalAttendeeResponse = Attendees.ATTENDEE_STATUS_NONE; mCalendarOwnerAttendeeId = EditEventHelper.ATTENDEE_ID_NONE; mNumOfAttendees = 0; if (mAttendeesCursor != null) { Loading Loading @@ -1780,9 +1780,9 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange int response; if (mUserSetResponse != CalendarController.ATTENDEE_NO_RESPONSE) { if (mUserSetResponse != Attendees.ATTENDEE_STATUS_NONE) { response = mUserSetResponse; } else if (mAttendeeResponseFromIntent != CalendarController.ATTENDEE_NO_RESPONSE) { } else if (mAttendeeResponseFromIntent != Attendees.ATTENDEE_STATUS_NONE) { response = mAttendeeResponseFromIntent; } else { response = mOriginalAttendeeResponse; Loading
src/com/android/calendar/SearchActivity.java +2 −2 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ public class SearchActivity extends Activity implements CalendarController.Event private ContentResolver mContentResolver; private ContentObserver mObserver = new ContentObserver(new Handler()) { private final ContentObserver mObserver = new ContentObserver(new Handler()) { @Override public boolean deliverSelfNotifications() { return true; Loading Loading @@ -173,7 +173,7 @@ public class SearchActivity extends Activity implements CalendarController.Event mEventInfoFragment = new EventInfoFragment(this, event.id, event.startTime.toMillis(false), event.endTime.toMillis(false), (int) event.extraLong, false, EventInfoFragment.DIALOG_WINDOW_STYLE); event.getResponse(), false, EventInfoFragment.DIALOG_WINDOW_STYLE); ft.replace(R.id.agenda_event_info, mEventInfoFragment); ft.commit(); mController.registerEventHandler(R.id.agenda_event_info, mEventInfoFragment); Loading