14612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette/* 24612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * Copyright (C) 2014 The Android Open Source Project 34612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * 44612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * Licensed under the Apache License, Version 2.0 (the "License"); 54612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * you may not use this file except in compliance with the License. 64612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * You may obtain a copy of the License at 74612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * 84612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * http://www.apache.org/licenses/LICENSE-2.0 94612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * 104612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * Unless required by applicable law or agreed to in writing, software 114612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * distributed under the License is distributed on an "AS IS" BASIS, 124612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * See the License for the specific language governing permissions and 144612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette * limitations under the License. 154612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette */ 164612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 174612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverettepackage android.widget; 184612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 190ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viveretteimport android.annotation.StyleRes; 204612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viveretteimport android.content.Context; 214612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viveretteimport android.util.AttributeSet; 2278bf1d329a4c0210394f846be1fd1390314aefc0Alan Viveretteimport android.widget.DayPickerView.OnDaySelectedListener; 234612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 244612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viveretteimport java.util.Calendar; 254612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 264612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viveretteclass CalendarViewMaterialDelegate extends CalendarView.AbstractCalendarViewDelegate { 274612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette private final DayPickerView mDayPickerView; 284612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 294612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette private CalendarView.OnDateChangeListener mOnDateChangeListener; 304612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 314612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public CalendarViewMaterialDelegate(CalendarView delegator, Context context, AttributeSet attrs, 324612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette int defStyleAttr, int defStyleRes) { 334612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette super(delegator, context); 344612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 350ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viverette mDayPickerView = new DayPickerView(context, attrs, defStyleAttr, defStyleRes); 364612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette mDayPickerView.setOnDaySelectedListener(mOnDaySelectedListener); 374612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 384612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette delegator.addView(mDayPickerView); 394612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 404612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 414612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 420ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viverette public void setWeekDayTextAppearance(@StyleRes int resId) { 430ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viverette mDayPickerView.setDayOfWeekTextAppearance(resId); 444612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 454612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 460ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viverette @StyleRes 474612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 484612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public int getWeekDayTextAppearance() { 490ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viverette return mDayPickerView.getDayOfWeekTextAppearance(); 504612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 514612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 524612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 530ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viverette public void setDateTextAppearance(@StyleRes int resId) { 540ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viverette mDayPickerView.setDayTextAppearance(resId); 554612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 564612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 570ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viverette @StyleRes 584612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 594612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public int getDateTextAppearance() { 600ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viverette return mDayPickerView.getDayTextAppearance(); 614612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 624612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 634612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 644612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public void setMinDate(long minDate) { 654612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette mDayPickerView.setMinDate(minDate); 664612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 674612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 684612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 694612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public long getMinDate() { 704612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette return mDayPickerView.getMinDate(); 714612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 724612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 734612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 744612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public void setMaxDate(long maxDate) { 754612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette mDayPickerView.setMaxDate(maxDate); 764612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 774612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 784612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 794612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public long getMaxDate() { 804612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette return mDayPickerView.getMaxDate(); 814612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 824612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 834612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 844612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public void setFirstDayOfWeek(int firstDayOfWeek) { 854612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette mDayPickerView.setFirstDayOfWeek(firstDayOfWeek); 864612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 874612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 884612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 894612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public int getFirstDayOfWeek() { 904612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette return mDayPickerView.getFirstDayOfWeek(); 914612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 924612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 934612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 944612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public void setDate(long date) { 950ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viverette mDayPickerView.setDate(date, true); 964612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 974612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 984612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 994612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public void setDate(long date, boolean animate, boolean center) { 1000ef59ac0e57e9b99d174d4a53f7d9639357743acAlan Viverette mDayPickerView.setDate(date, animate); 1014612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 1024612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 1034612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 1044612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public long getDate() { 1054612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette return mDayPickerView.getDate(); 1064612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 1074612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 1084612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 1094612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public void setOnDateChangeListener(CalendarView.OnDateChangeListener listener) { 1104612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette mOnDateChangeListener = listener; 1114612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 1124612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette 11378bf1d329a4c0210394f846be1fd1390314aefc0Alan Viverette private final OnDaySelectedListener mOnDaySelectedListener = new OnDaySelectedListener() { 1144612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette @Override 1154612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette public void onDaySelected(DayPickerView view, Calendar day) { 1164612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette if (mOnDateChangeListener != null) { 1174612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette final int year = day.get(Calendar.YEAR); 1184612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette final int month = day.get(Calendar.MONTH); 1194612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette final int dayOfMonth = day.get(Calendar.DAY_OF_MONTH); 1204612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette mOnDateChangeListener.onSelectedDayChange(mDelegator, year, month, dayOfMonth); 1214612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 1224612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette } 1234612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette }; 1244612740ddc76b3518dc6d189d5f8b5b7f60e9d64Alan Viverette} 125