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