Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b1119b1 authored by Michael Chan's avatar Michael Chan
Browse files

Fixed end date in multiday events where it be off by a day

Bug: 5819365
Change-Id: I0b7ee7a5c7c73261b2cf38bd1b6d80a74647c8d6
parent 4afa21f9
Loading
Loading
Loading
Loading
+7 −4
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.calendar;


import static android.provider.CalendarContract.EXTRA_EVENT_BEGIN_TIME;
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_END_TIME;
import static android.provider.CalendarContract.EXTRA_EVENT_ALL_DAY;
import static com.android.calendar.CalendarController.EVENT_EDIT_ON_LAUNCH;
import static com.android.calendar.CalendarController.EVENT_EDIT_ON_LAUNCH;


import com.android.calendar.CalendarController.EventInfo;
import com.android.calendar.CalendarController.EventInfo;
@@ -245,6 +246,7 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange


    private long mStartMillis;
    private long mStartMillis;
    private long mEndMillis;
    private long mEndMillis;
    private boolean mAllDay;


    private boolean mHasAttendeeData;
    private boolean mHasAttendeeData;
    private boolean mIsOrganizer;
    private boolean mIsOrganizer;
@@ -814,6 +816,7 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange
                Intent intent = new Intent(Intent.ACTION_EDIT, uri);
                Intent intent = new Intent(Intent.ACTION_EDIT, uri);
                intent.putExtra(EXTRA_EVENT_BEGIN_TIME, mStartMillis);
                intent.putExtra(EXTRA_EVENT_BEGIN_TIME, mStartMillis);
                intent.putExtra(EXTRA_EVENT_END_TIME, mEndMillis);
                intent.putExtra(EXTRA_EVENT_END_TIME, mEndMillis);
                intent.putExtra(EXTRA_EVENT_ALL_DAY, mAllDay);
                intent.setClass(mActivity, EditEventActivity.class);
                intent.setClass(mActivity, EditEventActivity.class);
                intent.putExtra(EVENT_EDIT_ON_LAUNCH, true);
                intent.putExtra(EVENT_EDIT_ON_LAUNCH, true);
                startActivity(intent);
                startActivity(intent);
@@ -1005,7 +1008,7 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange
            eventName = getActivity().getString(R.string.no_title_label);
            eventName = getActivity().getString(R.string.no_title_label);
        }
        }


        boolean allDay = mEventCursor.getInt(EVENT_INDEX_ALL_DAY) != 0;
        mAllDay = mEventCursor.getInt(EVENT_INDEX_ALL_DAY) != 0;
        String location = mEventCursor.getString(EVENT_INDEX_EVENT_LOCATION);
        String location = mEventCursor.getString(EVENT_INDEX_EVENT_LOCATION);
        String description = mEventCursor.getString(EVENT_INDEX_DESCRIPTION);
        String description = mEventCursor.getString(EVENT_INDEX_DESCRIPTION);
        String rRule = mEventCursor.getString(EVENT_INDEX_RRULE);
        String rRule = mEventCursor.getString(EVENT_INDEX_RRULE);
@@ -1036,7 +1039,7 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange
            EventRecurrence eventRecurrence = new EventRecurrence();
            EventRecurrence eventRecurrence = new EventRecurrence();
            eventRecurrence.parse(rRule);
            eventRecurrence.parse(rRule);
            Time date = new Time(Utils.getTimeZone(getActivity(), mTZUpdater));
            Time date = new Time(Utils.getTimeZone(getActivity(), mTZUpdater));
            if (allDay) {
            if (mAllDay) {
                date.timezone = Time.TIMEZONE_UTC;
                date.timezone = Time.TIMEZONE_UTC;
            }
            }
            date.set(mStartMillis);
            date.set(mStartMillis);
