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; 3459a44aa4bb3fac90f7ceab65da191e7fd81905f2Isaac Katzenelsonimport android.widget.ListView; 3582b318634af1b6594e60cfd1f2df4d3845f80587Erik 36636269c7220a2b12e090cab43a91eb34922eb61fAndy McFaddenimport java.util.Calendar; 3782b318634af1b6594e60cfd1f2df4d3845f80587Erikimport java.util.HashMap; 38e566836781f2a653624dceee3399bef25a0ea119Erikimport java.util.Locale; 39e566836781f2a653624dceee3399bef25a0ea119Erik 40ca56a02bc75ca52eca0c2670be0ee4146f292624Erik/** 41ca56a02bc75ca52eca0c2670be0ee4146f292624Erik * <p> 42ca56a02bc75ca52eca0c2670be0ee4146f292624Erik * This is a specialized adapter for creating a list of weeks with selectable 43ca56a02bc75ca52eca0c2670be0ee4146f292624Erik * days. It can be configured to display the week number, start the week on a 44ca56a02bc75ca52eca0c2670be0ee4146f292624Erik * given day, show a reduced number of days, or display an arbitrary number of 45e21674aefc9755ba519dfc5b3ff4348be4814903Erik * weeks at a time. See {@link SimpleDayPickerFragment} for usage. 46ca56a02bc75ca52eca0c2670be0ee4146f292624Erik * </p> 47ca56a02bc75ca52eca0c2670be0ee4146f292624Erik */ 48e21674aefc9755ba519dfc5b3ff4348be4814903Erikpublic class SimpleWeeksAdapter extends BaseAdapter implements OnTouchListener { 4982b318634af1b6594e60cfd1f2df4d3845f80587Erik 503553621c824afe1f3eacbe8555678005ca1264a1Erik private static final String TAG = "MonthByWeek"; 5182b318634af1b6594e60cfd1f2df4d3845f80587Erik 52e566836781f2a653624dceee3399bef25a0ea119Erik /** 53e566836781f2a653624dceee3399bef25a0ea119Erik * The number of weeks to display at a time. 54e566836781f2a653624dceee3399bef25a0ea119Erik */ 5582b318634af1b6594e60cfd1f2df4d3845f80587Erik public static final String WEEK_PARAMS_NUM_WEEKS = "num_weeks"; 56e566836781f2a653624dceee3399bef25a0ea119Erik /** 57e566836781f2a653624dceee3399bef25a0ea119Erik * Which month should be in focus currently. 58e566836781f2a653624dceee3399bef25a0ea119Erik */ 5982b318634af1b6594e60cfd1f2df4d3845f80587Erik public static final String WEEK_PARAMS_FOCUS_MONTH = "focus_month"; 60e566836781f2a653624dceee3399bef25a0ea119Erik /** 61e566836781f2a653624dceee3399bef25a0ea119Erik * Whether the week number should be shown. Non-zero to show them. 62e566836781f2a653624dceee3399bef25a0ea119Erik */ 6382b318634af1b6594e60cfd1f2df4d3845f80587Erik public static final String WEEK_PARAMS_SHOW_WEEK = "week_numbers"; 64e566836781f2a653624dceee3399bef25a0ea119Erik /** 65e566836781f2a653624dceee3399bef25a0ea119Erik * Which day the week should start on. {@link Time#SUNDAY} through 66e566836781f2a653624dceee3399bef25a0ea119Erik * {@link Time#SATURDAY}. 67e566836781f2a653624dceee3399bef25a0ea119Erik */ 6882b318634af1b6594e60cfd1f2df4d3845f80587Erik public static final String WEEK_PARAMS_WEEK_START = "week_start"; 69e566836781f2a653624dceee3399bef25a0ea119Erik /** 70e566836781f2a653624dceee3399bef25a0ea119Erik * The Julian day to highlight as selected. 71e566836781f2a653624dceee3399bef25a0ea119Erik */ 72e566836781f2a653624dceee3399bef25a0ea119Erik public static final String WEEK_PARAMS_JULIAN_DAY = "selected_day"; 73e566836781f2a653624dceee3399bef25a0ea119Erik /** 74e566836781f2a653624dceee3399bef25a0ea119Erik * How many days of the week to display [1-7]. 75e566836781f2a653624dceee3399bef25a0ea119Erik */ 7691b01ed605e36fc5a7a924c226597a62c789b50dErik public static final String WEEK_PARAMS_DAYS_PER_WEEK = "days_per_week"; 7782b318634af1b6594e60cfd1f2df4d3845f80587Erik 7882b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static final int WEEK_COUNT = CalendarController.MAX_CALENDAR_WEEK 7982b318634af1b6594e60cfd1f2df4d3845f80587Erik - CalendarController.MIN_CALENDAR_WEEK; 8082b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static int DEFAULT_NUM_WEEKS = 6; 8182b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static int DEFAULT_MONTH_FOCUS = 0; 8282b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static int DEFAULT_DAYS_PER_WEEK = 7; 8382b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static int DEFAULT_WEEK_HEIGHT = 32; 8482b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static int WEEK_7_OVERHANG_HEIGHT = 7; 85e566836781f2a653624dceee3399bef25a0ea119Erik 8682b318634af1b6594e60cfd1f2df4d3845f80587Erik protected static float mScale = 0; 8782b318634af1b6594e60cfd1f2df4d3845f80587Erik protected Context mContext; 88e566836781f2a653624dceee3399bef25a0ea119Erik // The day to highlight as selected 8982b318634af1b6594e60cfd1f2df4d3845f80587Erik protected Time mSelectedDay; 90e566836781f2a653624dceee3399bef25a0ea119Erik // The week since 1970 that the selected day is in 9182b318634af1b6594e60cfd1f2df4d3845f80587Erik protected int mSelectedWeek; 92636269c7220a2b12e090cab43a91eb34922eb61fAndy McFadden // When the week starts; numbered like Time.<WEEKDAY> (e.g. SUNDAY=0). 93636269c7220a2b12e090cab43a91eb34922eb61fAndy McFadden protected int mFirstDayOfWeek; 9482b318634af1b6594e60cfd1f2df4d3845f80587Erik protected boolean mShowWeekNumber = false; 9582b318634af1b6594e60cfd1f2df4d3845f80587Erik protected GestureDetector mGestureDetector; 963553621c824afe1f3eacbe8555678005ca1264a1Erik protected int mNumWeeks = DEFAULT_NUM_WEEKS; 9791b01ed605e36fc5a7a924c226597a62c789b50dErik protected int mDaysPerWeek = DEFAULT_DAYS_PER_WEEK; 983553621c824afe1f3eacbe8555678005ca1264a1Erik protected int mFocusMonth = DEFAULT_MONTH_FOCUS; 9982b318634af1b6594e60cfd1f2df4d3845f80587Erik 100e21674aefc9755ba519dfc5b3ff4348be4814903Erik public SimpleWeeksAdapter(Context context, HashMap<String, Integer> params) { 10182b318634af1b6594e60cfd1f2df4d3845f80587Erik mContext = context; 10282b318634af1b6594e60cfd1f2df4d3845f80587Erik 103636269c7220a2b12e090cab43a91eb34922eb61fAndy McFadden // Get default week start based on locale, subtracting one for use with android Time. 104636269c7220a2b12e090cab43a91eb34922eb61fAndy McFadden Calendar cal = Calendar.getInstance(Locale.getDefault()); 105636269c7220a2b12e090cab43a91eb34922eb61fAndy McFadden mFirstDayOfWeek = cal.getFirstDayOfWeek() - 1; 10682b318634af1b6594e60cfd1f2df4d3845f80587Erik 10782b318634af1b6594e60cfd1f2df4d3845f80587Erik if (mScale == 0) { 10882b318634af1b6594e60cfd1f2df4d3845f80587Erik mScale = context.getResources().getDisplayMetrics().density; 10982b318634af1b6594e60cfd1f2df4d3845f80587Erik if (mScale != 1) { 11082b318634af1b6594e60cfd1f2df4d3845f80587Erik WEEK_7_OVERHANG_HEIGHT *= mScale; 11182b318634af1b6594e60cfd1f2df4d3845f80587Erik } 11282b318634af1b6594e60cfd1f2df4d3845f80587Erik } 11382b318634af1b6594e60cfd1f2df4d3845f80587Erik init(); 11482b318634af1b6594e60cfd1f2df4d3845f80587Erik updateParams(params); 11582b318634af1b6594e60cfd1f2df4d3845f80587Erik } 11682b318634af1b6594e60cfd1f2df4d3845f80587Erik 117e566836781f2a653624dceee3399bef25a0ea119Erik /** 118e566836781f2a653624dceee3399bef25a0ea119Erik * Set up the gesture detector and selected time 119e566836781f2a653624dceee3399bef25a0ea119Erik */ 12082b318634af1b6594e60cfd1f2df4d3845f80587Erik protected void init() { 12182b318634af1b6594e60cfd1f2df4d3845f80587Erik mGestureDetector = new GestureDetector(mContext, new CalendarGestureListener()); 12282b318634af1b6594e60cfd1f2df4d3845f80587Erik mSelectedDay = new Time(); 12382b318634af1b6594e60cfd1f2df4d3845f80587Erik mSelectedDay.setToNow(); 12482b318634af1b6594e60cfd1f2df4d3845f80587Erik } 12582b318634af1b6594e60cfd1f2df4d3845f80587Erik 126e566836781f2a653624dceee3399bef25a0ea119Erik /** 127e566836781f2a653624dceee3399bef25a0ea119Erik * Parse the parameters and set any necessary fields. See 128e566836781f2a653624dceee3399bef25a0ea119Erik * {@link #WEEK_PARAMS_NUM_WEEKS} for parameter details. 129e566836781f2a653624dceee3399bef25a0ea119Erik * 130e566836781f2a653624dceee3399bef25a0ea119Erik * @param params A list of parameters for this adapter 131e566836781f2a653624dceee3399bef25a0ea119Erik */ 13282b318634af1b6594e60cfd1f2df4d3845f80587Erik public void updateParams(HashMap<String, Integer> params) { 13382b318634af1b6594e60cfd1f2df4d3845f80587Erik if (params == null) { 13482b318634af1b6594e60cfd1f2df4d3845f80587Erik Log.e(TAG, "WeekParameters are null! Cannot update adapter."); 13582b318634af1b6594e60cfd1f2df4d3845f80587Erik return; 13682b318634af1b6594e60cfd1f2df4d3845f80587Erik } 13782b318634af1b6594e60cfd1f2df4d3845f80587Erik if (params.containsKey(WEEK_PARAMS_FOCUS_MONTH)) { 13882b318634af1b6594e60cfd1f2df4d3845f80587Erik mFocusMonth = params.get(WEEK_PARAMS_FOCUS_MONTH); 13982b318634af1b6594e60cfd1f2df4d3845f80587Erik } 14082b318634af1b6594e60cfd1f2df4d3845f80587Erik if (params.containsKey(WEEK_PARAMS_FOCUS_MONTH)) { 14182b318634af1b6594e60cfd1f2df4d3845f80587Erik mNumWeeks = params.get(WEEK_PARAMS_NUM_WEEKS); 14282b318634af1b6594e60cfd1f2df4d3845f80587Erik } 14382b318634af1b6594e60cfd1f2df4d3845f80587Erik if (params.containsKey(WEEK_PARAMS_SHOW_WEEK)) { 14482b318634af1b6594e60cfd1f2df4d3845f80587Erik mShowWeekNumber = params.get(WEEK_PARAMS_SHOW_WEEK) != 0; 14582b318634af1b6594e60cfd1f2df4d3845f80587Erik } 14682b318634af1b6594e60cfd1f2df4d3845f80587Erik if (params.containsKey(WEEK_PARAMS_WEEK_START)) { 14782b318634af1b6594e60cfd1f2df4d3845f80587Erik mFirstDayOfWeek = params.get(WEEK_PARAMS_WEEK_START); 14882b318634af1b6594e60cfd1f2df4d3845f80587Erik } 14940bcd101b212c9863c3110c05a487a7ae6ebc3caErik if (params.containsKey(WEEK_PARAMS_JULIAN_DAY)) { 150e566836781f2a653624dceee3399bef25a0ea119Erik int julianDay = params.get(WEEK_PARAMS_JULIAN_DAY); 151e566836781f2a653624dceee3399bef25a0ea119Erik mSelectedDay.setJulianDay(julianDay); 152e566836781f2a653624dceee3399bef25a0ea119Erik mSelectedWeek = Utils.getWeeksSinceEpochFromJulianDay(julianDay, mFirstDayOfWeek); 15340bcd101b212c9863c3110c05a487a7ae6ebc3caErik } 15491b01ed605e36fc5a7a924c226597a62c789b50dErik if (params.containsKey(WEEK_PARAMS_DAYS_PER_WEEK)) { 15591b01ed605e36fc5a7a924c226597a62c789b50dErik mDaysPerWeek = params.get(WEEK_PARAMS_DAYS_PER_WEEK); 15691b01ed605e36fc5a7a924c226597a62c789b50dErik } 15782b318634af1b6594e60cfd1f2df4d3845f80587Erik refresh(); 15882b318634af1b6594e60cfd1f2df4d3845f80587Erik } 15982b318634af1b6594e60cfd1f2df4d3845f80587Erik 160e566836781f2a653624dceee3399bef25a0ea119Erik /** 161e566836781f2a653624dceee3399bef25a0ea119Erik * Updates the selected day and related parameters. 162e566836781f2a653624dceee3399bef25a0ea119Erik * 163e566836781f2a653624dceee3399bef25a0ea119Erik * @param selectedTime The time to highlight 164e566836781f2a653624dceee3399bef25a0ea119Erik */ 16582b318634af1b6594e60cfd1f2df4d3845f80587Erik public void setSelectedDay(Time selectedTime) { 16682b318634af1b6594e60cfd1f2df4d3845f80587Erik mSelectedDay.set(selectedTime); 16782b318634af1b6594e60cfd1f2df4d3845f80587Erik long millis = mSelectedDay.normalize(true); 16882b318634af1b6594e60cfd1f2df4d3845f80587Erik mSelectedWeek = Utils.getWeeksSinceEpochFromJulianDay( 16982b318634af1b6594e60cfd1f2df4d3845f80587Erik Time.getJulianDay(millis, mSelectedDay.gmtoff), mFirstDayOfWeek); 17082b318634af1b6594e60cfd1f2df4d3845f80587Erik notifyDataSetChanged(); 17182b318634af1b6594e60cfd1f2df4d3845f80587Erik } 17282b318634af1b6594e60cfd1f2df4d3845f80587Erik 173e566836781f2a653624dceee3399bef25a0ea119Erik /** 174e566836781f2a653624dceee3399bef25a0ea119Erik * Returns the currently highlighted day 175e566836781f2a653624dceee3399bef25a0ea119Erik * 176e566836781f2a653624dceee3399bef25a0ea119Erik * @return 177e566836781f2a653624dceee3399bef25a0ea119Erik */ 17882b318634af1b6594e60cfd1f2df4d3845f80587Erik public Time getSelectedDay() { 17982b318634af1b6594e60cfd1f2df4d3845f80587Erik return mSelectedDay; 18082b318634af1b6594e60cfd1f2df4d3845f80587Erik } 18182b318634af1b6594e60cfd1f2df4d3845f80587Erik 182e566836781f2a653624dceee3399bef25a0ea119Erik /** 183e566836781f2a653624dceee3399bef25a0ea119Erik * updates any config options that may have changed and refreshes the view 184e566836781f2a653624dceee3399bef25a0ea119Erik */ 18582b318634af1b6594e60cfd1f2df4d3845f80587Erik protected void refresh() { 18682b318634af1b6594e60cfd1f2df4d3845f80587Erik notifyDataSetChanged(); 18782b318634af1b6594e60cfd1f2df4d3845f80587Erik } 18882b318634af1b6594e60cfd1f2df4d3845f80587Erik 18982b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 19082b318634af1b6594e60cfd1f2df4d3845f80587Erik public int getCount() { 19182b318634af1b6594e60cfd1f2df4d3845f80587Erik return WEEK_COUNT; 19282b318634af1b6594e60cfd1f2df4d3845f80587Erik } 19382b318634af1b6594e60cfd1f2df4d3845f80587Erik 19482b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 19582b318634af1b6594e60cfd1f2df4d3845f80587Erik public Object getItem(int position) { 19682b318634af1b6594e60cfd1f2df4d3845f80587Erik return null; 19782b318634af1b6594e60cfd1f2df4d3845f80587Erik } 19882b318634af1b6594e60cfd1f2df4d3845f80587Erik 19982b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 20082b318634af1b6594e60cfd1f2df4d3845f80587Erik public long getItemId(int position) { 20182b318634af1b6594e60cfd1f2df4d3845f80587Erik return position; 20282b318634af1b6594e60cfd1f2df4d3845f80587Erik } 20382b318634af1b6594e60cfd1f2df4d3845f80587Erik 20482b318634af1b6594e60cfd1f2df4d3845f80587Erik @SuppressWarnings("unchecked") 20582b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 20682b318634af1b6594e60cfd1f2df4d3845f80587Erik public View getView(int position, View convertView, ViewGroup parent) { 207e21674aefc9755ba519dfc5b3ff4348be4814903Erik SimpleWeekView v; 20882b318634af1b6594e60cfd1f2df4d3845f80587Erik HashMap<String, Integer> drawingParams = null; 20982b318634af1b6594e60cfd1f2df4d3845f80587Erik if (convertView != null) { 210e21674aefc9755ba519dfc5b3ff4348be4814903Erik v = (SimpleWeekView) convertView; 211e566836781f2a653624dceee3399bef25a0ea119Erik // We store the drawing parameters in the view so it can be recycled 21282b318634af1b6594e60cfd1f2df4d3845f80587Erik drawingParams = (HashMap<String, Integer>) v.getTag(); 21382b318634af1b6594e60cfd1f2df4d3845f80587Erik } else { 214e21674aefc9755ba519dfc5b3ff4348be4814903Erik v = new SimpleWeekView(mContext); 215e566836781f2a653624dceee3399bef25a0ea119Erik // Set up the new view 216e566836781f2a653624dceee3399bef25a0ea119Erik LayoutParams params = new LayoutParams( 217e566836781f2a653624dceee3399bef25a0ea119Erik LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 218e566836781f2a653624dceee3399bef25a0ea119Erik v.setLayoutParams(params); 219e566836781f2a653624dceee3399bef25a0ea119Erik v.setClickable(true); 220e566836781f2a653624dceee3399bef25a0ea119Erik v.setOnTouchListener(this); 22182b318634af1b6594e60cfd1f2df4d3845f80587Erik } 22282b318634af1b6594e60cfd1f2df4d3845f80587Erik if (drawingParams == null) { 22382b318634af1b6594e60cfd1f2df4d3845f80587Erik drawingParams = new HashMap<String, Integer>(); 22482b318634af1b6594e60cfd1f2df4d3845f80587Erik } 22582b318634af1b6594e60cfd1f2df4d3845f80587Erik drawingParams.clear(); 22682b318634af1b6594e60cfd1f2df4d3845f80587Erik 22782b318634af1b6594e60cfd1f2df4d3845f80587Erik int selectedDay = -1; 22882b318634af1b6594e60cfd1f2df4d3845f80587Erik if (mSelectedWeek == position) { 22982b318634af1b6594e60cfd1f2df4d3845f80587Erik selectedDay = mSelectedDay.weekDay; 23082b318634af1b6594e60cfd1f2df4d3845f80587Erik } 23182b318634af1b6594e60cfd1f2df4d3845f80587Erik 232e566836781f2a653624dceee3399bef25a0ea119Erik // pass in all the view parameters 233e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_HEIGHT, 23482b318634af1b6594e60cfd1f2df4d3845f80587Erik (parent.getHeight() - WEEK_7_OVERHANG_HEIGHT) / mNumWeeks); 235e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_SELECTED_DAY, selectedDay); 236e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_SHOW_WK_NUM, mShowWeekNumber ? 1 : 0); 237e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_WEEK_START, mFirstDayOfWeek); 238e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_NUM_DAYS, mDaysPerWeek); 239e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_WEEK, position); 240e21674aefc9755ba519dfc5b3ff4348be4814903Erik drawingParams.put(SimpleWeekView.VIEW_PARAMS_FOCUS_MONTH, mFocusMonth); 24182b318634af1b6594e60cfd1f2df4d3845f80587Erik v.setWeekParams(drawingParams, mSelectedDay.timezone); 242c485b45ef36fe103428b50cef399ba199c57b385Erik v.invalidate(); 24382b318634af1b6594e60cfd1f2df4d3845f80587Erik 24482b318634af1b6594e60cfd1f2df4d3845f80587Erik return v; 24582b318634af1b6594e60cfd1f2df4d3845f80587Erik } 24682b318634af1b6594e60cfd1f2df4d3845f80587Erik 247e566836781f2a653624dceee3399bef25a0ea119Erik /** 248e566836781f2a653624dceee3399bef25a0ea119Erik * Changes which month is in focus and updates the view. 249e566836781f2a653624dceee3399bef25a0ea119Erik * 250e566836781f2a653624dceee3399bef25a0ea119Erik * @param month The month to show as in focus [0-11] 251e566836781f2a653624dceee3399bef25a0ea119Erik */ 25282b318634af1b6594e60cfd1f2df4d3845f80587Erik public void updateFocusMonth(int month) { 25382b318634af1b6594e60cfd1f2df4d3845f80587Erik mFocusMonth = month; 25482b318634af1b6594e60cfd1f2df4d3845f80587Erik notifyDataSetChanged(); 25582b318634af1b6594e60cfd1f2df4d3845f80587Erik } 25682b318634af1b6594e60cfd1f2df4d3845f80587Erik 25782b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 25882b318634af1b6594e60cfd1f2df4d3845f80587Erik public boolean onTouch(View v, MotionEvent event) { 25982b318634af1b6594e60cfd1f2df4d3845f80587Erik if (mGestureDetector.onTouchEvent(event)) { 260e21674aefc9755ba519dfc5b3ff4348be4814903Erik SimpleWeekView view = (SimpleWeekView) v; 261e21674aefc9755ba519dfc5b3ff4348be4814903Erik Time day = ((SimpleWeekView)v).getDayFromLocation(event.getX()); 26282b318634af1b6594e60cfd1f2df4d3845f80587Erik if (Log.isLoggable(TAG, Log.DEBUG)) { 26340bcd101b212c9863c3110c05a487a7ae6ebc3caErik Log.d(TAG, "Touched day at Row=" + view.mWeek + " day=" + day.toString()); 26482b318634af1b6594e60cfd1f2df4d3845f80587Erik } 26582b318634af1b6594e60cfd1f2df4d3845f80587Erik if (day != null) { 26682b318634af1b6594e60cfd1f2df4d3845f80587Erik onDayTapped(day); 26782b318634af1b6594e60cfd1f2df4d3845f80587Erik } 26882b318634af1b6594e60cfd1f2df4d3845f80587Erik return true; 26982b318634af1b6594e60cfd1f2df4d3845f80587Erik } 27082b318634af1b6594e60cfd1f2df4d3845f80587Erik return false; 27182b318634af1b6594e60cfd1f2df4d3845f80587Erik } 27282b318634af1b6594e60cfd1f2df4d3845f80587Erik 27382b318634af1b6594e60cfd1f2df4d3845f80587Erik /** 274e566836781f2a653624dceee3399bef25a0ea119Erik * Maintains the same hour/min/sec but moves the day to the tapped day. 275e566836781f2a653624dceee3399bef25a0ea119Erik * 27682b318634af1b6594e60cfd1f2df4d3845f80587Erik * @param day The day that was tapped 27782b318634af1b6594e60cfd1f2df4d3845f80587Erik */ 27882b318634af1b6594e60cfd1f2df4d3845f80587Erik protected void onDayTapped(Time day) { 27982b318634af1b6594e60cfd1f2df4d3845f80587Erik day.hour = mSelectedDay.hour; 28082b318634af1b6594e60cfd1f2df4d3845f80587Erik day.minute = mSelectedDay.minute; 28182b318634af1b6594e60cfd1f2df4d3845f80587Erik day.second = mSelectedDay.second; 28282b318634af1b6594e60cfd1f2df4d3845f80587Erik setSelectedDay(day); 28382b318634af1b6594e60cfd1f2df4d3845f80587Erik } 28482b318634af1b6594e60cfd1f2df4d3845f80587Erik 28582b318634af1b6594e60cfd1f2df4d3845f80587Erik 286e566836781f2a653624dceee3399bef25a0ea119Erik /** 287e566836781f2a653624dceee3399bef25a0ea119Erik * This is here so we can identify single tap events and set the selected 288e566836781f2a653624dceee3399bef25a0ea119Erik * day correctly 289e566836781f2a653624dceee3399bef25a0ea119Erik */ 29082b318634af1b6594e60cfd1f2df4d3845f80587Erik protected class CalendarGestureListener extends GestureDetector.SimpleOnGestureListener { 29182b318634af1b6594e60cfd1f2df4d3845f80587Erik @Override 29282b318634af1b6594e60cfd1f2df4d3845f80587Erik public boolean onSingleTapUp(MotionEvent e) { 29382b318634af1b6594e60cfd1f2df4d3845f80587Erik return true; 29482b318634af1b6594e60cfd1f2df4d3845f80587Erik } 29582b318634af1b6594e60cfd1f2df4d3845f80587Erik } 29659a44aa4bb3fac90f7ceab65da191e7fd81905f2Isaac Katzenelson 29759a44aa4bb3fac90f7ceab65da191e7fd81905f2Isaac Katzenelson ListView mListView; 29859a44aa4bb3fac90f7ceab65da191e7fd81905f2Isaac Katzenelson 29959a44aa4bb3fac90f7ceab65da191e7fd81905f2Isaac Katzenelson public void setListView(ListView lv) { 30059a44aa4bb3fac90f7ceab65da191e7fd81905f2Isaac Katzenelson mListView = lv; 30159a44aa4bb3fac90f7ceab65da191e7fd81905f2Isaac Katzenelson } 30282b318634af1b6594e60cfd1f2df4d3845f80587Erik} 303