fr.cobaltians.cobalt.fragments.CobaltDatePickerFragment.java Source code

Java tutorial

Introduction

Here is the source code for fr.cobaltians.cobalt.fragments.CobaltDatePickerFragment.java

Source

/**
 *
 * CobaltDatePickerFragment
 * Cobalt
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2014 Cobaltians
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 */

package fr.cobaltians.cobalt.fragments;

import fr.cobaltians.cobalt.R;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.widget.DatePicker;

import java.util.Calendar;

public class CobaltDatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    public static final String ARG_YEAR = "YEAR";
    public static final String ARG_MONTH = "MONTH";
    public static final String ARG_DAY = "DAY";
    public static final String ARG_CALLBACK_ID = "ARG_CALLBACK_ID";
    public static final String ARG_TITLE = "TITLE";
    public static final String ARG_DELETE = "DELETE";
    public static final String ARG_CANCEL = "CANCEL";
    public static final String ARG_VALIDATE = "VALIDATE";

    protected Context mContext;
    final Calendar cal = Calendar.getInstance();
    private CobaltFragment mListener;
    private String mCallbackId, mDelete, mCancel, mValidate, mTitle;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        mContext = activity;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Bundle args = getArguments();
        if (args != null) {
            int year = args.getInt(ARG_YEAR);
            int month = args.getInt(ARG_MONTH);
            int day = args.getInt(ARG_DAY);
            mCallbackId = args.getString(ARG_CALLBACK_ID);
            mTitle = args.getString(ARG_TITLE);
            mDelete = args.getString(ARG_DELETE);
            mCancel = args.getString(ARG_CANCEL);
            mValidate = args.getString(ARG_VALIDATE);

            if (year != 0 && month >= 0 && day != 0) {
                cal.set(Calendar.YEAR, year);
                cal.set(Calendar.MONTH, month);
                cal.set(Calendar.DAY_OF_MONTH, day);
            }
        }

        if (mDelete == null && mCancel == null && mValidate == null && mTitle == null) {
            return new DatePickerDialog(mContext, this, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
                    cal.get(Calendar.DAY_OF_MONTH));
        }

        else {
            LayoutInflater inflater = (LayoutInflater) ((Activity) mContext).getLayoutInflater();
            final DatePicker datePicker = (DatePicker) inflater.inflate(R.layout.date_picker_cobalt, null);
            AlertDialog.Builder datePickerBuilder = new AlertDialog.Builder(mContext);
            datePickerBuilder.setView(datePicker);

            /*
            // Init the datePicker with mindate under 1900
            //TODO test for under HoneyComb
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            final SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy", Locale.FRANCE);
                
            Calendar minDate = Calendar.getInstance();
            try {
                minDate.setTime(formatter.parse("01.01.1800"));
            } catch (ParseException e) {
                e.printStackTrace();
            }
                
            datePicker.setMinDate(minDate.getTimeInMillis());
               }
            else {
            datePicker.init(1800, 01, 01, new OnDateChangedListener() {
                @Override
                public void onDateChanged(DatePicker datePicker, int year, int month, int day) {
                    Calendar newDate = Calendar.getInstance();
                    newDate.set(year, month, day);
                }
            });
               }*/

            // View settings
            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH);
            int day = cal.get(Calendar.DAY_OF_MONTH);

            if (mTitle != null) {
                datePickerBuilder.setTitle(mTitle);
            }

            // Buttons
            datePickerBuilder.setNegativeButton(mDelete, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    cal.clear();
                    if (mListener != null) {
                        mListener.sendDate(-1, -1, -1, mCallbackId);
                    }
                }
            });

            datePickerBuilder.setNeutralButton(mCancel, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int arg1) {
                    dialog.dismiss();
                }
            });

            datePickerBuilder.setPositiveButton(mValidate, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    cal.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
                    if (mListener != null) {
                        mListener.sendDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
                                cal.get(Calendar.DAY_OF_MONTH), mCallbackId);
                    }
                    dialog.dismiss();
                }
            });
            final AlertDialog dialog = datePickerBuilder.create();

            datePicker.init(year, month, day, new DatePicker.OnDateChangedListener() {

                @Override
                public void onDateChanged(DatePicker view, int year, int month, int day) {
                    cal.set(Calendar.YEAR, year);
                    cal.set(Calendar.MONTH, month);
                    cal.set(Calendar.DAY_OF_MONTH, day);
                }
            });

            return dialog;
        }
    }

    public void setListener(CobaltFragment listener) {
        mListener = listener;
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month);
        cal.set(Calendar.DAY_OF_MONTH, day);

        if (mListener != null) {
            mListener.sendDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH),
                    mCallbackId);
        }
    }

}