@@ -1045,7 +1048,7 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange
                    getActivity().getResources(), eventRecurrence);
                    getActivity().getResources(), eventRecurrence);
        }
        }
        // If an all day event , show the date without the time
        // If an all day event , show the date without the time
        if (allDay) {
        if (mAllDay) {
            Formatter f = new Formatter(new StringBuilder(50), Locale.getDefault());
            Formatter f = new Formatter(new StringBuilder(50), Locale.getDefault());
            whenDate = DateUtils.formatDateRange(getActivity(), f, mStartMillis, mEndMillis,
            whenDate = DateUtils.formatDateRange(getActivity(), f, mStartMillis, mEndMillis,
                    flagsDate, Time.TIMEZONE_UTC).toString();
                    flagsDate, Time.TIMEZONE_UTC).toString();
@@ -1073,7 +1076,7 @@ public class EventInfoFragment extends DialogFragment implements OnCheckedChange
                String displayName;
                String displayName;
                // Figure out if this is in DST
                // Figure out if this is in DST
                Time date = new Time(Utils.getTimeZone(getActivity(), mTZUpdater));
                Time date = new Time(Utils.getTimeZone(getActivity(), mTZUpdater));
                if (allDay) {
                if (mAllDay) {
                    date.timezone = Time.TIMEZONE_UTC;
                    date.timezone = Time.TIMEZONE_UTC;
                }
                }
                date.set(mStartMillis);
                date.set(mStartMillis);
+8 −2
Original line number Original line Diff line number Diff line
@@ -202,9 +202,15 @@ public class AgendaListView extends ListView implements OnItemClickListener {


            if (event != null && (oldInstanceId != mWindowAdapter.getSelectedInstanceId() ||
            if (event != null && (oldInstanceId != mWindowAdapter.getSelectedInstanceId() ||
                    !mShowEventDetailsWithAgenda)) {
                    !mShowEventDetailsWithAgenda)) {
                long startTime = event.begin;
                long endTime = event.end;
                if (event.allDay) {
                    startTime = Utils.convertAlldayLocalToUTC(mTime, startTime, mTimeZone);
                    endTime = Utils.convertAlldayLocalToUTC(mTime, endTime, mTimeZone);
                }
                CalendarController controller = CalendarController.getInstance(mContext);
                CalendarController controller = CalendarController.getInstance(mContext);
                controller.sendEventRelatedEvent(this, EventType.VIEW_EVENT, event.id, event.begin,
                controller.sendEventRelatedEvent(this, EventType.VIEW_EVENT, event.id, startTime,
                        event.end, 0, 0, controller.getTime());
                        endTime, 0, 0, controller.getTime());
            }
            }
        }
        }
    }
    }
