summaryrefslogtreecommitdiffstats
path: root/src/com/android/calendar/AgendaByDayAdapter.java
diff options
context:
space:
mode:
authorMichael Chan <mchan@android.com>2009-09-08 10:52:58 -0700
committerMichael Chan <mchan@android.com>2009-09-08 17:15:55 -0700
commitdad908b741d7d0a7e4a573030baeb74319ad9411 (patch)
treeedccc6fa8de117868e876244e5a0b4fce74e7ab6 /src/com/android/calendar/AgendaByDayAdapter.java
parent23f400cdb34b08d9003f4a96fca5976ad632e4ce (diff)
downloadandroid_packages_apps_Calendar-dad908b741d7d0a7e4a573030baeb74319ad9411.tar.gz
android_packages_apps_Calendar-dad908b741d7d0a7e4a573030baeb74319ad9411.tar.bz2
android_packages_apps_Calendar-dad908b741d7d0a7e4a573030baeb74319ad9411.zip
b/2102011 Fix the problem where multi-day events may appear multiple times in the Agenda view.
Diffstat (limited to 'src/com/android/calendar/AgendaByDayAdapter.java')
-rw-r--r--src/com/android/calendar/AgendaByDayAdapter.java29
1 files changed, 15 insertions, 14 deletions
diff --git a/src/com/android/calendar/AgendaByDayAdapter.java b/src/com/android/calendar/AgendaByDayAdapter.java
index 5349350b..e7c74a22 100644
--- a/src/com/android/calendar/AgendaByDayAdapter.java
+++ b/src/com/android/calendar/AgendaByDayAdapter.java
@@ -26,6 +26,8 @@ import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
+import com.android.calendar.AgendaWindowAdapter.DayAdapterInfo;
+
import java.util.ArrayList;
import java.util.Formatter;
import java.util.Iterator;
@@ -168,12 +170,13 @@ public class AgendaByDayAdapter extends BaseAdapter {
mRowInfo = null;
}
- public void changeCursor(Cursor cursor) {
- calculateDays(cursor);
- mAgendaAdapter.changeCursor(cursor);
+ public void changeCursor(DayAdapterInfo info) {
+ calculateDays(info);
+ mAgendaAdapter.changeCursor(info.cursor);
}
- public void calculateDays(Cursor cursor) {
+ public void calculateDays(DayAdapterInfo dayAdapterInfo) {
+ Cursor cursor = dayAdapterInfo.cursor;
ArrayList<RowInfo> rowInfo = new ArrayList<RowInfo>();
int prevStartDay = -1;
Time time = new Time();
@@ -185,6 +188,9 @@ public class AgendaByDayAdapter extends BaseAdapter {
boolean allDay = cursor.getInt(AgendaWindowAdapter.INDEX_ALL_DAY) != 0;
int startDay = cursor.getInt(AgendaWindowAdapter.INDEX_START_DAY);
+ // Skip over the days outside of the adapter's range
+ startDay = Math.max(startDay, dayAdapterInfo.start);
+
if (startDay != prevStartDay) {
// Check if we skipped over any empty days
if (prevStartDay == -1) {
@@ -231,6 +237,9 @@ public class AgendaByDayAdapter extends BaseAdapter {
// If this event spans multiple days, then add it to the multipleDay
// list.
int endDay = cursor.getInt(AgendaWindowAdapter.INDEX_END_DAY);
+
+ // Skip over the days outside of the adapter's range
+ endDay = Math.min(endDay, dayAdapterInfo.end);
if (endDay > startDay) {
multipleDayList.add(new MultipleDayInfo(position, endDay));
}
@@ -239,16 +248,8 @@ public class AgendaByDayAdapter extends BaseAdapter {
// There are no more cursor events but we might still have multiple-day
// events left. So create day headers and events for those.
if (prevStartDay > 0) {
- // Get the Julian day for the last day of this month. To do that,
- // we set the date to one less than the first day of the next month,
- // and then normalize.
- time.setJulianDay(prevStartDay);
- time.month += 1; // TODO remove month query reference
- time.monthDay = 0; // monthDay starts with 1, so this is the previous day
- long millis = time.normalize(true /* ignore isDst */);
- int lastDayOfMonth = Time.getJulianDay(millis, time.gmtoff);
-
- for (int currentDay = prevStartDay + 1; currentDay <= lastDayOfMonth; currentDay++) {
+ for (int currentDay = prevStartDay + 1; currentDay <= dayAdapterInfo.end;
+ currentDay++) {
boolean dayHeaderAdded = false;
Iterator<MultipleDayInfo> iter = multipleDayList.iterator();
while (iter.hasNext()) {