From 41cc6881d45d53b280a8e3e6ac13860c992194af Mon Sep 17 00:00:00 2001 From: Juggle Date: Thu, 14 Jan 2016 18:26:21 +0300 Subject: [PATCH 01/11] Added dateTimeFormat parameter for show* functions --- .../me/nucleartux/date/DateFormatHelper.java | 4 ++-- .../java/me/nucleartux/date/DateModule.java | 20 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/me/nucleartux/date/DateFormatHelper.java b/src/main/java/me/nucleartux/date/DateFormatHelper.java index c7fe209..f4f6606 100644 --- a/src/main/java/me/nucleartux/date/DateFormatHelper.java +++ b/src/main/java/me/nucleartux/date/DateFormatHelper.java @@ -6,14 +6,14 @@ import java.text.ParseException; public class DateFormatHelper { - public static Calendar parseDate(String date) { + public static Calendar parseDate(String date, String dateTimeFormat) { Calendar initialDate = Calendar.getInstance(); if (date != null && !date.equals("")) { try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US); + SimpleDateFormat sdf = new SimpleDateFormat(dateTimeFormat); initialDate.setTime(sdf.parse(date)); } catch (ParseException e) diff --git a/src/main/java/me/nucleartux/date/DateModule.java b/src/main/java/me/nucleartux/date/DateModule.java index 96c507c..a783d41 100644 --- a/src/main/java/me/nucleartux/date/DateModule.java +++ b/src/main/java/me/nucleartux/date/DateModule.java @@ -23,37 +23,37 @@ public String getName() { @ReactMethod public void showDatepicker(Callback errorCallback, Callback successCallback) { - this.showDatepickerWithInitialDate(null, errorCallback, successCallback); + this.showDatepickerWithInitialDate(null, null, errorCallback, successCallback); } @ReactMethod - public void showDatepickerWithInitialDate(String initialDateString, Callback errorCallback, + public void showDatepickerWithInitialDate(String dateTimeFormat, String initialDateString, Callback errorCallback, Callback successCallback) { - DialogFragment dateDialog = new DatePicker(DateFormatHelper.parseDate(initialDateString), + DialogFragment dateDialog = new DatePicker(DateFormatHelper.parseDate(initialDateString, dateTimeFormat), errorCallback, successCallback); dateDialog.show(mActivity.getSupportFragmentManager(), "datePicker"); } @ReactMethod - public void showDatepickerWithInitialMinMaxDate(String initialDateString, + public void showDatepickerWithInitialMinMaxDate(String dateTimeFormat, String initialDateString, String minDateString, String maxDateString, Callback errorCallback, Callback successCallback) { - DialogFragment dateDialog = new DatePicker(DateFormatHelper.parseDate(initialDateString), - DateFormatHelper.parseDate(minDateString), - DateFormatHelper.parseDate(maxDateString), + DialogFragment dateDialog = new DatePicker(DateFormatHelper.parseDate(initialDateString, dateTimeFormat), + DateFormatHelper.parseDate(minDateString, dateTimeFormat), + DateFormatHelper.parseDate(maxDateString, dateTimeFormat), errorCallback, successCallback); dateDialog.show(mActivity.getSupportFragmentManager(), "datePicker"); } @ReactMethod public void showTimepicker(Callback errorCallback, Callback successCallback) { - this.showTimepickerWithInitialTime(null, errorCallback, successCallback); + this.showTimepickerWithInitialTime(null, null, errorCallback, successCallback); } @ReactMethod - public void showTimepickerWithInitialTime(String initialDateString, Callback errorCallback, + public void showTimepickerWithInitialTime(String dateTimeFormat, String initialDateString, Callback errorCallback, Callback successCallback) { - DialogFragment dateDialog = new TimePicker(DateFormatHelper.parseDate(initialDateString), + DialogFragment dateDialog = new TimePicker(DateFormatHelper.parseDate(initialDateString, dateTimeFormat), errorCallback, successCallback); dateDialog.show(mActivity.getSupportFragmentManager(), "timePicker"); } From 69fdf87134b61b29f4aa455ef425ad263a7666a1 Mon Sep 17 00:00:00 2001 From: Ara Israelyan Date: Tue, 16 Feb 2016 14:27:18 +0300 Subject: [PATCH 02/11] Update build.gradle --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 9cb439f..37462c0 100644 --- a/build.gradle +++ b/build.gradle @@ -30,5 +30,5 @@ repositories { } dependencies { - compile 'com.facebook.react:react-native:0.11.+' -} \ No newline at end of file + compile 'com.facebook.react:react-native:0.19.+' +} From 20d82361d7d9c8d466490412802ffc07f583494f Mon Sep 17 00:00:00 2001 From: Ara Israelyan Date: Tue, 16 Feb 2016 14:31:31 +0300 Subject: [PATCH 03/11] Update DateModule.java --- .../java/me/nucleartux/date/DateModule.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/nucleartux/date/DateModule.java b/src/main/java/me/nucleartux/date/DateModule.java index a783d41..c361656 100644 --- a/src/main/java/me/nucleartux/date/DateModule.java +++ b/src/main/java/me/nucleartux/date/DateModule.java @@ -9,9 +9,8 @@ import com.facebook.react.bridge.ReactMethod; public class DateModule extends ReactContextBaseJavaModule { - private FragmentActivity mActivity = null; - public DateModule(ReactApplicationContext reactContext, FragmentActivity activity) { + public DateModule(ReactApplicationContext reactContext) { super(reactContext); mActivity = activity; } @@ -31,7 +30,10 @@ public void showDatepickerWithInitialDate(String dateTimeFormat, String initialD Callback successCallback) { DialogFragment dateDialog = new DatePicker(DateFormatHelper.parseDate(initialDateString, dateTimeFormat), errorCallback, successCallback); - dateDialog.show(mActivity.getSupportFragmentManager(), "datePicker"); + Activity activity = getCurrentActivity(); + if (activity != null) { + dateDialog.show(activity.getFragmentManager(), "datePicker"); + } } @ReactMethod @@ -42,7 +44,10 @@ public void showDatepickerWithInitialMinMaxDate(String dateTimeFormat, String in DateFormatHelper.parseDate(minDateString, dateTimeFormat), DateFormatHelper.parseDate(maxDateString, dateTimeFormat), errorCallback, successCallback); - dateDialog.show(mActivity.getSupportFragmentManager(), "datePicker"); + Activity activity = getCurrentActivity(); + if (activity != null) { + dateDialog.show(activity.getFragmentManager(), "datePicker"); + } } @ReactMethod @@ -55,6 +60,9 @@ public void showTimepickerWithInitialTime(String dateTimeFormat, String initialD Callback successCallback) { DialogFragment dateDialog = new TimePicker(DateFormatHelper.parseDate(initialDateString, dateTimeFormat), errorCallback, successCallback); - dateDialog.show(mActivity.getSupportFragmentManager(), "timePicker"); + Activity activity = getCurrentActivity(); + if (activity != null) { + dateDialog.show(activity.getFragmentManager(), "datePicker"); + } } } From 0813234af08716bc17b6f30d4c2482d165692625 Mon Sep 17 00:00:00 2001 From: Ara Israelyan Date: Tue, 16 Feb 2016 14:32:22 +0300 Subject: [PATCH 04/11] Update ReactDatePackage.java --- .../java/me/nucleartux/date/ReactDatePackage.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/main/java/me/nucleartux/date/ReactDatePackage.java b/src/main/java/me/nucleartux/date/ReactDatePackage.java index 42101c8..da0cfa4 100644 --- a/src/main/java/me/nucleartux/date/ReactDatePackage.java +++ b/src/main/java/me/nucleartux/date/ReactDatePackage.java @@ -13,17 +13,12 @@ import java.util.List; public class ReactDatePackage implements ReactPackage { - private FragmentActivity mActivity = null; - - public ReactDatePackage(FragmentActivity activity){ - mActivity = activity; - } - + @Override public List createNativeModules( ReactApplicationContext reactContext) { List modules = new ArrayList<>(); - modules.add(new DateModule(reactContext, mActivity)); + modules.add(new DateModule(reactContext)); return modules; } @@ -36,4 +31,4 @@ public List> createJSModules() { public List createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); } -} \ No newline at end of file +} From 805d9816b97e15508ebf0bcae3e2c6a9e3262120 Mon Sep 17 00:00:00 2001 From: Ara Israelyan Date: Tue, 16 Feb 2016 15:33:01 +0300 Subject: [PATCH 05/11] Update README.md --- README.md | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 0899773..a369784 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ React Native date and time pickers for Android #### Step 1 - NPM Install ```shell -npm install --save react-native-date +npm install --save react-native-date@https://github.com/juggleru/react-native-date.git --save ``` #### Step 2 - Update Gradle Settings @@ -36,31 +36,17 @@ dependencies { // file: android/app/source/main/java/com/{projectName}.MainActivity.java ... import me.nucleartux.date.ReactDatePackage; // import -import android.support.v4.app.FragmentActivity; public class MainActivity extends FragmentActivity implements DefaultHardwareBackBtnHandler { // ! extends from FragmentActivity - - private ReactInstanceManager mReactInstanceManager; - private ReactRootView mReactRootView; - +... @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mReactRootView = new ReactRootView(this); - mReactInstanceManager = ReactInstanceManager.builder() - .setApplication(getApplication()) - .setBundleAssetName("index.android.bundle") - .setJSMainModuleName("index.android") - .addPackage(new MainReactPackage()) - .addPackage(new ReactDatePackage(this)) // register react date package here - .setUseDeveloperSupport(BuildConfig.DEBUG) - .setInitialLifecycleState(LifecycleState.RESUMED) - .build(); - mReactRootView.startReactApplication(mReactInstanceManager, "AwesomeProject", null); - setContentView(mReactRootView); + protected List getPackages() { + return Arrays.asList( + new MainReactPackage(), + new ReactDatePackage() // register react date package here + ); } -... - +} ``` #### Step 5 - Require and use in Javascript From a3dabf70bd00c903531fbc042abc540cb45cad7f Mon Sep 17 00:00:00 2001 From: Ara Israelyan Date: Tue, 16 Feb 2016 15:39:13 +0300 Subject: [PATCH 06/11] Update DateModule.java --- src/main/java/me/nucleartux/date/DateModule.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/nucleartux/date/DateModule.java b/src/main/java/me/nucleartux/date/DateModule.java index c361656..ad379fb 100644 --- a/src/main/java/me/nucleartux/date/DateModule.java +++ b/src/main/java/me/nucleartux/date/DateModule.java @@ -1,7 +1,7 @@ package me.nucleartux.date; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.FragmentActivity; +import android.app.DialogFragment; +import android.app.Activity; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.ReactApplicationContext; @@ -12,7 +12,6 @@ public class DateModule extends ReactContextBaseJavaModule { public DateModule(ReactApplicationContext reactContext) { super(reactContext); - mActivity = activity; } @Override From 6add0ced90c57f2c67ed3f1a4fa52412a7488caa Mon Sep 17 00:00:00 2001 From: Ara Israelyan Date: Tue, 16 Feb 2016 15:42:49 +0300 Subject: [PATCH 07/11] Update DateModule.java --- .../java/me/nucleartux/date/DateModule.java | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/main/java/me/nucleartux/date/DateModule.java b/src/main/java/me/nucleartux/date/DateModule.java index ad379fb..e020266 100644 --- a/src/main/java/me/nucleartux/date/DateModule.java +++ b/src/main/java/me/nucleartux/date/DateModule.java @@ -1,7 +1,7 @@ package me.nucleartux.date; -import android.app.DialogFragment; import android.app.Activity; +import android.app.DialogFragment; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.ReactApplicationContext; @@ -21,13 +21,24 @@ public String getName() { @ReactMethod public void showDatepicker(Callback errorCallback, Callback successCallback) { - this.showDatepickerWithInitialDate(null, null, errorCallback, successCallback); + this.showDatepickerWithInitialDate(null, errorCallback, successCallback); + } + + @ReactMethod + public void showDatepickerWithInitialDate(String initialDateString, Callback errorCallback, + Callback successCallback) { + DialogFragment dateDialog = new DatePicker(DateFormatHelper.parseDate(initialDateString), + errorCallback, successCallback); + Activity activity = getCurrentActivity(); + if (activity != null) { + dateDialog.show(activity.getFragmentManager(), "datePicker"); + } } @ReactMethod - public void showDatepickerWithInitialDate(String dateTimeFormat, String initialDateString, Callback errorCallback, + public void showDatepickerWithInitialDateInMilliseconds(String initialDateString, Callback errorCallback, Callback successCallback) { - DialogFragment dateDialog = new DatePicker(DateFormatHelper.parseDate(initialDateString, dateTimeFormat), + DialogFragment dateDialog = new DatePicker(DateFormatHelper.parseDateInMilliseconds(Long.parseLong(initialDateString)), errorCallback, successCallback); Activity activity = getCurrentActivity(); if (activity != null) { @@ -36,12 +47,12 @@ public void showDatepickerWithInitialDate(String dateTimeFormat, String initialD } @ReactMethod - public void showDatepickerWithInitialMinMaxDate(String dateTimeFormat, String initialDateString, + public void showDatepickerWithInitialMinMaxDate(String initialDateString, String minDateString, String maxDateString, Callback errorCallback, Callback successCallback) { - DialogFragment dateDialog = new DatePicker(DateFormatHelper.parseDate(initialDateString, dateTimeFormat), - DateFormatHelper.parseDate(minDateString, dateTimeFormat), - DateFormatHelper.parseDate(maxDateString, dateTimeFormat), + DialogFragment dateDialog = new DatePicker(DateFormatHelper.parseDate(initialDateString), + DateFormatHelper.parseDate(minDateString), + DateFormatHelper.parseDate(maxDateString), errorCallback, successCallback); Activity activity = getCurrentActivity(); if (activity != null) { @@ -51,17 +62,17 @@ public void showDatepickerWithInitialMinMaxDate(String dateTimeFormat, String in @ReactMethod public void showTimepicker(Callback errorCallback, Callback successCallback) { - this.showTimepickerWithInitialTime(null, null, errorCallback, successCallback); + this.showTimepickerWithInitialTime(null, errorCallback, successCallback); } @ReactMethod - public void showTimepickerWithInitialTime(String dateTimeFormat, String initialDateString, Callback errorCallback, + public void showTimepickerWithInitialTime(String initialDateString, Callback errorCallback, Callback successCallback) { - DialogFragment dateDialog = new TimePicker(DateFormatHelper.parseDate(initialDateString, dateTimeFormat), + DialogFragment dateDialog = new TimePicker(DateFormatHelper.parseDate(initialDateString), errorCallback, successCallback); Activity activity = getCurrentActivity(); if (activity != null) { - dateDialog.show(activity.getFragmentManager(), "datePicker"); + dateDialog.show(activity.getFragmentManager(), "timePicker"); } } } From ae6b4411ae37f19552d39ea12a869e4dab0dc6ed Mon Sep 17 00:00:00 2001 From: Ara Israelyan Date: Tue, 16 Feb 2016 15:43:45 +0300 Subject: [PATCH 08/11] Update DateFormatHelper.java --- .../me/nucleartux/date/DateFormatHelper.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/nucleartux/date/DateFormatHelper.java b/src/main/java/me/nucleartux/date/DateFormatHelper.java index f4f6606..fe4f0a0 100644 --- a/src/main/java/me/nucleartux/date/DateFormatHelper.java +++ b/src/main/java/me/nucleartux/date/DateFormatHelper.java @@ -6,14 +6,14 @@ import java.text.ParseException; public class DateFormatHelper { - public static Calendar parseDate(String date, String dateTimeFormat) { + public static Calendar parseDate(String date) { Calendar initialDate = Calendar.getInstance(); if (date != null && !date.equals("")) { try { - SimpleDateFormat sdf = new SimpleDateFormat(dateTimeFormat); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US); initialDate.setTime(sdf.parse(date)); } catch (ParseException e) @@ -24,4 +24,22 @@ public static Calendar parseDate(String date, String dateTimeFormat) { return initialDate; } + + public static Calendar parseDateInMilliseconds(long ms) { + Calendar initialDate = Calendar.getInstance(); + + if (ms > 0) + { + try + { + initialDate.setTimeInMillis(ms); + } + catch (Exception e) + { + return Calendar.getInstance(); + } + } + + return initialDate; + } } From 30f05a67aba30723fbf33e95221ccb735fb404c6 Mon Sep 17 00:00:00 2001 From: Ara Israelyan Date: Tue, 16 Feb 2016 15:44:38 +0300 Subject: [PATCH 09/11] Update DatePicker.java --- src/main/java/me/nucleartux/date/DatePicker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/nucleartux/date/DatePicker.java b/src/main/java/me/nucleartux/date/DatePicker.java index 651275b..99e7f0d 100644 --- a/src/main/java/me/nucleartux/date/DatePicker.java +++ b/src/main/java/me/nucleartux/date/DatePicker.java @@ -3,7 +3,7 @@ import android.app.DatePickerDialog; import android.app.Dialog; import android.os.Bundle; -import android.support.v4.app.DialogFragment; +import android.app.DialogFragment; import com.facebook.react.bridge.Callback; From 68cd02dfd2071468326d4f90ae0143bed9b1fcf9 Mon Sep 17 00:00:00 2001 From: Ara Israelyan Date: Tue, 16 Feb 2016 15:45:18 +0300 Subject: [PATCH 10/11] Update ReactDatePackage.java --- src/main/java/me/nucleartux/date/ReactDatePackage.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/nucleartux/date/ReactDatePackage.java b/src/main/java/me/nucleartux/date/ReactDatePackage.java index da0cfa4..4104f79 100644 --- a/src/main/java/me/nucleartux/date/ReactDatePackage.java +++ b/src/main/java/me/nucleartux/date/ReactDatePackage.java @@ -1,6 +1,6 @@ package me.nucleartux.date; -import android.support.v4.app.FragmentActivity; +import android.app.Activity; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.JavaScriptModule; @@ -13,7 +13,7 @@ import java.util.List; public class ReactDatePackage implements ReactPackage { - + @Override public List createNativeModules( ReactApplicationContext reactContext) { From a860e2ff465d6d9dc0850a83ed1533abd65e9ea0 Mon Sep 17 00:00:00 2001 From: Ara Israelyan Date: Tue, 16 Feb 2016 15:45:56 +0300 Subject: [PATCH 11/11] Update TimePicker.java --- src/main/java/me/nucleartux/date/TimePicker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/nucleartux/date/TimePicker.java b/src/main/java/me/nucleartux/date/TimePicker.java index 267f6ee..2cb425c 100644 --- a/src/main/java/me/nucleartux/date/TimePicker.java +++ b/src/main/java/me/nucleartux/date/TimePicker.java @@ -3,7 +3,7 @@ import android.app.Dialog; import android.app.TimePickerDialog; import android.os.Bundle; -import android.support.v4.app.DialogFragment; +import android.app.DialogFragment; import android.text.format.DateFormat; import com.facebook.react.bridge.Callback;