SimpleWeeksAdapter.java revision 636269c7220a2b12e090cab43a91eb34922eb61f
182b318634af1b6594e60cfd1f2df4d3845f80587Erik/* 282b318634af1b6594e60cfd1f2df4d3845f80587Erik * Copyright (C) 2010 The Android Open Source Project 382b318634af1b6594e60cfd1f2df4d3845f80587Erik * 482b318634af1b6594e60cfd1f2df4d3845f80587Erik * Licensed under the Apache License, Version 2.0 (the "License"); 582b318634af1b6594e60cfd1f2df4d3845f80587Erik * you may not use this file except in compliance with the License. 682b318634af1b6594e60cfd1f2df4d3845f80587Erik * You may obtain a copy of the License at 782b318634af1b6594e60cfd1f2df4d3845f80587Erik * 882b318634af1b6594e60cfd1f2df4d3845f80587Erik * http://www.apache.org/licenses/LICENSE-2.0 982b318634af1b6594e60cfd1f2df4d3845f80587Erik * 1082b318634af1b6594e60cfd1f2df4d3845f80587Erik * Unless required by applicable law or agreed to in writing, software 1182b318634af1b6594e60cfd1f2df4d3845f80587Erik * distributed under the License is distributed on an "AS IS" BASIS, 1282b318634af1b6594e60cfd1f2df4d3845f80587Erik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1382b318634af1b6594e60cfd1f2df4d3845f80587Erik * See the License for the specific language governing permissions and 1482b318634af1b6594e60cfd1f2df4d3845f80587Erik * limitations under the License. 1582b318634af1b6594e60cfd1f2df4d3845f80587Erik */ 1682b318634af1b6594e60cfd1f2df4d3845f80587Erik 1782b318634af1b6594e60cfd1f2df4d3845f80587Erikpackage com.android.calendar.month; 1882b318634af1b6594e60cfd1f2df4d3845f80587Erik 1982b318634af1b6594e60cfd1f2df4d3845f80587Erik// TODO Remove calendar imports when the required methods have been 2082b318634af1b6594e60cfd1f2df4d3845f80587Erik// refactored into the public api 2182b318634af1b6594e60cfd1f2df4d3845f80587Erikimport com.android.calendar.CalendarController; 2282b318634af1b6594e60cfd1f2df4d3845f80587Erikimport com.android.calendar.Utils; 2382b318634af1b6594e60cfd1f2df4d3845f80587Erik 2482b318634af1b6594e60cfd1f2df4d3845f80587Erikimport android.content.Context; 2582b318634af1b6594e60cfd1f2df4d3845f80587Erikimport android.text.format.Time; 2682b318634af1b6594e60cfd1f2df4d3845f80587Erikimport android.util.Log; 2782b318634af1b6594e60cfd1f2df4d3845f80587Erikimport android.view.GestureDetector; 2882b318634af1b6594e60cfd1f2df4d3845f80587Erikimport android.view.MotionEvent; 2982b318634af1b6594e60cfd1f2df4d3845f80587Erikimport android.view.View; 3082b318634af1b6594e60cfd1f2df4d3845f80587Erikimport android.view.View.OnTouchListener; 3182b318634af1b6594e60cfd1f2df4d3845f80587Erikimport android.view.ViewGroup; 3282b318634af1b6594e60cfd1f2df4d3845f80587Erikimport android.widget.AbsListView.LayoutParams; 3382b318634af1b6594e60cfd1f2df4d3845f80587Erikimport android.widget.BaseAdapter; 3482b318634af1b6594e60cfd1f2df4d3845f80587Erik 35636269c7220a2b12e090cab43a91eb34922eb61fAndy McFaddenimport java.util.Calendar; 3682b318634af1b6594e60cfd1f2df4d3845f80587Erikimport java.util.HashMap; 37e566836781f2a653624dceee3399bef25a0ea119Erikimport java.util.Locale; 38e566836781f2a653624dceee3399bef25a0ea119Erik 39e566836781f2a653624dceee3399bef25a0ea119Erikimport libcore.icu.LocaleData; 4082b318634af1b6594e60cfd1f2df4d3845f80587Erik 41ca56a02bc75ca52eca0c2670be0ee4146f292624Erik/** 42ca56a02bc75ca52eca0c2670be0ee4146f292624Erik * <p> 43ca56a02bc75ca52eca0c2670be0ee4146f292624Erik * This is a specialized adapter for creating a list of weeks with selectable 44ca56a02bc75ca52eca0c2670be0ee4146f292624Erik * days. It can be configured to display the week number, start the week on a 45ca56a02bc75ca52eca0c2670be0ee4146f292624Erik * given day, show a reduced number of days, or display an arbitrary number of 46e21674aefc9755ba519dfc5b3ff4348be4814903Erik * weeks at a time. See {@link SimpleDayPickerFragment} for usage. 47ca56a02bc75ca52eca0c2670be0ee4146f292624Erik * </p> 48ca56a02bc75ca52eca0c2670be0ee4146f292624Erik */ 49e21674aefc9755ba519dfc5b3ff4348be4814903Erikpublic class SimpleWeeksAdapter extends BaseAdapter implements OnTouchListener { 5082b318634af1b6594e60cfd1f2df4d3845f80587Erik 513553621c824afe1f3eacbe8555678005ca1264a1Erik private static final String TAG = "MonthByWeek"; 5282b318634af1b6594e60cfd1f2df4d3845f80587Erik 53e566836781f2a653624dceee3399bef25a0ea119Erik /** 54e566836781f2a653624dceee3399bef25a0ea119Erik * The number of weeks to display at a time. 55e566836781f2a653624dceee3399bef25a0ea119Erik */ 5682b318634af1b6594e60cfd1f2df4d3845f80587Erik public static final String WEEK_PARAMS_NUM_WEEKS = "num_weeks"; 57e566836781f2a653624dceee3399bef25a0ea119Erik /** 58e566836781f2a653624dceee3399bef25a0ea119Erik * Which month should be in focus currently. 59e566836781f2a653624dceee3399bef25a0ea119Erik */ 6082b318634af1b6594e60cfd1f2df4d3845f80587Erik public static final String WEEK_PARAMS_FOCUS_MONTH = "focus_month"; 61e566836781f2a653624dceee3399bef25a0ea119Erik /** 62e566836781f2a653624dceee3399bef25a0ea119Erik * Whether the week number should be shown. Non-zero to show them. 63e566836781f2a653624dceee3399bef25a0ea119Erik */ 6482b318634af1b6594e60cfd1f2df4d3845f80587Erik public static final String WEEK_PARAMS_SHOW_WEEK = "week_numbers"; 65e566836781f2a653624dceee3399bef25a0ea119Erik /** 66e566836781f2a653624dceee3399bef25a0ea119Erik * Which day the week should start on. {@link Time#SUNDAY} through 67e566836781f2a653624dceee3399bef25a0ea119Erik * {@link Time#SATURDAY}. 68e566836781f2a653624dceee3399bef25a0ea119Erik */ 6982b318634af1b6594e60cfd1f2df4d3845f80587Erik public static final String WEEK_PARAMS_WEEK_START = "week_start"; 70e566836781f2a653624dceee3399bef25a0ea119Erik /** 71e566836781f2a653624dceee3399bef25a0ea119Erik * The Julian day to highlight as selected. 72e566836781f2a653624dceee3399bef25a0ea119Erik */ 73e566836781f2a653624dceee3399bef25a0ea119Erik public static final String WEEK_PARAMS_JULIAN_DAY = "selected_day"; 74e566836781f2a653624dceee3399bef25a0ea119Erik /** 75e566836781f2a653624dceee3399bef25a0ea119Erik * How many days of the week to display [1-7]. 76e566836781f2a653624dceee3399bef25a0ea119Erik */ 7791b01ed605e36fc5a7a924c226597a62c789b50dErik public static final String WEEK_PARAMS_DAYS_PER_WEEK = "days_per_week"; 7882b318634af1b6594e60cfd1f2df4d3845f80587Erik 7982b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static final int WEEK_COUNT = CalendarController.MAX_CALENDAR_WEEK 8082b318634af1b6594e60cfd1f2df4d3845f80587Erik - CalendarController.MIN_CALENDAR_WEEK; 8182b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static int DEFAULT_NUM_WEEKS = 6; 8282b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static int DEFAULT_MONTH_FOCUS = 0; 8382b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static int DEFAULT_DAYS_PER_WEEK = 7; 8482b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static int DEFAULT_WEEK_HEIGHT = 32; 8582b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static int WEEK_7_OVERHANG_HEIGHT = 7; 86e566836781f2a653624dceee3399bef25a0ea119Erik 8782b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static float mScale = 0; 8882b318634af1b6594e60cfd1f2df4d3845f80587Erik protected Context mContext; 89e566836781f2a653624dceee3399bef25a0ea119Erik // The day to highlight as selected 9082b318634af1b6594e60cfd1f2df4d3845f80587Erik protected Time mSelectedDay; 91e566836781f2a653624dceee3399bef25a0ea119Erik // The week since 1970 that the selected day is in 9282b318634af1b6594e60cfd1f2df4d3845f80587Erik protected int mSelectedWeek; 93636269c7220a2b12e090cab43a91eb34922eb61fAndy McFadden // When the week starts; numbered like Time.<WEEKDAY> (e.g. SUNDAY=0). 94636269c7220a2b12e090cab43a91eb34922eb61fAndy McFadden protected int mFirstDayOfWeek; 9582b318634af1b6594e60cfd1f2df4d3845f80587Erik protected boolean mShowWeekNumber = false; 9682b318634af1b6594e60cfd1f2df4d3845f80587Erik protected GestureDetector mGestureDetector; 973553621c824afe1f3eacbe8555678005ca1264a1Erik protected int mNumWeeks = DEFAULT_NUM_WEEKS; 9891b01ed605e36fc5a7a924c226597a62c789b50dErik protected int mDaysPerWeek = DEFAULT_DAYS_PER_WEEK; 993553621c824afe1f3eacbe8555678005ca1264a1Erik protected int mFocusMonth = DEFAULT_MONTH_FOCUS; 10082b318634af1b6594e60cfd1f2df4d3845f80587Erik 101e21674aefc9755ba519dfc5b3ff4348be4814903Erik public SimpleWeeksAdapter(Context context, HashMap<String, Integer> params) { 10282b318634af1b6594e60cfd1f2df4d3845f80587Erik mContext = context; 10382b318634af1b6594e60cfd1f2df4d3845f80587Erik 104636269c7220a2b12e090cab43a91eb34922eb61fAndy McFadden // Get default week start based on locale, subtracting one for use with android Time. 105636269c7220a2b12e090cab43a91eb34922eb61fAndy McFadden Calendar cal = Calendar.getInstance(Locale.getDefault()); 106636269c7220a2b12e090cab43a91eb34922eb61fAndy McFadden mFirstDayOfWeek = cal.getFirstDayOfWeek() - 1; 10782b318634af1b6594e60cfd1f2df4d3845f80587Erik 10882b318634af1b6594e60cfd1f2df4d3845f80587Erik if (mScale == 0) { 10982b318634af1b6594e60cfd1f2df4d3845f80587Erik mScale = context.getResources().getDisplayMetrics().density; 11082b318634af1b6594e60cfd1f2df4d3845f80587Erik if (mScale != 1) { 11182b318634af1b6594e60cfd1f2df4d3845f80587Erik WEEK_7_OVERHANG_HEIGHT *= mScale; 11282b318634af1b6594e60cfd1f2df4d3845f80587Erik } 11382b318634af1b6594e60cfd1f2df4d3845f80587Erik } 11482b318634af1b6594e60cfd1f2df4d3845f80587Erik init(); 11582b318634af1b6594e60cfd1f2df4d3845f80587Erik updateParams(params); 11682b318634af1b6594e60cfd1f2df4d3845f80587Erik } 11782b318634af1b6594e60cfd1f2df4d3845f80587Erik 118e566836781f2a653624dceee3399bef25a0ea119Erik /** 119e566836781f2a653624dceee3399bef25a0ea119Erik * Set up the gesture detector and selected time 120e566836781f2a653624dceee3399bef25a0ea119Erik */ 12182b318634af1b6594e60cfd1f2df4d3845f80587Erik protected void init() { 12282b318634af1b6594e60cfd1f2df4d3845f80587Erik mGestureDetector = new GestureDetector(mContext, new CalendarGestureListener()); 12382b318634af1b6594e60cfd1f2df4d3845f80587Erik mSelectedDay = new Time(); 12482b318634af1b6594e60cfd1f2df4d3845f80587Erik mSelectedDay.setToNow(); 12582b318634af1b6594e60cfd1f2df4d3845f80587Erik } 12682b318634af1b6594e60cfd1f2df4d3845f80587Erik 127e566836781f2a653624dceee3399bef25a0ea119Erik /** 128e566836781f2a653624dceee3399bef25a0ea119Erik * Parse the parameters and set any necessary fields. See 129e566836781f2a653624dceee3399bef25a0ea119Erik * {@link #WEEK_PARAMS_NUM_WEEKS} for parameter details. 130e566836781f2a653624dceee3399bef25a0ea119Erik * 131e566836781f2a653624dceee3399bef25a0ea119Erik * @param params A list of parameters for this adapter 132e566836781f2a653624dceee3399bef25a0ea119Erik */ 13382b318634af1b6594e60cfd1f2df4d3845f80587Erik public void updateParams(HashMap<String, Integer> params) { 13482b318634af1b6594e60cfd1f2df4d3845f80587Erik if (params == null) { 13582b318634af1b6594e60cfd1f2df4d3845f80587Erik Log.e(TAG, "WeekParameters are null! Cannot update adapter."); 13682b318634af1b6594e60cfd1f2df4d3845f80587Erik return; 13782b318634af1b6594e60cfd1f2df4d3845f80587Erik } 13882b318634af1b6594e60cfd1f2df4d3845f80587Erik if (params.containsKey(WEEK_PARAMS_FOCUS_MONTH)) { 13982b318634af1b6594e60cfd1f2df4d3845f80587Erik mFocusMonth = params.get(WEEK_PARAMS_FOCUS_MONTH); 14082b318634af1b6594e60cfd1f2df4d3845f80587Erik } 14182b318634af1b6594e60cfd1f2df4d3845f80587Erik if (params.containsKey(WEEK_PARAMS_FOCUS_MONTH)) { 14282b318634af1b6594e60cfd1f2df4d3845f80587Erik mNumWeeks = params.get(WEEK_PARAMS_NUM_WEEKS); 14382b318634af1b6594e60cfd1f2df4d3845f80587Erik } 14482b318634af1b6594e60cfd1f2df4d3845f80587Erik if (params.containsKey(WEEK_PARAMS_SHOW_WEEK)) { 14582b318634af1b6594e60cfd1f2df4d3845f80587Erik mShowWeekNumber = params.get(WEEK_PARAMS_SHOW_WEEK) != 0; 14682b318634af1b6594e60cfd1f2df4d3845f80587Erik } 14782b318634af1b6594e60cfd1f2df4d3845f80587Erik if (params.containsKey(WEEK_PARAMS_WEEK_START)) { 14882b318634af1b6594e60cfd1f2df4d3845f80587Erik mFirstDayOfWeek = params.get(WEEK_PARAMS_WEEK_START); 14982b318634af1b6594e60cfd1f2df4d3845f80587Erik } 15040bcd101b212c9863c3110c05a487a7ae6ebc3caErik if (params.containsKey(WEEK_PARAMS_JULIAN_DAY)) { 151e566836781f2a653624dceee3399bef25a0ea119Erik int julianDay = params.get(WEEK_PARAMS_JULIAN_DAY); 152e566836781f2a653624dceee3399bef25a0ea119Erik mSelectedDay.setJulianDay(julianDay); 153e566836781f2a653624dceee3399bef25a0ea119Erik mSelectedWeek = Utils.getWeeksSinceEpochFromJulianDay(julianDay, mFirstDayOfWeek); 15440bcd101b212c9863c3110c05a487a7ae6ebc3caErik } 15591b01ed605e36fc5a7a924c226597a62c789b50dErik if (params.containsKey(WEEK_PARAMS_DAYS_PER_WEEK)) { 15691b01ed605e36fc5a7a924c226597a62c789b50dErik mDaysPerWeek = params.get(WEEK_PARAMS_DAYS_PER_WEEK); 15791b01ed605e36fc5a7a924c226597a62c789b50dErik } 15882b318634af1b6594e60cfd1f2df4d3845f80587Erik refresh(); 15982b318634af1b6594e60cfd1f2df4d3845f80587Erik } 16082b318634af1b6594e60cfd1f2df4d3845f80587Erik 161e566836781f2a653624dceee3399bef25a0ea119Erik /** 162e566836781f2a653624dceee3399bef25a0ea119Erik * Updates the selected day and related parameters. 163e566836781f2a653624dceee3399bef25a0ea119Erik * 164e566836781f2a653624dceee3399bef25a0ea119Erik * @param selectedTime The time to highlight 165e566836781f2a653624dceee3399bef25a0ea119Erik */ 16682b318634af1b6594e60cfd1f2df4d3845f80587Erik public void setSelectedDay(Time selectedTime) { 16782b318634af1b6594e60cfd1f2df4d3845f80587Erik mSelectedDay.set(selectedTime); 16882b318634af1b6594e60cfd1f2df4d3845f80587Erik long millis = mSelectedDay.normalize(true); 16982b318634af1b6594e60cfd1f2df4d3845f80587Erik mSelectedWeek = Utils.getWeeksSinceEpochFromJulianDay( 17082b318634af1b6594e60cfd1f2df4d3845f80587Erik Time.getJulianDay(millis, mSelectedDay.gmtoff), mFirstDayOfWeek); 17182b318634af1b6594e60cfd1f2df4d3845f80587Erik notifyDataSetChanged(); 17282b318634af1b6594e60cfd1f2df4d3845f80587Erik } 17382b318634af1b6594e60cfd1f2df4d3845f80587Erik 174e566836781f2a653624dceee3399bef25a0ea119Erik /** 175e566836781f2a653624dceee3399bef25a0ea119Erik * Returns the currently highlighted day 176e566836781f2a653624dceee3399bef25a0ea119Erik * 177e566836781f2a653624dceee3399bef25a0ea119Erik * @return 178e566836781f2a653624dceee3399bef25a0ea119Erik */ 17982b318634af1b6594e60cfd1f2df4d3845f80587Erik public Time getSelectedDay() { 18082b318634af1b6594e60cfd1f2df4d3845f80587Erik return mSelectedDay; 18182b318634af1b6594e60cfd1f2df4d3845f80587Erik } 18282b318634af1b6594e60cfd1f2df4d3845f80587Erik 183e566836781f2a653624dceee3399bef25a0ea119Erik /** 184e566836781f2a653624dceee3399bef25a0ea119Erik * updates any config options that may have changed and refreshes the view 185e566836781f2a653624dceee3399bef25a0ea119Erik */ 18682b318634af1b6594e60cfd1f2df4d3845f80587Erik protected void refresh() { 18782b318634af1b6594e60cfd1f2df4d3845f80587Erik notifyDataSetChanged(); 18882b318634af1b6594e60cfd1f2df4d3845f80587Erik } 18982b318634af1b6594e60cfd1f2df4d3845f80587Erik 19082b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 19182b318634af1b6594e60cfd1f2df4d3845f80587Erik public int getCount() { 19282b318634af1b6594e60cfd1f2df4d3845f80587Erik return WEEK_COUNT; 19382b318634af1b6594e60cfd1f2df4d3845f80587Erik } 19482b318634af1b6594e60cfd1f2df4d3845f80587Erik 19582b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 19682b318634af1b6594e60cfd1f2df4d3845f80587Erik public Object getItem(int position) { 19782b318634af1b6594e60cfd1f2df4d3845f80587Erik return null; 19882b318634af1b6594e60cfd1f2df4d3845f80587Erik } 19982b318634af1b6594e60cfd1f2df4d3845f80587Erik 20082b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 20182b318634af1b6594e60cfd1f2df4d3845f80587Erik public long getItemId(int position) { 20282b318634af1b6594e60cfd1f2df4d3845f80587Erik return position; 20382b318634af1b6594e60cfd1f2df4d3845f80587Erik } 20482b318634af1b6594e60cfd1f2df4d3845f80587Erik 20582b318634af1b6594e60cfd1f2df4d3845f80587Erik @SuppressWarnings("unchecked") 20682b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 20782b318634af1b6594e60cfd1f2df4d3845f80587Erik public View getView(int position, View convertView, ViewGroup parent) { 208e21674aefc9755ba519dfc5b3ff4348be4814903Erik SimpleWeekView v; 20982b318634af1b6594e60cfd1f2df4d3845f80587Erik HashMap<String, Integer> drawingParams = null; 21082b318634af1b6594e60cfd1f2df4d3845f80587Erik if (convertView != null) { 211e21674aefc9755ba519dfc5b3ff4348be4814903Erik v = (SimpleWeekView) convertView; 212e566836781f2a653624dceee3399bef25a0ea119Erik // We store the drawing parameters in the view so it can be recycled 21382b318634af1b6594e60cfd1f2df4d3845f80587Erik drawingParams = (HashMap<String, Integer>) v.getTag(); 21482b318634af1b6594e60cfd1f2df4d3845f80587Erik } else { 215e21674aefc9755ba519dfc5b3ff4348be4814903Erik v = new SimpleWeekView(mContext); 216e566836781f2a653624dceee3399bef25a0ea119Erik // Set up the new view 217e566836781f2a653624dceee3399bef25a0ea119Erik LayoutParams params = new LayoutParams( 218e566836781f2a653624dceee3399bef25a0ea119Erik LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 219e566836781f2a653624dceee3399bef25a0ea119Erik v.setLayoutParams(params); 220e566836781f2a653624dceee3399bef25a0ea119Erik v.setClickable(true); 221e566836781f2a653624dceee3399bef25a0ea119Erik v.setOnTouchListener(this); 22282b318634af1b6594e60cfd1f2df4d3845f80587Erik } 22382b318634af1b6594e60cfd1f2df4d3845f80587Erik if (drawingParams == null) { 22482b318634af1b6594e60cfd1f2df4d3845f80587Erik drawingParams = new HashMap<String, Integer>(); 22582b318634af1b6594e60cfd1f2df4d3845f80587Erik } 22682b318634af1b6594e60cfd1f2df4d3845f80587Erik drawingParams.clear(); 22782b318634af1b6594e60cfd1f2df4d3845f80587Erik 22882b318634af1b6594e60cfd1f2df4d3845f80587Erik int selectedDay = -1; 22982b318634af1b6594e60cfd1f2df4d3845f80587Erik if (mSelectedWeek == position) { 23082b318634af1b6594e60cfd1f2df4d3845f80587Erik selectedDay = mSelectedDay.weekDay; 23182b318634af1b6594e60cfd1f2df4d3845f80587Erik } 23282b318634af1b6594e60cfd1f2df4d3845f80587Erik 233e566836781f2a653624dceee3399bef25a0ea119Erik // pass in all the view parameters 234e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_HEIGHT, 23582b318634af1b6594e60cfd1f2df4d3845f80587Erik (parent.getHeight() - WEEK_7_OVERHANG_HEIGHT) / mNumWeeks); 236e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_SELECTED_DAY, selectedDay); 237e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_SHOW_WK_NUM, mShowWeekNumber ? 1 : 0); 238e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_WEEK_START, mFirstDayOfWeek); 239e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_NUM_DAYS, mDaysPerWeek); 240e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_WEEK, position); 241e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_FOCUS_MONTH, mFocusMonth); 24282b318634af1b6594e60cfd1f2df4d3845f80587Erik v.setWeekParams(drawingParams, mSelectedDay.timezone); 243c485b45ef36fe103428b50cef399ba199c57b385Erik v.invalidate(); 24482b318634af1b6594e60cfd1f2df4d3845f80587Erik 24582b318634af1b6594e60cfd1f2df4d3845f80587Erik return v; 24682b318634af1b6594e60cfd1f2df4d3845f80587Erik } 24782b318634af1b6594e60cfd1f2df4d3845f80587Erik 248e566836781f2a653624dceee3399bef25a0ea119Erik /** 249e566836781f2a653624dceee3399bef25a0ea119Erik * Changes which month is in focus and updates the view. 250e566836781f2a653624dceee3399bef25a0ea119Erik * 251e566836781f2a653624dceee3399bef25a0ea119Erik * @param month The month to show as in focus [0-11] 252e566836781f2a653624dceee3399bef25a0ea119Erik */ 25382b318634af1b6594e60cfd1f2df4d3845f80587Erik public void updateFocusMonth(int month) { 25482b318634af1b6594e60cfd1f2df4d3845f80587Erik mFocusMonth = month; 25582b318634af1b6594e60cfd1f2df4d3845f80587Erik notifyDataSetChanged(); 25682b318634af1b6594e60cfd1f2df4d3845f80587Erik } 25782b318634af1b6594e60cfd1f2df4d3845f80587Erik 25882b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 25982b318634af1b6594e60cfd1f2df4d3845f80587Erik public boolean onTouch(View v, MotionEvent event) { 26082b318634af1b6594e60cfd1f2df4d3845f80587Erik if (mGestureDetector.onTouchEvent(event)) { 261e21674aefc9755ba519dfc5b3ff4348be4814903Erik SimpleWeekView view = (SimpleWeekView) v; 262e21674aefc9755ba519dfc5b3ff4348be4814903Erik Time day = ((SimpleWeekView)v).getDayFromLocation(event.getX()); 26382b318634af1b6594e60cfd1f2df4d3845f80587Erik if (Log.isLoggable(TAG, Log.DEBUG)) { 26440bcd101b212c9863c3110c05a487a7ae6ebc3caErik Log.d(TAG, "Touched day at Row=" + view.mWeek + " day=" + day.toString()); 26582b318634af1b6594e60cfd1f2df4d3845f80587Erik } 26682b318634af1b6594e60cfd1f2df4d3845f80587Erik if (day != null) { 26782b318634af1b6594e60cfd1f2df4d3845f80587Erik onDayTapped(day); 26882b318634af1b6594e60cfd1f2df4d3845f80587Erik } 26982b318634af1b6594e60cfd1f2df4d3845f80587Erik return true; 27082b318634af1b6594e60cfd1f2df4d3845f80587Erik } 27182b318634af1b6594e60cfd1f2df4d3845f80587Erik return false; 27282b318634af1b6594e60cfd1f2df4d3845f80587Erik } 27382b318634af1b6594e60cfd1f2df4d3845f80587Erik 27482b318634af1b6594e60cfd1f2df4d3845f80587Erik /** 275e566836781f2a653624dceee3399bef25a0ea119Erik * Maintains the same hour/min/sec but moves the day to the tapped day. 276e566836781f2a653624dceee3399bef25a0ea119Erik * 27782b318634af1b6594e60cfd1f2df4d3845f80587Erik * @param day The day that was tapped 27882b318634af1b6594e60cfd1f2df4d3845f80587Erik */ 27982b318634af1b6594e60cfd1f2df4d3845f80587Erik protected void onDayTapped(Time day) { 28082b318634af1b6594e60cfd1f2df4d3845f80587Erik day.hour = mSelectedDay.hour; 28182b318634af1b6594e60cfd1f2df4d3845f80587Erik day.minute = mSelectedDay.minute; 28282b318634af1b6594e60cfd1f2df4d3845f80587Erik day.second = mSelectedDay.second; 28382b318634af1b6594e60cfd1f2df4d3845f80587Erik setSelectedDay(day); 28482b318634af1b6594e60cfd1f2df4d3845f80587Erik } 28582b318634af1b6594e60cfd1f2df4d3845f80587Erik 28682b318634af1b6594e60cfd1f2df4d3845f80587Erik 287e566836781f2a653624dceee3399bef25a0ea119Erik /** 288e566836781f2a653624dceee3399bef25a0ea119Erik * This is here so we can identify single tap events and set the selected 289e566836781f2a653624dceee3399bef25a0ea119Erik * day correctly 290e566836781f2a653624dceee3399bef25a0ea119Erik */ 29182b318634af1b6594e60cfd1f2df4d3845f80587Erik protected class CalendarGestureListener extends GestureDetector.SimpleOnGestureListener { 29282b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 29382b318634af1b6594e60cfd1f2df4d3845f80587Erik public boolean onSingleTapUp(MotionEvent e) { 29482b318634af1b6594e60cfd1f2df4d3845f80587Erik return true; 29582b318634af1b6594e60cfd1f2df4d3845f80587Erik } 29682b318634af1b6594e60cfd1f2df4d3845f80587Erik } 29782b318634af1b6594e60cfd1f2df4d3845f80587Erik} 298