package com.pam.codenamehippie.ui.view.dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.pam.codenamehippie.R;
import com.squareup.timessquare.CalendarPickerView;
import com.squareup.timessquare.CalendarPickerView.OnDateSelectedListener;
import com.squareup.timessquare.CalendarPickerView.SelectionMode;
import java.util.Calendar;
import java.util.Date;
public class CalendarPickerViewDialogFragment extends AppCompatDialogFragment
implements OnDateSelectedListener {
public interface OnDismissListener {
void onDismiss(CalendarPickerViewDialogFragment fragment, DialogInterface dialog);
}
public interface OnCancelListener{
void onCancel(CalendarPickerViewDialogFragment fragment, DialogInterface dialogInterface);
}
public static final class Builder {
private Date minDate;
private Date maxDate;
private Date selectedDate;
private SelectionMode selectionMode;
private Builder() {
this.minDate = new Date();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, 10);
this.maxDate = calendar.getTime();
this.selectedDate = this.minDate;
this.selectionMode = SelectionMode.SINGLE;
}
/**
* Construit le fragment
*
* @return un nouveau {@link CalendarPickerViewDialogFragment}
*/
public CalendarPickerViewDialogFragment pisCestTout() {
Bundle args = new Bundle();
CalendarPickerViewDialogFragment fragment = new CalendarPickerViewDialogFragment();
args.putSerializable(MIN_DATE, this.minDate);
args.putSerializable(MAX_DATE, this.maxDate);
args.putSerializable(SELECTED_DATE, this.selectedDate);
args.putSerializable(SELECTION_MODE, this.selectionMode);
fragment.setArguments(args);
return fragment;
}
public Builder avecCetteDateMaximale(@NonNull Date date) {
if (date.after(this.minDate)) {
this.maxDate = date;
}
return this;
}
public Date dateMaximale() {
return this.maxDate;
}
public Builder avecCetteDateMinimale(@NonNull Date date) {
if (date.before(this.maxDate)) {
this.minDate = date;
}
return this;
}
public Date dateMinimale() {
return this.minDate;
}
public Date selectDate() {
return this.selectedDate;
}
public Builder avecCetteDateSelectionnee(@NonNull Date date) {
if (((this.minDate.before(date) || this.minDate.equals(date)) &&
(this.maxDate.after(date)))) {
this.selectedDate = date;
}
return this;
}
public Builder enModeDeSelection(SelectionMode mode) {
this.selectionMode = mode;
return this;
}
public SelectionMode modeDeSelection() {
return this.selectionMode;
}
}
private static final String MIN_DATE = "minDate";
private static final String MAX_DATE = "maxDate";
private static final String SELECTED_DATE = "selectedDate";
private static final String SELECTION_MODE = "selectionMode";
private Date minDate;
private Date maxDate;
private Date selectedDate;
private SelectionMode selectionMode;
private OnDateSelectedListener onDateSelectedListener;
private OnDismissListener onDismissListener;
private OnCancelListener onCancelListener;
private CalendarPickerView view;
public CalendarPickerViewDialogFragment() {
this.minDate = new Date();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, 10);
this.maxDate = calendar.getTime();
this.selectedDate = this.minDate;
this.selectionMode = SelectionMode.SINGLE;
}
public static Builder assigneUnNouveauFragment() {
return new Builder();
}
public CalendarPickerView getCalendar() {
return this.view;
}
public SelectionMode modeDeSelection() {
return this.selectionMode;
}
public Date dateSelectionee() {
return this.selectedDate;
}
public CalendarPickerViewDialogFragment setOnDateSelectedListener(OnDateSelectedListener
listener) {
this.onDateSelectedListener = listener;
return this;
}
public CalendarPickerViewDialogFragment setOnDismissListener(OnDismissListener listener) {
this.onDismissListener = listener;
return this;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = (savedInstanceState != null) ? savedInstanceState : this.getArguments();
if (args != null) {
if (args.containsKey(MIN_DATE)) {
this.minDate = ((Date) args.getSerializable(MIN_DATE));
}
if (args.containsKey(MAX_DATE)) {
this.maxDate = ((Date) args.getSerializable(MAX_DATE));
}
if (args.containsKey(SELECTED_DATE)) {
this.selectedDate = ((Date) args.getSerializable(SELECTED_DATE));
}
if (args.containsKey(SELECTION_MODE)) {
this.selectionMode = ((SelectionMode) args.getSerializable(SELECTION_MODE));
}
}
this.setStyle(STYLE_NO_TITLE, 0);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
this.view =
((CalendarPickerView) inflater.inflate(R.layout.dialogfragment_calendarpickerview,
container, false));
this.view.init(this.minDate, this.maxDate)
.withSelectedDate(this.selectedDate)
.inMode(this.selectionMode);
this.view.setOnDateSelectedListener(this);
return this.view;
}
@Override
public void onStart() {
super.onStart();
if (this.view != null) {
if (this.selectionMode == SelectionMode.SINGLE) {
this.view.selectDate(this.selectedDate);
}
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable(MIN_DATE, this.minDate);
outState.putSerializable(MAX_DATE, this.maxDate);
outState.putSerializable(SELECTED_DATE, this.selectedDate);
outState.putSerializable(SELECTION_MODE, this.selectionMode);
}
@Override
public void onDateSelected(Date date) {
if (this.selectionMode == SelectionMode.SINGLE) {
this.selectedDate = date;
this.dismiss();
}
if (this.onDateSelectedListener != null) {
this.onDateSelectedListener.onDateSelected(date);
}
}
@Override
public void onDateUnselected(Date date) {
if (this.onDateSelectedListener != null) {
this.onDateSelectedListener.onDateUnselected(date);
}
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (this.onDismissListener != null) {
this.onDismissListener.onDismiss(this, dialog);
}
}
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
}
}