/**
* Odoo, Open Source Management Solution
* Copyright (C) 2012-today Odoo SA (<http:www.odoo.com>)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http:www.gnu.org/licenses/>
*
* Created on 7/1/15 5:10 PM
*/
package odoo.controls;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import com.odoo.core.utils.ODateUtils;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateTimePicker {
public static final String TAG = DateTimePicker.class.getSimpleName();
public enum Type {
Date, DateTime, Time
}
private Context mContext = null;
private Builder mBuilder;
private DatePicker mDatePicker;
private TimePicker mTimePicker;
public DateTimePicker() {
}
public DateTimePicker(Context context, Builder builder) {
mContext = context;
mBuilder = builder;
}
public void show() {
if (mBuilder.getType() == Type.Time) {
mTimePicker = new TimePicker(mContext, mBuilder.getTime());
mTimePicker.setPickerCallback(callBack);
mTimePicker.show();
} else {
mDatePicker = new DatePicker(mContext, mBuilder.getDate());
mDatePicker.setPickerCallback(callBack);
mDatePicker.show();
}
}
PickerCallBack callBack = new PickerCallBack() {
@Override
public void onTimePick(String time) {
mBuilder.getCallBack().onTimePick(time);
mTimePicker.dismiss();
}
@Override
public void onDatePick(String date) {
mDatePicker.dismiss();
if (mBuilder.getType() == Type.DateTime) {
mTimePicker = new TimePicker(mContext, mBuilder.getTime());
mTimePicker.setPickerCallback(callBack);
mTimePicker.show();
}
mBuilder.getCallBack().onDatePick(date);
}
};
public static class Builder {
private Context mContext;
private Type mType = Type.DateTime;
private PickerCallBack mCallback;
private String mDialogTitle = null;
private String time = null;
private String date = null;
private String dateTime = null;
public Builder(Context context) {
mContext = context;
}
public Builder setDate(String date) {
this.date = date;
return this;
}
public Builder setTime(String time) {
this.time = time;
return this;
}
public Builder setDateTime(String dateTime) {
if (dateTime != null) {
date = ODateUtils.parseDate(dateTime, ODateUtils.DEFAULT_FORMAT,
ODateUtils.DEFAULT_DATE_FORMAT);
time = ODateUtils.parseDate(dateTime, ODateUtils.DEFAULT_FORMAT,
ODateUtils.DEFAULT_TIME_FORMAT);
}
return this;
}
public Calendar getDate() {
if (date != null) {
Date dt = ODateUtils.createDateObject(date, ODateUtils.DEFAULT_DATE_FORMAT, false);
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
return cal;
}
return null;
}
public Calendar getTime() {
if (time != null) {
Date dt = ODateUtils.createDateObject(time, ODateUtils.DEFAULT_TIME_FORMAT, false);
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
return cal;
}
return null;
}
public Builder setType(Type type) {
mType = type;
return this;
}
public Type getType() {
return mType;
}
public Builder setCallBack(PickerCallBack callback) {
mCallback = callback;
return this;
}
public PickerCallBack getCallBack() {
return mCallback;
}
public Builder setTitle(String title) {
mDialogTitle = title;
return this;
}
public Builder setTitle(int res_id) {
mDialogTitle = mContext.getResources().getString(res_id);
return this;
}
public String getDialogTitle() {
return mDialogTitle;
}
public DateTimePicker build() {
DateTimePicker picker = new DateTimePicker(mContext, this);
return picker;
}
}
public class DatePicker implements DatePickerDialog.OnDateSetListener,
DialogInterface.OnCancelListener {
private PickerCallBack mCallback;
private boolean called = false;
private Dialog mDialog;
public DatePicker(Context context, Calendar date) {
final Calendar c = (date != null) ? date : Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
mDialog = new DatePickerDialog(context, this, year, month, day);
mDialog.setOnCancelListener(this);
}
@Override
public void onCancel(DialogInterface dialog) {
}
@Override
public void onDateSet(android.widget.DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
if (mCallback != null && !called) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, monthOfYear);
cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
cal.set(Calendar.YEAR, year);
Date now = cal.getTime();
String date = new SimpleDateFormat(ODateUtils.DEFAULT_DATE_FORMAT)
.format(now);
mCallback.onDatePick(date);
called = true;
}
}
public void setPickerCallback(PickerCallBack callback) {
mCallback = callback;
}
public void show() {
mDialog.show();
}
public void dismiss() {
mDialog.dismiss();
}
}
public class TimePicker implements TimePickerDialog.OnTimeSetListener,
DialogInterface.OnCancelListener {
private PickerCallBack mCallback;
private TimePickerDialog mDialog = null;
public TimePicker(Context context, Calendar time) {
final Calendar c = (time != null) ? time : Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
mDialog = new TimePickerDialog(context, this, hour, minute, false);
mDialog.setOnCancelListener(this);
}
@Override
public void onTimeSet(android.widget.TimePicker view, int hourOfDay,
int minute) {
if (mCallback != null) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, hourOfDay);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.MILLISECOND, 0);
Date now = cal.getTime();
String time = new SimpleDateFormat(ODateUtils.DEFAULT_TIME_FORMAT)
.format(now);
mCallback.onTimePick(time);
}
}
@Override
public void onCancel(DialogInterface dialog) {
}
public void setPickerCallback(PickerCallBack callback) {
mCallback = callback;
}
public void show() {
mDialog.show();
}
public void dismiss() {
mDialog.dismiss();
}
}
public interface PickerCallBack {
public void onDatePick(String date);
public void onTimePick(String time);
}
}