Skip to content

Commit 382b408

Browse files
Add ability to edit event status (#71, #201)
- Add a spinner to the `Edit Event View` to select the event status, one of `CONFIRMED`, `TENTATIVE`, or `CANCELLED`. - Set default status in `Calendar Event Model` to `CONFIRMED`.
1 parent 945db67 commit 382b408

File tree

7 files changed

+71
-12
lines changed

7 files changed

+71
-12
lines changed

res/layout/edit_event_1.xml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@
276276
android:layout_width="match_parent"
277277
android:layout_height="wrap_content"
278278
android:layout_marginTop="4dip"
279+
android:layout_marginBottom="4dip"
279280
android:gravity="center_vertical"
280281
android:minHeight="24dip"
281282
android:orientation="horizontal">
@@ -300,6 +301,33 @@
300301
</LinearLayout>
301302

302303
<!-- TIME ZONE - Read-only textview version -->
304+
305+
<LinearLayout
306+
android:id="@+id/event_status_row"
307+
android:layout_width="match_parent"
308+
android:layout_height="wrap_content"
309+
android:minHeight="64dip"
310+
android:orientation="vertical">
311+
312+
<TextView
313+
android:id="@+id/event_status_label"
314+
style="@style/TextAppearance.EditEvent_LabelSmall"
315+
android:layout_width="match_parent"
316+
android:layout_height="wrap_content"
317+
android:text="@string/edit_event_status_label" />
318+
319+
<Spinner
320+
android:id="@+id/event_status"
321+
style="@style/TextAppearance.EditEvent_Spinner"
322+
android:layout_width="match_parent"
323+
android:layout_height="wrap_content"
324+
android:entries="@array/event_status"
325+
android:minHeight="48dip"
326+
android:paddingStart="4dp"
327+
android:paddingEnd="4dp"
328+
android:spinnerMode="dropdown" />
329+
</LinearLayout>
330+
303331
<LinearLayout
304332
android:id="@+id/timezone_textview_row"
305333
android:layout_width="match_parent"
@@ -338,4 +366,5 @@
338366

339367
<View
340368
style="@style/EditEventSeparator"/>
369+
341370
</LinearLayout>

res/values/arrays.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,13 +241,20 @@
241241
<item>Tentative</item>
242242
</string-array>
243243

244-
<!-- This maps reminder_methods_labels to internal constants. -->
244+
<!-- This maps 'availability' to internal constants. -->
245245
<integer-array name="availability_values" translatable="false">
246246
<item>0</item> <!-- Busy -->
247247
<item>1</item> <!-- Available -->
248248
<item>2</item> <!-- Tentative -->
249249
</integer-array>
250250

251+
<!-- CalendarContract.EventsColumns#STATUS -->
252+
<string-array name="event_status">
253+
<item>Tentative</item> <!-- 0 -->
254+
<item>Confirmed</item> <!-- 1 -->
255+
<item>Cancelled</item> <!-- 2 -->
256+
</string-array>
257+
251258
<string-array name="visibility" translatable="false">
252259
<item>@string/visibility_default</item>
253260
<item>@string/visibility_confidential</item>

res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,8 @@
234234
<string name="edit_event_from_label">From</string>
235235
<!-- Check box label that specifies if this is an all-day event -->
236236
<string name="edit_event_all_day_label">All day</string>
237+
<!-- Spinner that shows the possible event status -->
238+
<string name="edit_event_status_label">Status</string>
237239
<!-- Label for choosing one of the calendars -->
238240
<string name="edit_event_calendar_label">Calendar</string>
239241
<!-- Menu item to show all choices [CHAR LIMIT=22]-->

src/com/android/calendar/CalendarEventModel.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public class CalendarEventModel implements Serializable {
109109
// The model can't be updated with a calendar cursor until it has been
110110
// updated with an event cursor.
111111
public boolean mModelUpdatedWithEventCursor;
112-
public int mAccessLevel = 0;
112+
public int mAccessLevel = Events.ACCESS_DEFAULT;
113113
public ArrayList<ReminderEntry> mReminders;
114114
public ArrayList<ReminderEntry> mDefaultReminders;
115115
// PROVIDER_NOTES Using EditEventHelper the owner should not be included in this
@@ -175,6 +175,8 @@ public CalendarEventModel(Context context, Intent intent) {
175175
mAccessLevel = accessLevel;
176176
}
177177

178+
mEventStatus = intent.getIntExtra(Events.STATUS, Events.STATUS_CONFIRMED);
179+
178180
String rrule = intent.getStringExtra(Events.RRULE);
179181
if (!TextUtils.isEmpty(rrule)) {
180182
mRrule = rrule;
@@ -266,7 +268,7 @@ public void clear() {
266268
mGuestsCanModify = false;
267269
mGuestsCanInviteOthers = false;
268270
mGuestsCanSeeGuests = false;
269-
mAccessLevel = 0;
271+
mAccessLevel = Events.ACCESS_DEFAULT;
270272
mEventStatus = Events.STATUS_CONFIRMED;
271273
mOrganizerCanRespond = false;
272274
mCalendarAccessLevel = Calendars.CAL_ACCESS_CONTRIBUTOR;

src/com/android/calendar/event/EditEventFragment.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -642,8 +642,7 @@ private static class EventBundle implements Serializable {
642642
long end = -1;
643643
}
644644

645-
// TODO turn this into a helper function in EditEventHelper for building the
646-
// model
645+
// TODO turn this into a helper function in EditEventHelper for building the model
647646
private class QueryHandler extends AsyncQueryHandler {
648647
public QueryHandler(ContentResolver cr) {
649648
super(cr);

src/com/android/calendar/event/EditEventHelper.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,11 +321,11 @@ public boolean saveEvent(CalendarEventModel model, CalendarEventModel originalMo
321321
ArrayList<ReminderEntry> reminders = model.mReminders;
322322
int len = reminders.size();
323323
values.put(Events.HAS_ALARM, (len > 0) ? 1 : 0);
324+
values.put(Events.STATUS, model.mEventStatus);
324325

325326
if (uri == null) {
326327
// Add hasAttendeeData for a new event
327328
values.put(Events.HAS_ATTENDEE_DATA, 1);
328-
values.put(Events.STATUS, Events.STATUS_CONFIRMED);
329329
eventIdIndex = ops.size();
330330
ContentProviderOperation.Builder b = ContentProviderOperation.newInsert(
331331
Events.CONTENT_URI).withValues(values);
@@ -1284,8 +1284,7 @@ ContentValues getContentValuesFromModel(CalendarEventModel model) {
12841284
values.put(Events.AVAILABILITY, model.mAvailability);
12851285
values.put(Events.HAS_ATTENDEE_DATA, model.mHasAttendeeData ? 1 : 0);
12861286

1287-
int accessLevel = model.mAccessLevel;
1288-
values.put(Events.ACCESS_LEVEL, accessLevel);
1287+
values.put(Events.ACCESS_LEVEL, model.mAccessLevel);
12891288
values.put(Events.STATUS, model.mEventStatus);
12901289
if (model.isEventColorInitialized()) {
12911290
if (model.getEventColor() == model.getCalendarColor()) {

src/com/android/calendar/event/EditEventView.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa
145145
Spinner mCalendarsSpinner;
146146
Button mRruleButton;
147147
Spinner mAvailabilitySpinner;
148+
Spinner mEventStatusSpinner;
148149
Spinner mAccessLevelSpinner;
149150
RadioGroup mResponseRadioGroup;
150151
TextView mTitleTextView;
@@ -208,6 +209,13 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa
208209
private boolean mAvailabilityExplicitlySet;
209210
private boolean mAllDayChangingAvailability;
210211
private int mAvailabilityCurrentlySelected;
212+
/**
213+
* Contents of the "status" spinner. Labels indices match the three values constants
214+
* {@link Events#STATUS_TENTATIVE}, {@link Events#STATUS_CONFIRMED}, and
215+
* {@link Events#STATUS_CANCELED}.
216+
*/
217+
private ArrayList<String> mEventStatusLabels;
218+
private ArrayAdapter<String> mEventStatusAdapter;
211219
private int mDefaultReminderMinutes;
212220
private boolean mSaveAfterQueryComplete = false;
213221
private TimeZonePickerUtils mTzPickerUtils;
@@ -258,6 +266,7 @@ public void onClick(View v) {
258266
mAllDayCheckBox = (CheckBox) view.findViewById(R.id.is_all_day);
259267
mRruleButton = (Button) view.findViewById(R.id.rrule);
260268
mAvailabilitySpinner = (Spinner) view.findViewById(R.id.availability);
269+
mEventStatusSpinner = (Spinner) view.findViewById(R.id.event_status);
261270
mAccessLevelSpinner = (Spinner) view.findViewById(R.id.visibility);
262271
mCalendarSelectorGroup = view.findViewById(R.id.calendar_selector_group);
263272
mCalendarSelectorWrapper = view.findViewById(R.id.calendar_selector_wrapper);
@@ -309,8 +318,7 @@ public void onItemSelected(AdapterView<?> parent,
309318
mAvailabilityCurrentlySelected = position;
310319
}
311320

312-
if (mAvailabilityCurrentlySelected != position &&
313-
!mAllDayChangingAvailability) {
321+
if (mAvailabilityCurrentlySelected != position && !mAllDayChangingAvailability) {
314322
mAvailabilityExplicitlySet = true;
315323
} else {
316324
mAvailabilityCurrentlySelected = position;
@@ -339,6 +347,7 @@ public void onNothingSelected(AdapterView<?> arg0) {
339347
mViewOnlyList.add(view.findViewById(R.id.timezone_textview_row));
340348

341349
mEditOnlyList.add(view.findViewById(R.id.all_day_row));
350+
mEditOnlyList.add(view.findViewById(R.id.event_status_row));
342351
mEditOnlyList.add(view.findViewById(R.id.availability_row));
343352
mEditOnlyList.add(view.findViewById(R.id.visibility_row));
344353
mEditOnlyList.add(view.findViewById(R.id.from_row));
@@ -691,8 +700,8 @@ private boolean fillModelFromUI() {
691700
mModel.mTimezone = mTimezone;
692701
mModel.mAccessLevel = mAccessLevelSpinner.getSelectedItemPosition();
693702
// TODO set correct availability value
694-
mModel.mAvailability = mAvailabilityValues.get(mAvailabilitySpinner
695-
.getSelectedItemPosition());
703+
mModel.mAvailability = mAvailabilityValues.get(mAvailabilitySpinner.getSelectedItemPosition());
704+
mModel.mEventStatus = mEventStatusSpinner.getSelectedItemPosition();
696705

697706
// rrrule
698707
// If we're making an exception we don't want it to be a repeating
@@ -735,6 +744,16 @@ private void prepareAvailability() {
735744
mAvailabilitySpinner.setAdapter(mAvailabilityAdapter);
736745
}
737746

747+
private void prepareEventStatus() {
748+
Resources r = mActivity.getResources();
749+
mEventStatusLabels = loadStringArray(r, R.array.event_status);
750+
mEventStatusAdapter = new ArrayAdapter<String>(
751+
mActivity, android.R.layout.simple_spinner_item, mEventStatusLabels
752+
);
753+
mEventStatusAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
754+
mEventStatusSpinner.setAdapter(mEventStatusAdapter);
755+
}
756+
738757
/**
739758
* Prepares the reminder UI elements.
740759
* <p>
@@ -887,6 +906,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
887906

888907
prepareReminders();
889908
prepareAvailability();
909+
prepareEventStatus();
890910
prepareAccess();
891911

892912
View reminderAddButton = mView.findViewById(R.id.reminder_add);
@@ -933,6 +953,7 @@ public void onClick(View v) {
933953
if (availIndex != -1) {
934954
mAvailabilitySpinner.setSelection(availIndex);
935955
}
956+
mEventStatusSpinner.setSelection(model.mEventStatus);
936957
mAccessLevelSpinner.setSelection(model.mAccessLevel);
937958

938959
View responseLabel = mView.findViewById(R.id.response_label);

0 commit comments

Comments
 (0)