| /* |
| * Copyright (C) 2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.widget; |
| |
| import android.annotation.StyleRes; |
| import android.content.Context; |
| import android.graphics.Rect; |
| import android.icu.util.Calendar; |
| import android.util.AttributeSet; |
| import android.widget.DayPickerView.OnDaySelectedListener; |
| |
| class CalendarViewMaterialDelegate extends CalendarView.AbstractCalendarViewDelegate { |
| private final DayPickerView mDayPickerView; |
| |
| private CalendarView.OnDateChangeListener mOnDateChangeListener; |
| |
| public CalendarViewMaterialDelegate(CalendarView delegator, Context context, AttributeSet attrs, |
| int defStyleAttr, int defStyleRes) { |
| super(delegator, context); |
| |
| mDayPickerView = new DayPickerView(context, attrs, defStyleAttr, defStyleRes); |
| mDayPickerView.setOnDaySelectedListener(mOnDaySelectedListener); |
| |
| delegator.addView(mDayPickerView); |
| } |
| |
| @Override |
| public void setWeekDayTextAppearance(@StyleRes int resId) { |
| mDayPickerView.setDayOfWeekTextAppearance(resId); |
| } |
| |
| @StyleRes |
| @Override |
| public int getWeekDayTextAppearance() { |
| return mDayPickerView.getDayOfWeekTextAppearance(); |
| } |
| |
| @Override |
| public void setDateTextAppearance(@StyleRes int resId) { |
| mDayPickerView.setDayTextAppearance(resId); |
| } |
| |
| @StyleRes |
| @Override |
| public int getDateTextAppearance() { |
| return mDayPickerView.getDayTextAppearance(); |
| } |
| |
| @Override |
| public void setMinDate(long minDate) { |
| mDayPickerView.setMinDate(minDate); |
| } |
| |
| @Override |
| public long getMinDate() { |
| return mDayPickerView.getMinDate(); |
| } |
| |
| @Override |
| public void setMaxDate(long maxDate) { |
| mDayPickerView.setMaxDate(maxDate); |
| } |
| |
| @Override |
| public long getMaxDate() { |
| return mDayPickerView.getMaxDate(); |
| } |
| |
| @Override |
| public void setFirstDayOfWeek(int firstDayOfWeek) { |
| mDayPickerView.setFirstDayOfWeek(firstDayOfWeek); |
| } |
| |
| @Override |
| public int getFirstDayOfWeek() { |
| return mDayPickerView.getFirstDayOfWeek(); |
| } |
| |
| @Override |
| public void setDate(long date) { |
| mDayPickerView.setDate(date, true); |
| } |
| |
| @Override |
| public void setDate(long date, boolean animate, boolean center) { |
| mDayPickerView.setDate(date, animate); |
| } |
| |
| @Override |
| public long getDate() { |
| return mDayPickerView.getDate(); |
| } |
| |
| @Override |
| public void setOnDateChangeListener(CalendarView.OnDateChangeListener listener) { |
| mOnDateChangeListener = listener; |
| } |
| |
| @Override |
| public boolean getBoundsForDate(long date, Rect outBounds) { |
| boolean result = mDayPickerView.getBoundsForDate(date, outBounds); |
| if (result) { |
| // Found the date in the current picker. Now need to offset vertically to return correct |
| // bounds in the coordinate system of the entire layout |
| final int[] dayPickerPositionOnScreen = new int[2]; |
| final int[] delegatorPositionOnScreen = new int[2]; |
| mDayPickerView.getLocationOnScreen(dayPickerPositionOnScreen); |
| mDelegator.getLocationOnScreen(delegatorPositionOnScreen); |
| final int extraVerticalOffset = |
| dayPickerPositionOnScreen[1] - delegatorPositionOnScreen[1]; |
| outBounds.top += extraVerticalOffset; |
| outBounds.bottom += extraVerticalOffset; |
| return true; |
| } |
| return false; |
| } |
| |
| private final OnDaySelectedListener mOnDaySelectedListener = new OnDaySelectedListener() { |
| @Override |
| public void onDaySelected(DayPickerView view, Calendar day) { |
| if (mOnDateChangeListener != null) { |
| final int year = day.get(Calendar.YEAR); |
| final int month = day.get(Calendar.MONTH); |
| final int dayOfMonth = day.get(Calendar.DAY_OF_MONTH); |
| mOnDateChangeListener.onSelectedDayChange(mDelegator, year, month, dayOfMonth); |
| } |
| } |
| }; |
| } |