Skip to content

Commit fc59923

Browse files
MathieuSchopferjspricke
authored andcommitted
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 e178372 commit fc59923

File tree

7 files changed

+94
-7
lines changed

7 files changed

+94
-7
lines changed

app/src/main/java/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;

app/src/main/java/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()) {

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa
146146
Spinner mCalendarsSpinner;
147147
Button mRruleButton;
148148
Spinner mAvailabilitySpinner;
149+
Spinner mEventStatusSpinner;
149150
Spinner mAccessLevelSpinner;
150151
RadioGroup mResponseRadioGroup;
151152
TextView mTitleTextView;
@@ -207,6 +208,13 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa
207208
private boolean mAvailabilityExplicitlySet;
208209
private boolean mAllDayChangingAvailability;
209210
private int mAvailabilityCurrentlySelected;
211+
/**
212+
* Contents of the "status" spinner. Labels indices match the three values constants
213+
* {@link Events#STATUS_TENTATIVE}, {@link Events#STATUS_CONFIRMED}, and
214+
* {@link Events#STATUS_CANCELED}.
215+
*/
216+
private ArrayList<String> mEventStatusLabels;
217+
private ArrayAdapter<String> mEventStatusAdapter;
210218
private int mDefaultReminderMinutes;
211219
private boolean mSaveAfterQueryComplete = false;
212220
private TimeZonePickerUtils mTzPickerUtils;
@@ -256,6 +264,7 @@ public void onClick(View v) {
256264
mAllDayCheckBox = view.findViewById(R.id.is_all_day);
257265
mRruleButton = (Button) view.findViewById(R.id.rrule);
258266
mAvailabilitySpinner = (Spinner) view.findViewById(R.id.availability);
267+
mEventStatusSpinner = (Spinner) view.findViewById(R.id.event_status);
259268
mAccessLevelSpinner = (Spinner) view.findViewById(R.id.visibility);
260269
mCalendarSelectorGroup = view.findViewById(R.id.calendar_selector_group);
261270
mCalendarSelectorGroupBackground = view.findViewById(R.id.calendar_selector_group_background);
@@ -683,6 +692,7 @@ private boolean fillModelFromUI() {
683692
// TODO set correct availability value
684693
mModel.mAvailability = mAvailabilityValues.get(mAvailabilitySpinner
685694
.getSelectedItemPosition());
695+
mModel.mEventStatus = mEventStatusSpinner.getSelectedItemPosition();
686696

687697
// rrrule
688698
// If we're making an exception we don't want it to be a repeating
@@ -725,6 +735,16 @@ private void prepareAvailability() {
725735
mAvailabilitySpinner.setAdapter(mAvailabilityAdapter);
726736
}
727737

738+
private void prepareEventStatus() {
739+
Resources r = mActivity.getResources();
740+
mEventStatusLabels = loadStringArray(r, R.array.event_status);
741+
mEventStatusAdapter = new ArrayAdapter<String>(
742+
mActivity, android.R.layout.simple_spinner_item, mEventStatusLabels
743+
);
744+
mEventStatusAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
745+
mEventStatusSpinner.setAdapter(mEventStatusAdapter);
746+
}
747+
728748
/**
729749
* Prepares the reminder UI elements.
730750
* <p>
@@ -878,6 +898,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
878898

879899
prepareReminders();
880900
prepareAvailability();
901+
prepareEventStatus();
881902
prepareAccess();
882903

883904
View reminderAddButton = mView.findViewById(R.id.reminder_add);
@@ -924,6 +945,7 @@ public void onClick(View v) {
924945
if (availIndex != -1) {
925946
mAvailabilitySpinner.setSelection(availIndex);
926947
}
948+
mEventStatusSpinner.setSelection(model.mEventStatus);
927949
mAccessLevelSpinner.setSelection(model.mAccessLevel);
928950

929951
View responseLabel = mView.findViewById(R.id.response_label);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:height="24dp"
4+
android:width="24dp"
5+
android:viewportHeight="24.0"
6+
android:viewportWidth="24.0"
7+
android:tint="?attr/colorControlNormal">
8+
<path
9+
android:fillColor="@android:color/white"
10+
android:pathData="M23,11.99l-2.44,-2.79l0.34,-3.69l-3.61,-0.82L15.4,1.5L12,2.96L8.6,1.5L6.71,4.69L3.1,5.5L3.44,9.2L1,11.99l2.44,2.79l-0.34,3.7l3.61,0.82L8.6,22.5l3.4,-1.47l3.4,1.46l1.89,-3.19l3.61,-0.82l-0.34,-3.69L23,11.99zM19.05,13.47l-0.56,0.65l0.08,0.85l0.18,1.95l-1.9,0.43l-0.84,0.19l-0.44,0.74l-0.99,1.68l-1.78,-0.77L12,18.85l-0.79,0.34l-1.78,0.77l-0.99,-1.67l-0.44,-0.74l-0.84,-0.19l-1.9,-0.43l0.18,-1.96l0.08,-0.85l-0.56,-0.65l-1.29,-1.47l1.29,-1.48l0.56,-0.65L5.43,9.01L5.25,7.07l1.9,-0.43l0.84,-0.19l0.44,-0.74l0.99,-1.68l1.78,0.77L12,5.14l0.79,-0.34l1.78,-0.77l0.99,1.68l0.44,0.74l0.84,0.19l1.9,0.43l-0.18,1.95l-0.08,0.85l0.56,0.65l1.29,1.47L19.05,13.47z"/>
11+
<path
12+
android:fillColor="@android:color/white"
13+
android:pathData="M10.09,13.75l-2.32,-2.33l-1.48,1.49l3.8,3.81l7.34,-7.36l-1.48,-1.49z"/>
14+
</vector>

app/src/main/res/layout/edit_event_all.xml

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,6 @@
619619
android:layout_marginTop="20dp"
620620
android:layout_marginBottom="20dp"
621621
android:src="@drawable/ic_outline_lock"
622-
app:layout_constraintBottom_toBottomOf="parent"
623622
app:layout_constraintStart_toStartOf="parent"
624623
app:layout_constraintTop_toBottomOf="@+id/view6" />
625624

@@ -638,6 +637,41 @@
638637
app:layout_constraintStart_toEndOf="@+id/visibility_icon"
639638
app:layout_constraintTop_toTopOf="@+id/visibility_icon" />
640639

640+
<View
641+
android:id="@+id/view8"
642+
style="@style/EditEventSeparator"
643+
app:layout_constraintStart_toStartOf="parent"
644+
app:layout_constraintEnd_toEndOf="parent"
645+
app:layout_constraintTop_toBottomOf="@+id/visibility_icon" />
646+
647+
<!-- Event status -->
648+
<ImageView
649+
android:id="@+id/event_status_icon"
650+
android:layout_width="wrap_content"
651+
android:layout_height="wrap_content"
652+
android:layout_marginStart="12dp"
653+
android:layout_marginTop="20dp"
654+
android:layout_marginBottom="20dp"
655+
android:src="@drawable/ic_outline_verified"
656+
app:layout_constraintStart_toStartOf="parent"
657+
app:layout_constraintTop_toBottomOf="@+id/view8"
658+
app:layout_constraintBottom_toBottomOf="parent" />
659+
660+
<Spinner
661+
android:id="@+id/event_status"
662+
style="@style/TextAppearance.EditEvent"
663+
android:layout_width="0dp"
664+
android:layout_height="wrap_content"
665+
android:layout_marginStart="8dp"
666+
android:layout_marginEnd="32dp"
667+
android:contentDescription="@string/accessibility_event_status"
668+
android:entries="@array/event_status"
669+
android:prompt="@string/edit_event_status_label"
670+
app:layout_constraintStart_toEndOf="@+id/event_status_icon"
671+
app:layout_constraintEnd_toEndOf="parent"
672+
app:layout_constraintTop_toTopOf="@+id/event_status_icon"
673+
app:layout_constraintBottom_toBottomOf="@+id/event_status_icon" />
674+
641675
</androidx.constraintlayout.widget.ConstraintLayout>
642676

643677
<!-- WHEN - Read-only textview version of FROM/TO (below) -->

app/src/main/res/values/arrays.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,20 @@
197197
<item>Tentative</item>
198198
</string-array>
199199

200-
<!-- This maps reminder_methods_labels to internal constants. -->
200+
<!-- This maps 'availability' to internal constants. -->
201201
<integer-array name="availability_values" translatable="false">
202202
<item>0</item> <!-- Busy -->
203203
<item>1</item> <!-- Available -->
204204
<item>2</item> <!-- Tentative -->
205205
</integer-array>
206206

207+
<!-- CalendarContract.EventsColumns#STATUS -->
208+
<string-array name="event_status" translatable="false">
209+
<item>@string/event_status_tentative</item> <!-- 0 -->
210+
<item>@string/event_status_confirmed</item> <!-- 1 -->
211+
<item>@string/event_status_cancelled</item> <!-- 2 -->
212+
</string-array>
213+
207214
<string-array name="visibility" translatable="false">
208215
<item>@string/visibility_default</item>
209216
<item>@string/visibility_confidential</item>

app/src/main/res/values/strings.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,8 @@
226226
<skip/>
227227
<!-- Check box label that specifies if this is an all-day event -->
228228
<string name="edit_event_all_day_label">All day</string>
229+
<!-- Spinner that shows the possible event status -->
230+
<string name="edit_event_status_label">Status</string>
229231
<!-- Label for choosing one of the calendars -->
230232
<string name="edit_event_calendar_label">Calendar</string>
231233
<!-- Menu item to show all choices [CHAR LIMIT=22]-->
@@ -624,6 +626,8 @@
624626
<!-- Mark this event as an "all day event" [CHAR LIMIT = NONE]-->
625627
<string name="accessibility_all_day">All day event</string>
626628
<!-- Refresh the data in the calendar [CHAR LIMIT = NONE]-->
629+
<!-- Set an event status (tentative, confirmed, or cancelled) -->
630+
<string name="accessibility_event_status">Event status</string>
627631

628632
<!-- Choose the type of repetition for the event (daily, weekly, etc.[CHAR LIMIT = NONE]-->
629633
<!-- Set the time for the reminder[CHAR LIMIT = NONE]-->
@@ -723,6 +727,11 @@
723727
<string name="user_rejected_calendar_write_permission">Etar requires calendar read and write permissions to work properly. Please try again.</string>
724728
<string name="calendar_permission_not_granted">Required permissions were denied, enable them from Settings app to edit events</string>
725729

730+
<!-- Strings describing an event status -->
731+
<string name="event_status_tentative">Tentative</string>
732+
<string name="event_status_confirmed">Confirmed</string>
733+
<string name="event_status_cancelled">Cancelled</string>
734+
726735
<!-- Strings to describe visibility array -->
727736
<string name="visibility_default">Default</string>
728737
<string name="visibility_confidential">Confidential</string>

0 commit comments

Comments
 (0)