+4 −4
Original line number Original line Diff line number Diff line
@@ -42,7 +42,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.TextView;
@@ -279,6 +278,7 @@ public class AgendaWindowAdapter extends BaseAdapter
        long end;
        long end;
        long id;
        long id;
        int startDay;
        int startDay;
        boolean allDay;
    }
    }


    static class DayAdapterInfo {
    static class DayAdapterInfo {
@@ -598,8 +598,8 @@ public class AgendaWindowAdapter extends BaseAdapter
        event.end = cursor.getLong(AgendaWindowAdapter.INDEX_END);
        event.end = cursor.getLong(AgendaWindowAdapter.INDEX_END);
        event.startDay = cursor.getInt(AgendaWindowAdapter.INDEX_START_DAY);
        event.startDay = cursor.getInt(AgendaWindowAdapter.INDEX_START_DAY);


        boolean allDay = cursor.getInt(AgendaWindowAdapter.INDEX_ALL_DAY) != 0;
        event.allDay = cursor.getInt(AgendaWindowAdapter.INDEX_ALL_DAY) != 0;
        if (allDay) { // UTC
        if (event.allDay) { // UTC
            Time time = new Time(mTimeZone);
            Time time = new Time(mTimeZone);
            time.setJulianDay(Time.getJulianDay(event.begin, 0));
            time.setJulianDay(Time.getJulianDay(event.begin, 0));
            event.begin = time.toMillis(false /* use isDst */);
            event.begin = time.toMillis(false /* use isDst */);
@@ -613,7 +613,7 @@ public class AgendaWindowAdapter extends BaseAdapter
        }
        }


        if (!isDayHeader) {
        if (!isDayHeader) {
            if (allDay) {
            if (event.allDay) {
                Time time = new Time(mTimeZone);
                Time time = new Time(mTimeZone);
                time.setJulianDay(Time.getJulianDay(event.end, 0));
                time.setJulianDay(Time.getJulianDay(event.end, 0));
                event.end = time.toMillis(false /* use isDst */);
                event.end = time.toMillis(false /* use isDst */);
+9 −1
Original line number Original line Diff line number Diff line
@@ -108,19 +108,27 @@ public class EditEventActivity extends AbstractCalendarActivity {
            eventId = icicle.getLong(BUNDLE_KEY_EVENT_ID);
            eventId = icicle.getLong(BUNDLE_KEY_EVENT_ID);
        }
        }


        boolean allDay = intent.getBooleanExtra(EXTRA_EVENT_ALL_DAY, false);

        long begin = intent.getLongExtra(EXTRA_EVENT_BEGIN_TIME, -1);
        long begin = intent.getLongExtra(EXTRA_EVENT_BEGIN_TIME, -1);
        long end = intent.getLongExtra(EXTRA_EVENT_END_TIME, -1);
        long end = intent.getLongExtra(EXTRA_EVENT_END_TIME, -1);
        if (end != -1) {
        if (end != -1) {
            info.endTime = new Time();
            info.endTime = new Time();
            if (allDay) {
                info.endTime.timezone = Time.TIMEZONE_UTC;
            }
            info.endTime.set(end);
            info.endTime.set(end);
        }
        }
        if (begin != -1) {
        if (begin != -1) {
            info.startTime = new Time();
            info.startTime = new Time();
            if (allDay) {
                info.startTime.timezone = Time.TIMEZONE_UTC;
            }
            info.startTime.set(begin);
            info.startTime.set(begin);
        }
        }
        info.id = eventId;
        info.id = eventId;


        if (intent.getBooleanExtra(EXTRA_EVENT_ALL_DAY, false)) {
        if (allDay) {
            info.extraLong = CalendarController.EXTRA_CREATE_ALL_DAY;
            info.extraLong = CalendarController.EXTRA_CREATE_ALL_DAY;
        } else {
        } else {
            info.extraLong = 0;
            info.extraLong = 0;
+11 −2
Original line number Original line Diff line number Diff line
@@ -190,6 +190,7 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa
    private Time mStartTime;
    private Time mStartTime;
    private Time mEndTime;
    private Time mEndTime;
    private String mTimezone;
    private String mTimezone;
    private boolean mAllDay = false;
    private int mModification = EditEventHelper.MODIFY_UNINITIALIZED;
    private int mModification = EditEventHelper.MODIFY_UNINITIALIZED;


    private EventRecurrence mEventRecurrence = new EventRecurrence();
    private EventRecurrence mEventRecurrence = new EventRecurrence();
@@ -1051,6 +1052,7 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa
        });
        });


        boolean prevAllDay = mAllDayCheckBox.isChecked();
        boolean prevAllDay = mAllDayCheckBox.isChecked();
        mAllDay = false; // default to false. Let setAllDayViewsVisibility update it as needed
        if (model.mAllDay) {
        if (model.mAllDay) {
            mAllDayCheckBox.setChecked(true);
            mAllDayCheckBox.setChecked(true);
            // put things back in local time for all day events
            // put things back in local time for all day events
@@ -1563,7 +1565,10 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa
    protected void setAllDayViewsVisibility(boolean isChecked) {
    protected void setAllDayViewsVisibility(boolean isChecked) {
        if (isChecked) {
        if (isChecked) {
            if (mEndTime.hour == 0 && mEndTime.minute == 0) {
            if (mEndTime.hour == 0 && mEndTime.minute == 0) {
                if (mAllDay != isChecked) {
                    mEndTime.monthDay--;
                    mEndTime.monthDay--;
                }

                long endMillis = mEndTime.normalize(true);
                long endMillis = mEndTime.normalize(true);


                // Do not allow an event to have an end time
                // Do not allow an event to have an end time
@@ -1582,7 +1587,10 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa
            mTimezoneRow.setVisibility(View.GONE);
            mTimezoneRow.setVisibility(View.GONE);
        } else {
        } else {
            if (mEndTime.hour == 0 && mEndTime.minute == 0) {
            if (mEndTime.hour == 0 && mEndTime.minute == 0) {
                if (mAllDay != isChecked) {
                    mEndTime.monthDay++;
                    mEndTime.monthDay++;
                }

                long endMillis = mEndTime.normalize(true);
                long endMillis = mEndTime.normalize(true);
                setDate(mEndDateButton, endMillis);
                setDate(mEndDateButton, endMillis);
                setTime(mEndTimeButton, endMillis);
                setTime(mEndTimeButton, endMillis);
@@ -1591,6 +1599,7 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa
            mEndTimeButton.setVisibility(View.VISIBLE);
            mEndTimeButton.setVisibility(View.VISIBLE);
            mTimezoneRow.setVisibility(View.VISIBLE);
            mTimezoneRow.setVisibility(View.VISIBLE);
        }
        }
        mAllDay = isChecked;
        updateHomeTime();
        updateHomeTime();
    }
    }