Java tutorial
/* * Copyright (C) 2015 Federico Iosue (federico.iosue@gmail.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.dycody.android.idealnote.utils.date; import android.app.DatePickerDialog.OnDateSetListener; import android.app.TimePickerDialog.OnTimeSetListener; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; import android.widget.DatePicker; import com.dycody.android.idealnote.models.listeners.OnReminderPickedListener; import com.dycody.android.idealnote.utils.Constants; import com.fourmob.datetimepicker.date.DatePickerDialog; import com.sleepbot.datetimepicker.time.TimePickerDialog; import java.util.Calendar; import be.billington.calendar.recurrencepicker.RecurrencePickerDialog; public class ReminderPickers implements OnDateSetListener, OnTimeSetListener, RecurrencePickerDialog.OnRecurrenceSetListener { public static final int TYPE_GOOGLE = 0; public static final int TYPE_AOSP = 1; private FragmentActivity mActivity; private OnReminderPickedListener mOnReminderPickedListener; private int pickerType; private int reminderYear; private int reminderMonth; private int reminderDay; private int hourOfDay; private int minutes; private boolean timePickerCalledAlready = false; private boolean recurrencePickerCalledAlready = false; private long presetDateTime; private String recurrenceRule; public ReminderPickers(FragmentActivity mActivity, OnReminderPickedListener mOnReminderPickedListener, int pickerType) { this.mActivity = mActivity; this.mOnReminderPickedListener = mOnReminderPickedListener; this.pickerType = pickerType; } public void pick() { pick(null); } public void pick(Long presetDateTime) { pick(presetDateTime, ""); } public void pick(Long presetDateTime, String recurrenceRule) { this.presetDateTime = DateUtils.getCalendar(presetDateTime).getTimeInMillis(); this.recurrenceRule = recurrenceRule; if (pickerType == TYPE_AOSP) { timePickerCalledAlready = false; // Timepicker will be automatically called after date is inserted by user showDatePickerDialog(this.presetDateTime); } else { showDateTimeSelectors(this.presetDateTime); } } /** * Show date and time pickers */ protected void showDateTimeSelectors(long reminder) { // Sets actual time or previously saved in note final Calendar now = DateUtils.getCalendar(reminder); DatePickerDialog mCalendarDatePickerDialog = DatePickerDialog .newInstance((dialog, year, monthOfYear, dayOfMonth) -> { reminderYear = year; reminderMonth = monthOfYear; reminderDay = dayOfMonth; TimePickerDialog mRadialTimePickerDialog = TimePickerDialog .newInstance((radialPickerLayout, hour, minute) -> { hourOfDay = hour; minutes = minute; showRecurrencePickerDialog(recurrenceRule); }, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), DateUtils.is24HourMode(mActivity)); mRadialTimePickerDialog.show(mActivity.getSupportFragmentManager(), Constants.TAG); }, now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH)); mCalendarDatePickerDialog.show(mActivity.getSupportFragmentManager(), Constants.TAG); } /** * Shows fallback date and time pickers for smaller screens */ public void showDatePickerDialog(long presetDateTime) { Bundle b = new Bundle(); b.putLong(DatePickerDialogFragment.DEFAULT_DATE, presetDateTime); DialogFragment picker = new DatePickerDialogFragment(); picker.setArguments(b); picker.show(mActivity.getSupportFragmentManager(), Constants.TAG); } private void showTimePickerDialog(long presetDateTime) { TimePickerFragment newFragment = new TimePickerFragment(); Bundle bundle = new Bundle(); bundle.putLong(TimePickerFragment.DEFAULT_TIME, presetDateTime); newFragment.setArguments(bundle); newFragment.show(mActivity.getSupportFragmentManager(), Constants.TAG); } private void showRecurrencePickerDialog(String recurrenceRule) { RecurrencePickerDialog recurrencePickerDialog = new RecurrencePickerDialog(); if (recurrenceRule != null && recurrenceRule.length() > 0) { Bundle bundle = new Bundle(); bundle.putString(RecurrencePickerDialog.BUNDLE_RRULE, recurrenceRule); recurrencePickerDialog.setArguments(bundle); } recurrencePickerDialog.setOnRecurrenceSetListener(this); recurrencePickerDialog.show(mActivity.getSupportFragmentManager(), "recurrencePicker"); } @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { reminderYear = year; reminderMonth = monthOfYear; reminderDay = dayOfMonth; if (!timePickerCalledAlready) { // Used to avoid native bug that calls onPositiveButtonPressed in the onClose() timePickerCalledAlready = true; showTimePickerDialog(presetDateTime); } } @Override public void onTimeSet(android.widget.TimePicker view, int hourOfDay, int minute) { this.hourOfDay = hourOfDay; this.minutes = minute; if (!recurrencePickerCalledAlready) { // Used to avoid native bug that calls onPositiveButtonPressed in the onClose() recurrencePickerCalledAlready = true; showRecurrencePickerDialog(recurrenceRule); } } @Override public void onRecurrenceSet(final String rrule) { Calendar c = Calendar.getInstance(); c.set(reminderYear, reminderMonth, reminderDay, hourOfDay, minutes, 0); if (mOnReminderPickedListener != null) { mOnReminderPickedListener.onReminderPicked(c.getTimeInMillis()); mOnReminderPickedListener.onRecurrenceReminderPicked(rrule); } } }