diff --git a/external/external.iml b/external/external.iml index dc46836b86..220af206fd 100644 --- a/external/external.iml +++ b/external/external.iml @@ -1,5 +1,5 @@ - + diff --git a/res/layout/edit_event_1.xml b/res/layout/edit_event_1.xml index d1a3c45b61..db54b5d34c 100644 --- a/res/layout/edit_event_1.xml +++ b/res/layout/edit_event_1.xml @@ -276,6 +276,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="4dip" + android:layout_marginBottom="4dip" android:gravity="center_vertical" android:minHeight="24dip" android:orientation="horizontal"> @@ -300,6 +301,33 @@ + + + + + + + + + \ No newline at end of file diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 8307a7e1b5..768ad241bc 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -241,13 +241,20 @@ Tentative - + 0 1 2 + + + Tentative + Confirmed + Cancelled + + @string/visibility_default @string/visibility_confidential diff --git a/res/values/strings.xml b/res/values/strings.xml index 684822f004..65e7b2308e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -234,6 +234,8 @@ From All day + + Status Calendar diff --git a/src/com/android/calendar/CalendarEventModel.java b/src/com/android/calendar/CalendarEventModel.java index 18c3ed188f..c92ada0a79 100644 --- a/src/com/android/calendar/CalendarEventModel.java +++ b/src/com/android/calendar/CalendarEventModel.java @@ -109,7 +109,7 @@ public class CalendarEventModel implements Serializable { // The model can't be updated with a calendar cursor until it has been // updated with an event cursor. public boolean mModelUpdatedWithEventCursor; - public int mAccessLevel = 0; + public int mAccessLevel = Events.ACCESS_DEFAULT; public ArrayList mReminders; public ArrayList mDefaultReminders; // PROVIDER_NOTES Using EditEventHelper the owner should not be included in this @@ -175,6 +175,8 @@ public CalendarEventModel(Context context, Intent intent) { mAccessLevel = accessLevel; } + mEventStatus = intent.getIntExtra(Events.STATUS, Events.STATUS_CONFIRMED); + String rrule = intent.getStringExtra(Events.RRULE); if (!TextUtils.isEmpty(rrule)) { mRrule = rrule; @@ -266,7 +268,7 @@ public void clear() { mGuestsCanModify = false; mGuestsCanInviteOthers = false; mGuestsCanSeeGuests = false; - mAccessLevel = 0; + mAccessLevel = Events.ACCESS_DEFAULT; mEventStatus = Events.STATUS_CONFIRMED; mOrganizerCanRespond = false; mCalendarAccessLevel = Calendars.CAL_ACCESS_CONTRIBUTOR; diff --git a/src/com/android/calendar/event/EditEventFragment.java b/src/com/android/calendar/event/EditEventFragment.java index d5ab6eb7eb..c7916099e5 100644 --- a/src/com/android/calendar/event/EditEventFragment.java +++ b/src/com/android/calendar/event/EditEventFragment.java @@ -642,8 +642,7 @@ private static class EventBundle implements Serializable { long end = -1; } - // TODO turn this into a helper function in EditEventHelper for building the - // model + // TODO turn this into a helper function in EditEventHelper for building the model private class QueryHandler extends AsyncQueryHandler { public QueryHandler(ContentResolver cr) { super(cr); @@ -750,7 +749,7 @@ protected void onQueryComplete(int token, Object cookie, Cursor cursor) { while (cursor.moveToNext()) { String name = cursor.getString(EditEventHelper.ATTENDEES_INDEX_NAME); String email = cursor.getString(EditEventHelper.ATTENDEES_INDEX_EMAIL); - int status = cursor.getInt(EditEventHelper.ATTENDEES_INDEX_STATUS); + int attendeeStatus = cursor.getInt(EditEventHelper.ATTENDEES_INDEX_STATUS); int relationship = cursor .getInt(EditEventHelper.ATTENDEES_INDEX_RELATIONSHIP); if (relationship == Attendees.RELATIONSHIP_ORGANIZER) { @@ -779,14 +778,14 @@ protected void onQueryComplete(int token, Object cookie, Cursor cursor) { int attendeeId = cursor.getInt(EditEventHelper.ATTENDEES_INDEX_ID); mModel.mOwnerAttendeeId = attendeeId; - mModel.mSelfAttendeeStatus = status; + mModel.mSelfAttendeeStatus = attendeeStatus; mOriginalModel.mOwnerAttendeeId = attendeeId; - mOriginalModel.mSelfAttendeeStatus = status; + mOriginalModel.mSelfAttendeeStatus = attendeeStatus; continue; } } Attendee attendee = new Attendee(name, email); - attendee.mStatus = status; + attendee.mStatus = attendeeStatus; mModel.addAttendee(attendee); mOriginalModel.addAttendee(attendee); } diff --git a/src/com/android/calendar/event/EditEventHelper.java b/src/com/android/calendar/event/EditEventHelper.java index abeadb7977..34a2121c33 100644 --- a/src/com/android/calendar/event/EditEventHelper.java +++ b/src/com/android/calendar/event/EditEventHelper.java @@ -321,11 +321,11 @@ public boolean saveEvent(CalendarEventModel model, CalendarEventModel originalMo ArrayList reminders = model.mReminders; int len = reminders.size(); values.put(Events.HAS_ALARM, (len > 0) ? 1 : 0); + values.put(Events.STATUS, model.mEventStatus); if (uri == null) { // Add hasAttendeeData for a new event values.put(Events.HAS_ATTENDEE_DATA, 1); - values.put(Events.STATUS, Events.STATUS_CONFIRMED); eventIdIndex = ops.size(); ContentProviderOperation.Builder b = ContentProviderOperation.newInsert( Events.CONTENT_URI).withValues(values); @@ -1284,8 +1284,7 @@ ContentValues getContentValuesFromModel(CalendarEventModel model) { values.put(Events.AVAILABILITY, model.mAvailability); values.put(Events.HAS_ATTENDEE_DATA, model.mHasAttendeeData ? 1 : 0); - int accessLevel = model.mAccessLevel; - values.put(Events.ACCESS_LEVEL, accessLevel); + values.put(Events.ACCESS_LEVEL, model.mAccessLevel); values.put(Events.STATUS, model.mEventStatus); if (model.isEventColorInitialized()) { if (model.getEventColor() == model.getCalendarColor()) { diff --git a/src/com/android/calendar/event/EditEventView.java b/src/com/android/calendar/event/EditEventView.java index db3f7e1b22..c4dfc2f78f 100644 --- a/src/com/android/calendar/event/EditEventView.java +++ b/src/com/android/calendar/event/EditEventView.java @@ -145,6 +145,7 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa Spinner mCalendarsSpinner; Button mRruleButton; Spinner mAvailabilitySpinner; + Spinner mEventStatusSpinner; Spinner mAccessLevelSpinner; RadioGroup mResponseRadioGroup; TextView mTitleTextView; @@ -208,6 +209,13 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa private boolean mAvailabilityExplicitlySet; private boolean mAllDayChangingAvailability; private int mAvailabilityCurrentlySelected; + /** + * Contents of the "status" spinner. Labels indices match the three values constants + * {@link Events#STATUS_TENTATIVE}, {@link Events#STATUS_CONFIRMED}, and + * {@link Events#STATUS_CANCELED}. + */ + private ArrayList mEventStatusLabels; + private ArrayAdapter mEventStatusAdapter; private int mDefaultReminderMinutes; private boolean mSaveAfterQueryComplete = false; private TimeZonePickerUtils mTzPickerUtils; @@ -258,6 +266,7 @@ public void onClick(View v) { mAllDayCheckBox = (CheckBox) view.findViewById(R.id.is_all_day); mRruleButton = (Button) view.findViewById(R.id.rrule); mAvailabilitySpinner = (Spinner) view.findViewById(R.id.availability); + mEventStatusSpinner = (Spinner) view.findViewById(R.id.event_status); mAccessLevelSpinner = (Spinner) view.findViewById(R.id.visibility); mCalendarSelectorGroup = view.findViewById(R.id.calendar_selector_group); mCalendarSelectorWrapper = view.findViewById(R.id.calendar_selector_wrapper); @@ -309,8 +318,7 @@ public void onItemSelected(AdapterView parent, mAvailabilityCurrentlySelected = position; } - if (mAvailabilityCurrentlySelected != position && - !mAllDayChangingAvailability) { + if (mAvailabilityCurrentlySelected != position && !mAllDayChangingAvailability) { mAvailabilityExplicitlySet = true; } else { mAvailabilityCurrentlySelected = position; @@ -339,6 +347,7 @@ public void onNothingSelected(AdapterView arg0) { mViewOnlyList.add(view.findViewById(R.id.timezone_textview_row)); mEditOnlyList.add(view.findViewById(R.id.all_day_row)); + mEditOnlyList.add(view.findViewById(R.id.event_status_row)); mEditOnlyList.add(view.findViewById(R.id.availability_row)); mEditOnlyList.add(view.findViewById(R.id.visibility_row)); mEditOnlyList.add(view.findViewById(R.id.from_row)); @@ -691,8 +700,8 @@ private boolean fillModelFromUI() { mModel.mTimezone = mTimezone; mModel.mAccessLevel = mAccessLevelSpinner.getSelectedItemPosition(); // TODO set correct availability value - mModel.mAvailability = mAvailabilityValues.get(mAvailabilitySpinner - .getSelectedItemPosition()); + mModel.mAvailability = mAvailabilityValues.get(mAvailabilitySpinner.getSelectedItemPosition()); + mModel.mEventStatus = mEventStatusSpinner.getSelectedItemPosition(); // rrrule // If we're making an exception we don't want it to be a repeating @@ -735,6 +744,16 @@ private void prepareAvailability() { mAvailabilitySpinner.setAdapter(mAvailabilityAdapter); } + private void prepareEventStatus() { + Resources r = mActivity.getResources(); + mEventStatusLabels = loadStringArray(r, R.array.event_status); + mEventStatusAdapter = new ArrayAdapter( + mActivity, android.R.layout.simple_spinner_item, mEventStatusLabels + ); + mEventStatusAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + mEventStatusSpinner.setAdapter(mEventStatusAdapter); + } + /** * Prepares the reminder UI elements. *

@@ -887,6 +906,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { prepareReminders(); prepareAvailability(); + prepareEventStatus(); prepareAccess(); View reminderAddButton = mView.findViewById(R.id.reminder_add); @@ -933,6 +953,7 @@ public void onClick(View v) { if (availIndex != -1) { mAvailabilitySpinner.setSelection(availIndex); } + mEventStatusSpinner.setSelection(model.mEventStatus); mAccessLevelSpinner.setSelection(model.mAccessLevel); View responseLabel = mView.findViewById(R.id.response_label);