Skip to content

Commit

Permalink
Fixed #94 and #95
Browse files Browse the repository at this point in the history
  • Loading branch information
andrelsmoraes committed Jun 21, 2015
1 parent 47dabd2 commit 14b857e
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 39 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cordova-plugin-datepicker",
"version": "0.8.0",
"version": "0.8.1",
"description": "Cordova DatePicker Plugin",
"cordova": {
"id": "cordova-plugin-datepicker",
Expand All @@ -24,4 +24,4 @@
],
"author": "Vitalii Blagodir <vitalii.blagodir@gmail.com>",
"license": "Apache 2.0"
}
}
4 changes: 2 additions & 2 deletions plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-datepicker"
version="0.8.0">
version="0.8.1">

<name>DatePicker</name>

Expand Down Expand Up @@ -57,4 +57,4 @@
</js-module>
</platform>

</plugin>
</plugin>
121 changes: 86 additions & 35 deletions src/android/DatePickerPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimeZone;
import java.util.Random;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
Expand Down Expand Up @@ -75,6 +76,10 @@ public synchronized void show(final JSONArray data, final CallbackContext callba
cordova.getActivity().runOnUiThread(runnable);
}

private TimePicker timePicker;
private int timePickerHour = 0;
private int timePickerMinute = 0;

private Runnable runnableTimeDialog(final DatePickerPlugin datePickerPlugin,
final Context currentCtx, final CallbackContext callbackContext,
final JsonDate jsonDate, final Calendar calendarDate) {
Expand All @@ -83,16 +88,25 @@ private Runnable runnableTimeDialog(final DatePickerPlugin datePickerPlugin,
public void run() {
final TimeSetListener timeSetListener = new TimeSetListener(datePickerPlugin, callbackContext, calendarDate);
final TimePickerDialog timeDialog = new TimePickerDialog(currentCtx, timeSetListener, jsonDate.hour,
jsonDate.minutes, jsonDate.is24Hour);
jsonDate.minutes, jsonDate.is24Hour) {
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
timePicker = view;
timePickerHour = hourOfDay;
timePickerMinute = minute;
}
};
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
timeDialog.setCancelable(true);
timeDialog.setCanceledOnTouchOutside(false);

if (!jsonDate.nowText.isEmpty()){
timeDialog.setButton(DialogInterface.BUTTON_NEUTRAL, jsonDate.nowText, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Calendar now = Calendar.getInstance();
timeDialog.updateTime(now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE));
if (timePicker != null) {
Calendar now = Calendar.getInstance();
timeSetListener.onTimeSet(timePicker, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE));
}
}
});
}
Expand All @@ -107,10 +121,16 @@ public void onClick(DialogInterface dialog, int which) {
timeDialog.setButton(DialogInterface.BUTTON_POSITIVE, labelOk, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (timePicker != null) {
Calendar now = Calendar.getInstance();
timeSetListener.onTimeSet(timePicker, timePickerHour, timePickerMinute);
}
}
});
}
timeDialog.show();
timeDialog.updateTime(new Random().nextInt(23), new Random().nextInt(59));
timeDialog.updateTime(jsonDate.hour, jsonDate.minutes);
}
};
}
Expand All @@ -125,35 +145,28 @@ public void run() {
final DatePickerDialog dateDialog = new DatePickerDialog(currentCtx, dateSetListener, jsonDate.year,
jsonDate.month, jsonDate.day);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
prepareDialog(dateDialog, callbackContext, currentCtx, jsonDate);
prepareDialog(dateDialog, dateSetListener, callbackContext, currentCtx, jsonDate);
}
else {
prepareDialogPreHoneycomb(dateDialog, callbackContext, currentCtx, jsonDate);
}

dateDialog.show();
}
};
}

private void prepareDialog(final DatePickerDialog dateDialog,
private void prepareDialog(final DatePickerDialog dateDialog, final OnDateSetListener dateListener,
final CallbackContext callbackContext, Context currentCtx, JsonDate jsonDate) {

DatePicker dp = dateDialog.getDatePicker();
if(jsonDate.minDate > 0) {
dp.setMinDate(jsonDate.minDate);
}
if(jsonDate.maxDate > 0 && jsonDate.maxDate > jsonDate.minDate) {
dp.setMaxDate(jsonDate.maxDate);
}

dateDialog.setCancelable(true);
dateDialog.setCanceledOnTouchOutside(false);
if (!jsonDate.todayText.isEmpty()){
dateDialog.setButton(DialogInterface.BUTTON_NEUTRAL, jsonDate.todayText, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Calendar now = Calendar.getInstance();
dateDialog.updateDate(now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH));
DatePicker datePicker = dateDialog.getDatePicker();
dateListener.onDateSet(datePicker, now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH));
}
});
}
Expand All @@ -168,8 +181,18 @@ public void onClick(DialogInterface dialog, int which) {
dateDialog.setButton(DialogInterface.BUTTON_POSITIVE, labelOk, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DatePicker datePicker = dateDialog.getDatePicker();
dateListener.onDateSet(datePicker, datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
}
});

