diff --git a/README.md b/README.md
index 87e10e0..401def5 100644
--- a/README.md
+++ b/README.md
@@ -30,7 +30,7 @@ export default class App extends Component {
);
@@ -44,10 +44,6 @@ const styles = StyleSheet.create({
justifyContent: 'center',
backgroundColor: 'white',
},
- picker: {
- width: 300,
- height: 170,
- },
})
```
diff --git a/android/.DS_Store b/android/.DS_Store
index 0387394..db3f863 100644
Binary files a/android/.DS_Store and b/android/.DS_Store differ
diff --git a/android/build.gradle b/android/build.gradle
index 4264ac1..7ea38f9 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -25,4 +25,6 @@ dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.facebook.react:react-native:+'
compile 'cn.carbswang.android:NumberPickerView:1.1.1'
+ compile 'org.apache.commons:commons-lang3:3.6'
+
}
diff --git a/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java b/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java
index e01ea4b..4ccfd33 100644
--- a/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java
+++ b/android/src/main/java/com/henninghall/date_picker/DatePickerManager.java
@@ -8,7 +8,10 @@ import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;
+import org.apache.commons.lang3.LocaleUtils;
+
import java.util.Date;
+import java.util.Locale;
import java.util.Map;
@@ -33,6 +36,11 @@ public class DatePickerManager extends SimpleViewManager {
view.setDate(new Date((long)date));
}
+ @ReactProp(name = "locale")
+ public void setLocale(PickerView view, @Nullable String locale) {
+ view.setLocale(LocaleUtils.toLocale(locale));
+ }
+
public Map getExportedCustomBubblingEventTypeConstants() {
return MapBuilder.builder()
.put("dateChange", MapBuilder.of("phasedRegistrationNames",
diff --git a/android/src/main/java/com/henninghall/date_picker/PickerView.java b/android/src/main/java/com/henninghall/date_picker/PickerView.java
index 2e2a3c9..216d479 100644
--- a/android/src/main/java/com/henninghall/date_picker/PickerView.java
+++ b/android/src/main/java/com/henninghall/date_picker/PickerView.java
@@ -1,11 +1,13 @@
package com.henninghall.date_picker;
import android.view.View;
+import android.view.ViewManager;
import android.widget.RelativeLayout;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.uimanager.events.RCTEventEmitter;
+import com.henninghall.date_picker.wheels.AmPmWheel;
import com.henninghall.date_picker.wheels.DayWheel;
import com.henninghall.date_picker.wheels.HourWheel;
import com.henninghall.date_picker.wheels.MinutesWheel;
@@ -24,6 +26,7 @@ public class PickerView extends RelativeLayout {
private HourWheel hourWheel;
private DayWheel dayWheel;
private MinutesWheel minutesWheel;
+ private AmPmWheel ampmWheel;
public PickerView() {
super(DatePickerManager.context);
@@ -39,8 +42,12 @@ public class PickerView extends RelativeLayout {
NumberPickerView minutePicker = (NumberPickerView) rootView.findViewById(R.id.minutes);
minutesWheel = new MinutesWheel(minutePicker, onWheelChangeListener, locale);
+ NumberPickerView ampmPicker = (NumberPickerView) rootView.findViewById(R.id.ampm);
+ ampmWheel = new AmPmWheel(ampmPicker, onWheelChangeListener, locale);
+
dateFormat = new SimpleDateFormat(getDateFormatTemplate(), locale);
+ ((ViewManager) ampmPicker.getParent()).removeView(ampmPicker);
}
WheelChangeListener onWheelChangeListener = new WheelChangeListener(){
@@ -48,8 +55,7 @@ public class PickerView extends RelativeLayout {
public void onChange() {
WritableMap event = Arguments.createMap();
try {
- String dateString = dayWheel.getValue() + " " + hourWheel.getValue() + " " + minutesWheel.getValue();
- Date date = dateFormat.parse(dateString);
+ Date date = dateFormat.parse(getDateString());
event.putDouble("date", date.getTime());
} catch (ParseException e) {
e.printStackTrace();
@@ -60,13 +66,30 @@ public class PickerView extends RelativeLayout {
private String getDateFormatTemplate() {
- return dayWheel.getFormatTemplate() + " " + hourWheel.getFormatTemplate() + " " + minutesWheel.getFormatTemplate();
+ return dayWheel.getFormatTemplate() + " "
+ + hourWheel.getFormatTemplate() + " "
+ + minutesWheel.getFormatTemplate() + " "
+ + ampmWheel.getFormatTemplate();
+ }
+
+ private String getDateString() {
+ return dayWheel.getValue()
+ + " " + hourWheel.getValue()
+ + " " + minutesWheel.getValue()
+ + " " + ampmWheel.getValue();
}
public void setDate(Date date) {
dayWheel.setValue(date);
hourWheel.setValue(date);
minutesWheel.setValue(date);
+ ampmWheel.setValue(date);
}
+ public void setLocale(Locale locale) {
+ dayWheel.setLocale(locale);
+ hourWheel.setLocale(locale);
+ minutesWheel.setLocale(locale);
+ ampmWheel.setLocale(locale);
+ }
}
diff --git a/android/src/main/java/com/henninghall/date_picker/RCTDatePickerManager.java b/android/src/main/java/com/henninghall/date_picker/RCTDatePickerManager.java
deleted file mode 100644
index fb5fb5c..0000000
--- a/android/src/main/java/com/henninghall/date_picker/RCTDatePickerManager.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.henninghall.date_picker;
-
-import android.support.annotation.Nullable;
-import android.view.View;
-
-import com.facebook.react.bridge.Arguments;
-import com.facebook.react.bridge.Callback;
-import com.facebook.react.bridge.ReactContext;
-import com.facebook.react.bridge.WritableMap;
-import com.facebook.react.common.MapBuilder;
-import com.facebook.react.modules.core.DeviceEventManagerModule;
-import com.facebook.react.uimanager.SimpleViewManager;
-import com.facebook.react.uimanager.ThemedReactContext;
-import com.facebook.react.uimanager.annotations.ReactProp;
-import com.facebook.react.uimanager.events.RCTEventEmitter;
-import com.facebook.react.views.image.ReactImageView;
-
-import java.util.Date;
-import java.util.Map;
-
-import static java.security.AccessController.getContext;
-
-
-public class RCTDatePickerManager extends SimpleViewManager {
-
- public static final String REACT_CLASS = "RCTDatePickerManager";
- public static ThemedReactContext context;
-
- @Override
- public String getName() {
- return REACT_CLASS;
- }
-
- @Override
- public PickerView createViewInstance(ThemedReactContext reactContext) {
- RCTDatePickerManager.context = reactContext;
- return new PickerView();
- }
-
- @ReactProp(name = "date")
- public void setDate(PickerView view, @Nullable double date) {
- view.setDate(new Date((long)date));
- }
-
- public Map getExportedCustomBubblingEventTypeConstants() {
- return MapBuilder.builder()
- .put("dateChange", MapBuilder.of("phasedRegistrationNames",
- MapBuilder.of("bubbled", "onChange")
- )
- ).build();
- }
-
-}
-
-
diff --git a/android/src/main/java/com/henninghall/date_picker/RCTDatePickerPackage.java b/android/src/main/java/com/henninghall/date_picker/RCTDatePickerPackage.java
deleted file mode 100644
index 7f1d146..0000000
--- a/android/src/main/java/com/henninghall/date_picker/RCTDatePickerPackage.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.henninghall.date_picker;
-
-import com.facebook.react.ReactPackage;
-import com.facebook.react.bridge.JavaScriptModule;
-import com.facebook.react.bridge.NativeModule;
-import com.facebook.react.bridge.ReactApplicationContext;
-import com.facebook.react.uimanager.ViewManager;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Created by heng on 16/9/5.
- */
-
-public class RCTDatePickerPackage implements ReactPackage {
-
- @Override
- public List createNativeModules(ReactApplicationContext reactContext) {
- return Collections.emptyList();
- }
-
- public List> createJSModules() {
- return Collections.emptyList();
- }
-
- @Override
- public List createViewManagers(ReactApplicationContext reactContext) {
- return Arrays. asList(
- new RCTDatePickerManager()
- );
- }
-}
\ No newline at end of file
diff --git a/android/src/main/java/com/henninghall/date_picker/Utils.java b/android/src/main/java/com/henninghall/date_picker/Utils.java
new file mode 100644
index 0000000..9edce1c
--- /dev/null
+++ b/android/src/main/java/com/henninghall/date_picker/Utils.java
@@ -0,0 +1,16 @@
+package com.henninghall.date_picker;
+
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+public class Utils {
+
+ public static boolean usesAmPm(Locale locale) {
+ DateFormat df = DateFormat.getTimeInstance(DateFormat.FULL, locale);
+ return df instanceof SimpleDateFormat && ((SimpleDateFormat) df).toPattern().contains("a");
+ }
+
+
+}
diff --git a/android/src/main/java/com/henninghall/date_picker/wheels/AmPmWheel.java b/android/src/main/java/com/henninghall/date_picker/wheels/AmPmWheel.java
new file mode 100644
index 0000000..078c2be
--- /dev/null
+++ b/android/src/main/java/com/henninghall/date_picker/wheels/AmPmWheel.java
@@ -0,0 +1,37 @@
+package com.henninghall.date_picker.wheels;
+
+import com.henninghall.date_picker.Utils;
+import com.henninghall.date_picker.WheelChangeListener;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Locale;
+
+import cn.carbswang.android.numberpickerview.library.NumberPickerView;
+
+
+public class AmPmWheel extends Wheel {
+
+ public AmPmWheel(NumberPickerView p, WheelChangeListener listener, Locale locale){
+ super(p, listener, locale);
+ }
+
+ @Override
+ void init() {
+ values.add("AM");
+ values.add("PM");
+
+ picker.setDisplayedValues(values.toArray(new String[0]));
+
+ picker.setMinValue(0);
+ picker.setMaxValue(1);
+ picker.setValue(0);
+ }
+
+ @Override
+ public String getFormatTemplate() {
+ return Utils.usesAmPm(locale) ? "a" : "";
+ }
+
+
+}
diff --git a/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java b/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java
index 9c6ec89..549885d 100644
--- a/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java
+++ b/android/src/main/java/com/henninghall/date_picker/wheels/DayWheel.java
@@ -12,10 +12,8 @@ import cn.carbswang.android.numberpickerview.library.NumberPickerView;
public class DayWheel extends Wheel {
- private static String DAY_FORMAT_TEMPLATE = "yy EEE d MMM";
-
public DayWheel(NumberPickerView p, WheelChangeListener listener, Locale locale){
- super(p, listener, DAY_FORMAT_TEMPLATE, locale);
+ super(p, listener, locale);
}
@Override
@@ -43,7 +41,10 @@ public class DayWheel extends Wheel {
}
-
+ @Override
+ public String getFormatTemplate() {
+ return "yy EEE d MMM";
+ }
}
diff --git a/android/src/main/java/com/henninghall/date_picker/wheels/HourWheel.java b/android/src/main/java/com/henninghall/date_picker/wheels/HourWheel.java
index 86843ab..59898a9 100644
--- a/android/src/main/java/com/henninghall/date_picker/wheels/HourWheel.java
+++ b/android/src/main/java/com/henninghall/date_picker/wheels/HourWheel.java
@@ -1,5 +1,6 @@
package com.henninghall.date_picker.wheels;
+import com.henninghall.date_picker.Utils;
import com.henninghall.date_picker.WheelChangeListener;
import java.util.Calendar;
import java.util.Locale;
@@ -10,12 +11,13 @@ import cn.carbswang.android.numberpickerview.library.NumberPickerView;
public class HourWheel extends Wheel {
public HourWheel(NumberPickerView p, WheelChangeListener listener, Locale locale){
- super(p, listener, "HH", locale);
+ super(p, listener, locale);
}
@Override
void init() {
- int numberOfHours= 24;
+ int numberOfHours = Utils.usesAmPm(locale) ? 12 : 24;
+
for(int i=0; i values;
NumberPickerView picker;
Locale locale;
@@ -23,14 +25,13 @@ public abstract class Wheel {
Calendar cal = Calendar.getInstance();
- Wheel(NumberPickerView picker, final WheelChangeListener listener, String formatTemplate, Locale locale){
- this.formatTemplate = formatTemplate;
+ Wheel(NumberPickerView picker, final WheelChangeListener listener, Locale locale){
this.locale = locale;
this.picker = picker;
- values = new ArrayList<>();
- format = new SimpleDateFormat(formatTemplate, locale);
+ this.values = new ArrayList<>();
+ this.format = new SimpleDateFormat(getFormatTemplate(), locale);
+ refresh();
- init();
picker.setOnValueChangedListener(new NumberPickerView.OnValueChangeListener() {
@Override
public void onValueChange(NumberPickerView picker, int oldVal, int newVal) {
@@ -40,20 +41,22 @@ public abstract class Wheel {
}
- public String getFormatTemplate() {
- return formatTemplate;
- }
-
public String getValue() {
return values.get(picker.getValue());
}
public void setValue(Date date) {
- picker.setValue(values.indexOf(format.format(date)));
+ int index = values.indexOf(format.format(date));
+ if(index > -1) picker.setValue(index);
}
- public void updateLocale(Locale locale) {
- this.locale = locale;
+ public void setLocale(Locale locale) {
+ this.locale =locale;
+ refresh();
+ }
+
+ private void refresh() {
+ this.format = new SimpleDateFormat(getFormatTemplate(), locale);
init();
}
diff --git a/android/src/main/res/.DS_Store b/android/src/main/res/.DS_Store
index 83cdfa5..27f2874 100644
Binary files a/android/src/main/res/.DS_Store and b/android/src/main/res/.DS_Store differ
diff --git a/android/src/main/res/layout/datepicker_view.xml b/android/src/main/res/layout/datepicker_view.xml
index fb0d119..f623789 100644
--- a/android/src/main/res/layout/datepicker_view.xml
+++ b/android/src/main/res/layout/datepicker_view.xml
@@ -69,6 +69,25 @@
app:npv_ItemPaddingHorizontal="3dp"
android:gravity="center"
/>
+
+