1981874e61ecf29a96a77601a3172b2503b6537eeErik/* 2981874e61ecf29a96a77601a3172b2503b6537eeErik * Copyright (C) 2010 The Android Open Source Project 3981874e61ecf29a96a77601a3172b2503b6537eeErik * 4981874e61ecf29a96a77601a3172b2503b6537eeErik * Licensed under the Apache License, Version 2.0 (the "License"); 5981874e61ecf29a96a77601a3172b2503b6537eeErik * you may not use this file except in compliance with the License. 6981874e61ecf29a96a77601a3172b2503b6537eeErik * You may obtain a copy of the License at 7981874e61ecf29a96a77601a3172b2503b6537eeErik * 8981874e61ecf29a96a77601a3172b2503b6537eeErik * http://www.apache.org/licenses/LICENSE-2.0 9981874e61ecf29a96a77601a3172b2503b6537eeErik * 10981874e61ecf29a96a77601a3172b2503b6537eeErik * Unless required by applicable law or agreed to in writing, software 11981874e61ecf29a96a77601a3172b2503b6537eeErik * distributed under the License is distributed on an "AS IS" BASIS, 12981874e61ecf29a96a77601a3172b2503b6537eeErik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13981874e61ecf29a96a77601a3172b2503b6537eeErik * See the License for the specific language governing permissions and 14981874e61ecf29a96a77601a3172b2503b6537eeErik * limitations under the License. 15981874e61ecf29a96a77601a3172b2503b6537eeErik */ 16981874e61ecf29a96a77601a3172b2503b6537eeErik 17981874e61ecf29a96a77601a3172b2503b6537eeErikpackage com.android.calendar.month; 18981874e61ecf29a96a77601a3172b2503b6537eeErik 19981874e61ecf29a96a77601a3172b2503b6537eeErikimport com.android.calendar.CalendarController; 20981874e61ecf29a96a77601a3172b2503b6537eeErikimport com.android.calendar.CalendarController.EventType; 21981874e61ecf29a96a77601a3172b2503b6537eeErikimport com.android.calendar.CalendarController.ViewType; 22981874e61ecf29a96a77601a3172b2503b6537eeErikimport com.android.calendar.Event; 236a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelsonimport com.android.calendar.R; 24981874e61ecf29a96a77601a3172b2503b6537eeErikimport com.android.calendar.Utils; 25981874e61ecf29a96a77601a3172b2503b6537eeErik 26981874e61ecf29a96a77601a3172b2503b6537eeErikimport android.content.Context; 273553621c824afe1f3eacbe8555678005ca1264a1Erikimport android.content.res.Configuration; 28981874e61ecf29a96a77601a3172b2503b6537eeErikimport android.text.format.Time; 29981874e61ecf29a96a77601a3172b2503b6537eeErikimport android.util.Log; 303553621c824afe1f3eacbe8555678005ca1264a1Erikimport android.view.View; 313553621c824afe1f3eacbe8555678005ca1264a1Erikimport android.view.ViewGroup; 323553621c824afe1f3eacbe8555678005ca1264a1Erikimport android.widget.AbsListView.LayoutParams; 33981874e61ecf29a96a77601a3172b2503b6537eeErik 34981874e61ecf29a96a77601a3172b2503b6537eeErikimport java.util.ArrayList; 3582b318634af1b6594e60cfd1f2df4d3845f80587Erikimport java.util.HashMap; 36981874e61ecf29a96a77601a3172b2503b6537eeErik 37e21674aefc9755ba519dfc5b3ff4348be4814903Erikpublic class MonthByWeekAdapter extends SimpleWeeksAdapter { 383553621c824afe1f3eacbe8555678005ca1264a1Erik private static final String TAG = "MonthByWeek"; 393553621c824afe1f3eacbe8555678005ca1264a1Erik 403553621c824afe1f3eacbe8555678005ca1264a1Erik public static final String WEEK_PARAMS_IS_MINI = "mini_month"; 4182b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static int DEFAULT_QUERY_DAYS = 7 * 8; // 8 weeks 425b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik private static final long ANIMATE_TODAY_TIMEOUT = 1000; 43981874e61ecf29a96a77601a3172b2503b6537eeErik 4482b318634af1b6594e60cfd1f2df4d3845f80587Erik protected CalendarController mController; 45981874e61ecf29a96a77601a3172b2503b6537eeErik protected String mHomeTimeZone; 4682b318634af1b6594e60cfd1f2df4d3845f80587Erik protected Time mTempTime; 4782b318634af1b6594e60cfd1f2df4d3845f80587Erik protected Time mToday; 4882b318634af1b6594e60cfd1f2df4d3845f80587Erik protected int mFirstJulianDay; 4940bcd101b212c9863c3110c05a487a7ae6ebc3caErik protected int mQueryDays; 503553621c824afe1f3eacbe8555678005ca1264a1Erik protected boolean mIsMiniMonth = true; 513553621c824afe1f3eacbe8555678005ca1264a1Erik protected int mOrientation = Configuration.ORIENTATION_LANDSCAPE; 526a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson private boolean mShowAgendaWithMonth; 53981874e61ecf29a96a77601a3172b2503b6537eeErik 5482b318634af1b6594e60cfd1f2df4d3845f80587Erik protected ArrayList<ArrayList<Event>> mEventDayList = new ArrayList<ArrayList<Event>>(); 55092caec951caa0fabcd51729678e3ddcd6ca2f03RoboErik protected ArrayList<Event> mEvents = null; 56981874e61ecf29a96a77601a3172b2503b6537eeErik 575b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik private boolean mAnimateToday = false; 585b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik private long mAnimateTime = 0; 595b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik 6082b318634af1b6594e60cfd1f2df4d3845f80587Erik public MonthByWeekAdapter(Context context, HashMap<String, Integer> params) { 6182b318634af1b6594e60cfd1f2df4d3845f80587Erik super(context, params); 623553621c824afe1f3eacbe8555678005ca1264a1Erik if (params.containsKey(WEEK_PARAMS_IS_MINI)) { 633553621c824afe1f3eacbe8555678005ca1264a1Erik mIsMiniMonth = params.get(WEEK_PARAMS_IS_MINI) != 0; 643553621c824afe1f3eacbe8555678005ca1264a1Erik } 656a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson mShowAgendaWithMonth = Utils.getConfigBool(context, R.bool.show_agenda_with_month); 66981874e61ecf29a96a77601a3172b2503b6537eeErik } 67981874e61ecf29a96a77601a3172b2503b6537eeErik 685b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik public void animateToday() { 695b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik mAnimateToday = true; 705b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik mAnimateTime = System.currentTimeMillis(); 715b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik } 725b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik 7382b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 7482b318634af1b6594e60cfd1f2df4d3845f80587Erik protected void init() { 7582b318634af1b6594e60cfd1f2df4d3845f80587Erik super.init(); 7682b318634af1b6594e60cfd1f2df4d3845f80587Erik mController = CalendarController.getInstance(mContext); 7782b318634af1b6594e60cfd1f2df4d3845f80587Erik mHomeTimeZone = Utils.getTimeZone(mContext, null); 7882b318634af1b6594e60cfd1f2df4d3845f80587Erik mSelectedDay.switchTimezone(mHomeTimeZone); 79981874e61ecf29a96a77601a3172b2503b6537eeErik mToday = new Time(mHomeTimeZone); 80981874e61ecf29a96a77601a3172b2503b6537eeErik mToday.setToNow(); 81981874e61ecf29a96a77601a3172b2503b6537eeErik mTempTime = new Time(mHomeTimeZone); 82981874e61ecf29a96a77601a3172b2503b6537eeErik } 83981874e61ecf29a96a77601a3172b2503b6537eeErik 8482b318634af1b6594e60cfd1f2df4d3845f80587Erik private void updateTimeZones() { 8582b318634af1b6594e60cfd1f2df4d3845f80587Erik mSelectedDay.timezone = mHomeTimeZone; 8682b318634af1b6594e60cfd1f2df4d3845f80587Erik mSelectedDay.normalize(true); 8782b318634af1b6594e60cfd1f2df4d3845f80587Erik mToday.timezone = mHomeTimeZone; 8882b318634af1b6594e60cfd1f2df4d3845f80587Erik mToday.setToNow(); 8982b318634af1b6594e60cfd1f2df4d3845f80587Erik mTempTime.switchTimezone(mHomeTimeZone); 9082b318634af1b6594e60cfd1f2df4d3845f80587Erik } 91981874e61ecf29a96a77601a3172b2503b6537eeErik 9240bcd101b212c9863c3110c05a487a7ae6ebc3caErik @Override 9340bcd101b212c9863c3110c05a487a7ae6ebc3caErik public void setSelectedDay(Time selectedTime) { 9440bcd101b212c9863c3110c05a487a7ae6ebc3caErik mSelectedDay.set(selectedTime); 9540bcd101b212c9863c3110c05a487a7ae6ebc3caErik long millis = mSelectedDay.normalize(true); 9640bcd101b212c9863c3110c05a487a7ae6ebc3caErik mSelectedWeek = Utils.getWeeksSinceEpochFromJulianDay( 9740bcd101b212c9863c3110c05a487a7ae6ebc3caErik Time.getJulianDay(millis, mSelectedDay.gmtoff), mFirstDayOfWeek); 9840bcd101b212c9863c3110c05a487a7ae6ebc3caErik notifyDataSetChanged(); 9940bcd101b212c9863c3110c05a487a7ae6ebc3caErik } 10040bcd101b212c9863c3110c05a487a7ae6ebc3caErik 10182b318634af1b6594e60cfd1f2df4d3845f80587Erik public void setEvents(int firstJulianDay, int numDays, ArrayList<Event> events) { 1023553621c824afe1f3eacbe8555678005ca1264a1Erik if (mIsMiniMonth) { 1033553621c824afe1f3eacbe8555678005ca1264a1Erik if (Log.isLoggable(TAG, Log.ERROR)) { 1043553621c824afe1f3eacbe8555678005ca1264a1Erik Log.e(TAG, "Attempted to set events for mini view. Events only supported in full" 1053553621c824afe1f3eacbe8555678005ca1264a1Erik + " view."); 1063553621c824afe1f3eacbe8555678005ca1264a1Erik } 1073553621c824afe1f3eacbe8555678005ca1264a1Erik return; 1083553621c824afe1f3eacbe8555678005ca1264a1Erik } 109092caec951caa0fabcd51729678e3ddcd6ca2f03RoboErik mEvents = events; 11082b318634af1b6594e60cfd1f2df4d3845f80587Erik mFirstJulianDay = firstJulianDay; 11140bcd101b212c9863c3110c05a487a7ae6ebc3caErik mQueryDays = numDays; 11240bcd101b212c9863c3110c05a487a7ae6ebc3caErik // Create a new list, this is necessary since the weeks are referencing 11340bcd101b212c9863c3110c05a487a7ae6ebc3caErik // pieces of the old list 11440bcd101b212c9863c3110c05a487a7ae6ebc3caErik ArrayList<ArrayList<Event>> eventDayList = new ArrayList<ArrayList<Event>>(); 11540bcd101b212c9863c3110c05a487a7ae6ebc3caErik for (int i = 0; i < numDays; i++) { 11640bcd101b212c9863c3110c05a487a7ae6ebc3caErik eventDayList.add(new ArrayList<Event>()); 117981874e61ecf29a96a77601a3172b2503b6537eeErik } 118981874e61ecf29a96a77601a3172b2503b6537eeErik 119981874e61ecf29a96a77601a3172b2503b6537eeErik if (events == null || events.size() == 0) { 120981874e61ecf29a96a77601a3172b2503b6537eeErik if(Log.isLoggable(TAG, Log.DEBUG)) { 121981874e61ecf29a96a77601a3172b2503b6537eeErik Log.d(TAG, "No events. Returning early--go schedule something fun."); 122981874e61ecf29a96a77601a3172b2503b6537eeErik } 123b331a8217f09c2d48960bc192fc1cda1e6a35faeErik mEventDayList = eventDayList; 124981874e61ecf29a96a77601a3172b2503b6537eeErik refresh(); 125981874e61ecf29a96a77601a3172b2503b6537eeErik return; 126981874e61ecf29a96a77601a3172b2503b6537eeErik } 127981874e61ecf29a96a77601a3172b2503b6537eeErik 128981874e61ecf29a96a77601a3172b2503b6537eeErik // Compute the new set of days with events 129981874e61ecf29a96a77601a3172b2503b6537eeErik for (Event event : events) { 13082b318634af1b6594e60cfd1f2df4d3845f80587Erik int startDay = event.startDay - mFirstJulianDay; 13182b318634af1b6594e60cfd1f2df4d3845f80587Erik int endDay = event.endDay - mFirstJulianDay + 1; 132981874e61ecf29a96a77601a3172b2503b6537eeErik if (startDay < numDays || endDay >= 0) { 133981874e61ecf29a96a77601a3172b2503b6537eeErik if (startDay < 0) { 134981874e61ecf29a96a77601a3172b2503b6537eeErik startDay = 0; 135981874e61ecf29a96a77601a3172b2503b6537eeErik } 136981874e61ecf29a96a77601a3172b2503b6537eeErik if (startDay > numDays) { 137981874e61ecf29a96a77601a3172b2503b6537eeErik continue; 138981874e61ecf29a96a77601a3172b2503b6537eeErik } 139981874e61ecf29a96a77601a3172b2503b6537eeErik if (endDay < 0) { 140981874e61ecf29a96a77601a3172b2503b6537eeErik continue; 141981874e61ecf29a96a77601a3172b2503b6537eeErik } 142981874e61ecf29a96a77601a3172b2503b6537eeErik if (endDay > numDays) { 143981874e61ecf29a96a77601a3172b2503b6537eeErik endDay = numDays; 144981874e61ecf29a96a77601a3172b2503b6537eeErik } 145981874e61ecf29a96a77601a3172b2503b6537eeErik for (int j = startDay; j < endDay; j++) { 14640bcd101b212c9863c3110c05a487a7ae6ebc3caErik eventDayList.get(j).add(event); 147981874e61ecf29a96a77601a3172b2503b6537eeErik } 148981874e61ecf29a96a77601a3172b2503b6537eeErik } 149981874e61ecf29a96a77601a3172b2503b6537eeErik } 150981874e61ecf29a96a77601a3172b2503b6537eeErik if(Log.isLoggable(TAG, Log.DEBUG)) { 151981874e61ecf29a96a77601a3172b2503b6537eeErik Log.d(TAG, "Processed " + events.size() + " events."); 152981874e61ecf29a96a77601a3172b2503b6537eeErik } 15340bcd101b212c9863c3110c05a487a7ae6ebc3caErik mEventDayList = eventDayList; 154981874e61ecf29a96a77601a3172b2503b6537eeErik refresh(); 155981874e61ecf29a96a77601a3172b2503b6537eeErik } 156981874e61ecf29a96a77601a3172b2503b6537eeErik 1573553621c824afe1f3eacbe8555678005ca1264a1Erik @SuppressWarnings("unchecked") 1583553621c824afe1f3eacbe8555678005ca1264a1Erik @Override 1593553621c824afe1f3eacbe8555678005ca1264a1Erik public View getView(int position, View convertView, ViewGroup parent) { 1603553621c824afe1f3eacbe8555678005ca1264a1Erik if (mIsMiniMonth) { 1613553621c824afe1f3eacbe8555678005ca1264a1Erik return super.getView(position, convertView, parent); 1623553621c824afe1f3eacbe8555678005ca1264a1Erik } 1633553621c824afe1f3eacbe8555678005ca1264a1Erik MonthWeekEventsView v; 1643553621c824afe1f3eacbe8555678005ca1264a1Erik LayoutParams params = new LayoutParams( 1653553621c824afe1f3eacbe8555678005ca1264a1Erik LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 1663553621c824afe1f3eacbe8555678005ca1264a1Erik HashMap<String, Integer> drawingParams = null; 1675b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik boolean isAnimatingToday = false; 1683553621c824afe1f3eacbe8555678005ca1264a1Erik if (convertView != null) { 1693553621c824afe1f3eacbe8555678005ca1264a1Erik v = (MonthWeekEventsView) convertView; 1705b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik // Checking updateToday uses the current params instead of the new 1715b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik // params, so this is assuming the view is relatively stable 1725b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik if (mAnimateToday && v.updateToday(mSelectedDay.timezone)) { 1735b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik long currentTime = System.currentTimeMillis(); 1745b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik // If it's been too long since we tried to start the animation 1755b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik // don't show it. This can happen if the user stops a scroll 1765b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik // before reaching today. 1775b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik if (currentTime - mAnimateTime > ANIMATE_TODAY_TIMEOUT) { 1785b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik mAnimateToday = false; 1795b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik mAnimateTime = 0; 1805b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik } else { 1815b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik isAnimatingToday = true; 1825b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik // There is a bug that causes invalidates to not work some 1835b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik // of the time unless we recreate the view. 1845b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik v = new MonthWeekEventsView(mContext); 1855b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik } 1865b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik } else { 1875b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik drawingParams = (HashMap<String, Integer>) v.getTag(); 1885b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik } 1893553621c824afe1f3eacbe8555678005ca1264a1Erik } else { 1903553621c824afe1f3eacbe8555678005ca1264a1Erik v = new MonthWeekEventsView(mContext); 1913553621c824afe1f3eacbe8555678005ca1264a1Erik } 1923553621c824afe1f3eacbe8555678005ca1264a1Erik if (drawingParams == null) { 1933553621c824afe1f3eacbe8555678005ca1264a1Erik drawingParams = new HashMap<String, Integer>(); 1943553621c824afe1f3eacbe8555678005ca1264a1Erik } 1953553621c824afe1f3eacbe8555678005ca1264a1Erik drawingParams.clear(); 1963553621c824afe1f3eacbe8555678005ca1264a1Erik 1973553621c824afe1f3eacbe8555678005ca1264a1Erik v.setLayoutParams(params); 1983553621c824afe1f3eacbe8555678005ca1264a1Erik v.setClickable(true); 1993553621c824afe1f3eacbe8555678005ca1264a1Erik v.setOnTouchListener(this); 2003553621c824afe1f3eacbe8555678005ca1264a1Erik 2013553621c824afe1f3eacbe8555678005ca1264a1Erik int selectedDay = -1; 2023553621c824afe1f3eacbe8555678005ca1264a1Erik if (mSelectedWeek == position) { 2033553621c824afe1f3eacbe8555678005ca1264a1Erik selectedDay = mSelectedDay.weekDay; 2043553621c824afe1f3eacbe8555678005ca1264a1Erik } 2053553621c824afe1f3eacbe8555678005ca1264a1Erik 206e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_HEIGHT, 2073bff945d29d6ef277391745cd160f3bf16b98905RoboErik (parent.getHeight() + parent.getTop()) / mNumWeeks); 208e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_SELECTED_DAY, selectedDay); 209e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_SHOW_WK_NUM, mShowWeekNumber ? 1 : 0); 210e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_WEEK_START, mFirstDayOfWeek); 211e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_NUM_DAYS, mDaysPerWeek); 212e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_WEEK, position); 213e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_FOCUS_MONTH, mFocusMonth); 2143553621c824afe1f3eacbe8555678005ca1264a1Erik drawingParams.put(MonthWeekEventsView.VIEW_PARAMS_ORIENTATION, mOrientation); 2153553621c824afe1f3eacbe8555678005ca1264a1Erik 2165b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik if (isAnimatingToday) { 2175b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik drawingParams.put(MonthWeekEventsView.VIEW_PARAMS_ANIMATE_TODAY, 1); 2185b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik mAnimateToday = false; 2195b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik } 22040bcd101b212c9863c3110c05a487a7ae6ebc3caErik 2215b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik v.setWeekParams(drawingParams, mSelectedDay.timezone); 2225b872523e28fc778a3fc34e7e9096ca1197c6509RoboErik sendEventsToView(v); 2233553621c824afe1f3eacbe8555678005ca1264a1Erik return v; 2243553621c824afe1f3eacbe8555678005ca1264a1Erik } 2253553621c824afe1f3eacbe8555678005ca1264a1Erik 22640bcd101b212c9863c3110c05a487a7ae6ebc3caErik private void sendEventsToView(MonthWeekEventsView v) { 22740bcd101b212c9863c3110c05a487a7ae6ebc3caErik if (mEventDayList.size() == 0) { 22840bcd101b212c9863c3110c05a487a7ae6ebc3caErik if (Log.isLoggable(TAG, Log.DEBUG)) { 22940bcd101b212c9863c3110c05a487a7ae6ebc3caErik Log.d(TAG, "No events loaded, did not pass any events to view."); 23040bcd101b212c9863c3110c05a487a7ae6ebc3caErik } 231092caec951caa0fabcd51729678e3ddcd6ca2f03RoboErik v.setEvents(null, null); 23240bcd101b212c9863c3110c05a487a7ae6ebc3caErik return; 23340bcd101b212c9863c3110c05a487a7ae6ebc3caErik } 23440bcd101b212c9863c3110c05a487a7ae6ebc3caErik int viewJulianDay = v.getFirstJulianDay(); 23540bcd101b212c9863c3110c05a487a7ae6ebc3caErik int start = viewJulianDay - mFirstJulianDay; 23640bcd101b212c9863c3110c05a487a7ae6ebc3caErik int end = start + v.mNumDays; 23740bcd101b212c9863c3110c05a487a7ae6ebc3caErik if (start < 0 || end > mEventDayList.size()) { 23840bcd101b212c9863c3110c05a487a7ae6ebc3caErik if (Log.isLoggable(TAG, Log.DEBUG)) { 23940bcd101b212c9863c3110c05a487a7ae6ebc3caErik Log.d(TAG, "Week is outside range of loaded events. viewStart: " + viewJulianDay 24040bcd101b212c9863c3110c05a487a7ae6ebc3caErik + " eventsStart: " + mFirstJulianDay); 24140bcd101b212c9863c3110c05a487a7ae6ebc3caErik } 242092caec951caa0fabcd51729678e3ddcd6ca2f03RoboErik v.setEvents(null, null); 24340bcd101b212c9863c3110c05a487a7ae6ebc3caErik return; 24440bcd101b212c9863c3110c05a487a7ae6ebc3caErik } 245092caec951caa0fabcd51729678e3ddcd6ca2f03RoboErik v.setEvents(mEventDayList.subList(start, end), mEvents); 24640bcd101b212c9863c3110c05a487a7ae6ebc3caErik } 24740bcd101b212c9863c3110c05a487a7ae6ebc3caErik 24882b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 24982b318634af1b6594e60cfd1f2df4d3845f80587Erik protected void refresh() { 250981874e61ecf29a96a77601a3172b2503b6537eeErik mFirstDayOfWeek = Utils.getFirstDayOfWeek(mContext); 251981874e61ecf29a96a77601a3172b2503b6537eeErik mShowWeekNumber = Utils.getShowWeekNumber(mContext); 252981874e61ecf29a96a77601a3172b2503b6537eeErik mHomeTimeZone = Utils.getTimeZone(mContext, null); 2533553621c824afe1f3eacbe8555678005ca1264a1Erik mOrientation = mContext.getResources().getConfiguration().orientation; 25482b318634af1b6594e60cfd1f2df4d3845f80587Erik updateTimeZones(); 255e566836781f2a653624dceee3399bef25a0ea119Erik notifyDataSetChanged(); 256981874e61ecf29a96a77601a3172b2503b6537eeErik } 257981874e61ecf29a96a77601a3172b2503b6537eeErik 258981874e61ecf29a96a77601a3172b2503b6537eeErik @Override 25982b318634af1b6594e60cfd1f2df4d3845f80587Erik protected void onDayTapped(Time day) { 26040bcd101b212c9863c3110c05a487a7ae6ebc3caErik day.timezone = mHomeTimeZone; 26140bcd101b212c9863c3110c05a487a7ae6ebc3caErik Time currTime = new Time(mHomeTimeZone); 26240bcd101b212c9863c3110c05a487a7ae6ebc3caErik currTime.set(mController.getTime()); 26340bcd101b212c9863c3110c05a487a7ae6ebc3caErik day.hour = currTime.hour; 26440bcd101b212c9863c3110c05a487a7ae6ebc3caErik day.minute = currTime.minute; 26590b01744006009ed5ca7205099523f83ced380f5Michael Chan day.allDay = false; 26640bcd101b212c9863c3110c05a487a7ae6ebc3caErik day.normalize(true); 2676a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson if (mShowAgendaWithMonth && !mIsMiniMonth) { 2686a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson // If agenda view is visible with month view , refresh the views 2696a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson // with the selected day's info 2706a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson mController.sendEvent(mContext, EventType.GO_TO, day, day, -1, 2716a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson ViewType.CURRENT, CalendarController.EXTRA_GOTO_DATE, null, null); 2726a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson } else { 2736a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson // Else , switch to the detailed view 2746a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson mController.sendEvent(mContext, EventType.GO_TO, day, day, -1, 2756a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson mIsMiniMonth ? ViewType.CURRENT : ViewType.DETAIL, 276fb0ec227f0d4b3108438c88a6b6d234f5e40fb5cMichael Chan CalendarController.EXTRA_GOTO_DATE 277fb0ec227f0d4b3108438c88a6b6d234f5e40fb5cMichael Chan | CalendarController.EXTRA_GOTO_BACK_TO_PREVIOUS, null, null); 2786a18258975212568af7f2ce94f4044d5865a39d9Isaac Katzenelson } 279981874e61ecf29a96a77601a3172b2503b6537eeErik } 280981874e61ecf29a96a77601a3172b2503b6537eeErik 281981874e61ecf29a96a77601a3172b2503b6537eeErik} 282