DatePicker dp = dateDialog.getDatePicker();
if(jsonDate.minDate > 0) {
dp.setMinDate(jsonDate.minDate);
}
if(jsonDate.maxDate > 0 && jsonDate.maxDate > jsonDate.minDate) {
dp.setMaxDate(jsonDate.maxDate);
}
}

private void prepareDialogPreHoneycomb(DatePickerDialog dateDialog,
Expand Down Expand Up @@ -243,8 +266,14 @@ public void onDateSet(final DatePicker view, final int year, final int monthOfYe
called = true;
canceled = false;

Log.d("onDateSet", "called: " + called);
Log.d("onDateSet", "canceled: " + canceled);
Log.d("onDateSet", "mode: " + jsonDate.action);

if (ACTION_DATE.equalsIgnoreCase(jsonDate.action)) {
String returnDate = year + "/" + (monthOfYear + 1) + "/" + dayOfMonth;
Log.d("onDateSet", "returnDate: " + returnDate);

callbackContext.success(returnDate);

} else {
Expand Down Expand Up @@ -293,29 +322,51 @@ public void onTimeSet(final TimePicker view, final int hourOfDay, final int minu

private final class JsonDate {

private String action = "date";
private String okText, cancelText, todayText = "", nowText = "";
private long minDate = 0, maxDate = 0;
private int month, day, year, hour, minutes;
private String action = ACTION_DATE;
private String okText = "";
private String cancelText = "";
private String todayText = "";
private String nowText = "";
private long minDate = 0;
private long maxDate = 0;
private int month = 0;
private int day = 0;
private int year = 0;
private int hour = 0;
private int minutes = 0;
private boolean is24Hour = false;

public JsonDate() {
reset(Calendar.getInstance());
}

private void reset(Calendar c) {
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
hour = c.get(Calendar.HOUR_OF_DAY);
minutes = c.get(Calendar.MINUTE);
}

public JsonDate fromJson(JSONArray data) {
try {
JSONObject obj = data.getJSONObject(0);
action = obj.getString("mode");

action = isNotEmpty(obj, "mode") ? obj.getString("mode")
: ACTION_DATE;

minDate = isNotEmpty(obj, "minDate") ? obj.getLong("minDate") : 0l;
maxDate = isNotEmpty(obj, "maxDate") ? obj.getLong("maxDate") : 0l;

okText = isNotEmpty(obj, "okText") ? obj.getString("okText") : "";
cancelText = isNotEmpty(obj, "cancelText") ? obj
.getString("cancelText") : "";
todayText = isNotEmpty(obj, "todayText") ? obj
.getString("todayText") : "";
nowText = isNotEmpty(obj, "nowText") ? obj.getString("nowText")
: "";
is24Hour = isNotEmpty(obj, "is24Hour") ? obj.getBoolean("is24Hour")
: false;

String optionDate = obj.getString("date");

String[] datePart = optionDate.split("/");
Expand All @@ -325,22 +376,22 @@ public JsonDate fromJson(JSONArray data) {
hour = Integer.parseInt(datePart[3]);
minutes = Integer.parseInt(datePart[4]);

minDate = obj.has("minDate") ? obj.getLong("minDate") : 0l;
maxDate = obj.has("maxDate") ? obj.getLong("maxDate") : 0l;

okText = obj.has("okText") ? obj.getString("okText") : "";
cancelText = obj.has("cancelText") ? obj.getString("cancelText") : "";
todayText = obj.has("todayText") ? obj.getString("todayText") : "";
nowText = obj.has("nowText") ? obj.getString("nowText") : "";
is24Hour = obj.has("is24Hour") ? obj.getBoolean("is24Hour")
: false;

} catch (JSONException e) {
reset(Calendar.getInstance());
}

return this;
}

public boolean isNotEmpty(JSONObject object, String key)
throws JSONException {
return object.has(key)
&& !object.isNull(key)
&& object.get(key).toString().length() > 0
&& !JSONObject.NULL.toString().equals(
object.get(key).toString());
}

}

}

0 comments on commit 14b857e

Please sign in to comment.