Skip to content

Commit

Permalink
Merge pull request #9 from jogboms/master
Browse files Browse the repository at this point in the history
fix(android): fixes #5
  • Loading branch information
shiv19 authored Mar 19, 2018
2 parents 16a6211 + a9d6976 commit dc29912
Show file tree
Hide file tree
Showing 4 changed files with 486 additions and 352 deletions.
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,13 +102,15 @@ time: {
```

options conform to the following interface:
```
```ts
export interface PickerOptions {
title?: string, // iOS ONLY: The title to display above the picker, defaults to "Choose A Time" or "Choose A Date"
theme?: string, // iOS ONLY: light for a light blurry effect, dark for a dark blurry effect - defaults to dark
maxDate?: Date,
minDate?: Date,
startingDate?: Date
startingHour?: number, // Ignored on pickDate()
startingMinute?: number, // Ignored on pickDate()
startingDate?: Date // Ignored on pickTime()
}
```

Expand Down
58 changes: 30 additions & 28 deletions src/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,35 @@
export interface PickerOptions {
type?: string;
title?: string;
theme?: string;
maxDate?: Date;
minDate?: Date;
startingDate?: Date;
is24HourView: boolean;
maxTime?: {
hour: number;
minute: number;
};
minTime?: {
hour: number;
minute: number;
};
type?: string;
title?: string;
theme?: string;
maxDate?: Date;
minDate?: Date;
startingDate?: Date;
startingHour?: number;
startingMinute?: number;
is24HourView: boolean;
maxTime?: {
hour: number;
minute: number;
};
minTime?: {
hour: number;
minute: number;
};
}
export interface PickerResponse {
day?: number;
month?: number;
year?: number;
hour?: number;
minute?: number;
}
day?: number;
month?: number;
year?: number;
hour?: number;
minute?: number;
}
export declare class ModalDatetimepicker {
constructor();
pickDate(options?: PickerOptions): Promise<{}>;
pickTime(options?: PickerOptions): Promise<{}>;
private show(options);
chooseDate(): void;
chooseTime(): void;
close(response?: any): void;
constructor();
pickDate(options?: PickerOptions): Promise<{}>;
pickTime(options?: PickerOptions): Promise<{}>;
private show(options);
chooseDate(): void;
chooseTime(): void;
close(response?: any): void;
}
256 changes: 145 additions & 111 deletions src/modal-datetimepicker.android.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,130 +4,164 @@ declare var com: any;
const Calendar = java.util.Calendar;

export interface PickerOptions {
type?: string;
title?: string;
theme?: string;
maxDate?: Date;
minDate?: Date;
startingDate?: Date;
is24HourView: boolean;
maxTime?: {
hour: number,
minute: number
},
minTime?: {
hour: number,
minute: number
}
type?: string;
title?: string;
theme?: string;
maxDate?: Date;
minDate?: Date;
startingDate?: Date;
startingHour?: number;
startingMinute?: number;
is24HourView: boolean;
maxTime?: {
hour: number;
minute: number;
};
minTime?: {
hour: number;
minute: number;
};
}

export interface PickerResponse {
day?: number,
month?: number,
year?: number,
hour?: number,
minute?: number
day?: number;
month?: number;
year?: number;
hour?: number;
minute?: number;
}

export class ModalDatetimepicker {
constructor() {}
constructor() {}

public pickDate(options?: PickerOptions) {
return new Promise((resolve, reject) => {
if (options.startingDate && typeof options.startingDate.getMonth != 'function') {
reject('startingDate must be a Date.');
}
if (options.minDate && typeof options.minDate.getMonth != 'function') {
reject('minDate must be a Date.');
}
if (options.maxDate && typeof options.maxDate.getMonth != 'function') {
reject('maxDate must be a Date.');
}
//let now = Calendar.getInstance();
let startDate = new Date();
if (options.startingDate) startDate = options.startingDate;
try {
let themeId = android.app.AlertDialog.THEME_DEVICE_DEFAULT_LIGHT;
if (options.theme && options.theme === "dark") {
themeId = android.app.AlertDialog.THEME_DEVICE_DEFAULT_DARK;
public pickDate(options?: PickerOptions) {
return new Promise((resolve, reject) => {
if (
options.startingDate &&
typeof options.startingDate.getMonth !== "function"
) {
reject("startingDate must be a Date.");
}
if (options.minDate && typeof options.minDate.getMonth !== "function") {
reject("minDate must be a Date.");
}
if (options.maxDate && typeof options.maxDate.getMonth !== "function") {
reject("maxDate must be a Date.");
}
// let now = Calendar.getInstance();
let startDate = new Date();
if (options.startingDate) startDate = options.startingDate;
try {
let themeId = android.app.AlertDialog.THEME_DEVICE_DEFAULT_LIGHT;
if (options.theme && options.theme === "dark") {
themeId = android.app.AlertDialog.THEME_DEVICE_DEFAULT_DARK;
}
let datePicker = new android.app.DatePickerDialog(
app.android.foregroundActivity,
themeId,
new android.app.DatePickerDialog.OnDateSetListener({
onDateSet: function(view, year, monthOfYear, dayOfMonth) {
const date = {
day: dayOfMonth,
month: ++monthOfYear,
year: year
};
resolve(date);
}
let datePicker = new android.app.DatePickerDialog(app.android.foregroundActivity,
themeId,
new android.app.DatePickerDialog.OnDateSetListener({
onDateSet: function(view, year, monthOfYear, dayOfMonth) {
const date = {
"day": dayOfMonth,
"month": (++monthOfYear),
"year": year
};
resolve(date);
}
}), startDate.getFullYear(),
startDate.getMonth(),
startDate.getDate());
}),
startDate.getFullYear(),
startDate.getMonth(),
startDate.getDate()
);

if (options.maxDate || options.minDate) {
let datePickerInstance = datePicker.getDatePicker();
if (options.maxDate) datePickerInstance.setMaxDate(options.maxDate.getTime());
if (options.minDate) datePickerInstance.setMinDate(options.minDate.getTime());
}
if (options.maxDate || options.minDate) {
let datePickerInstance = datePicker.getDatePicker();
if (options.maxDate)
datePickerInstance.setMaxDate(options.maxDate.getTime());
if (options.minDate)
datePickerInstance.setMinDate(options.minDate.getTime());
}

datePicker.show();
} catch (err) {
reject(err);
}
});
datePicker.show();
} catch (err) {
reject(err);
}
});
}

public pickTime(options?: PickerOptions) {
options.is24HourView = options.is24HourView || false;
return new Promise((resolve, reject) => {
let now = Calendar.getInstance();
try {
let timePicker = new android.app.TimePickerDialog(app.android.foregroundActivity,
new android.app.TimePickerDialog.OnTimeSetListener({
onTimeSet: function(view, hourOfDay, minute) {
const time = {
"hour": hourOfDay,
"minute": minute
};
resolve(time);
}
}), now.get(Calendar.HOUR_OF_DAY),
now.get(Calendar.MINUTE), options.is24HourView);

timePicker.show();

if (options.minTime) {
if (options.minTime.hour < 24 && options.minTime.hour >= 0
&& options.minTime.minute < 60 && options.minTime.minute >= 0) {
timePicker.updateTime(options.minTime.hour, options.minTime.minute);
android.widget.Toast.makeText(app.android.foregroundActivity, "Minimum Time: " +
options.minTime.hour + ":" + options.minTime.minute,
android.widget.Toast.LENGTH_SHORT).show();
} else {
reject('Invalid minTime');
}
}

if (options.maxTime) {
if (options.maxTime.hour < 24 && options.maxTime.hour >= 0
&& options.maxTime.minute < 60 && options.maxTime.minute >= 0) {
timePicker.updateTime(options.maxTime.hour, options.maxTime.minute);
android.widget.Toast.makeText(app.android.foregroundActivity, "Maximum Time: " +
options.maxTime.hour + ":" + options.maxTime.minute,
android.widget.Toast.LENGTH_SHORT).show();
} else {
reject('Invalid maxTime');
}
public pickTime(options?: PickerOptions) {
options.is24HourView = options.is24HourView || false;
return new Promise((resolve, reject) => {
let now = Calendar.getInstance();
const hour = options.startingHour
? +options.startingHour
: now.get(Calendar.HOUR_OF_DAY);
const minute = options.startingMinute
? +options.startingMinute
: now.get(Calendar.MINUTE);
try {
let timePicker = new android.app.TimePickerDialog(
app.android.foregroundActivity,
new android.app.TimePickerDialog.OnTimeSetListener({
onTimeSet: function(view, hourOfDay, minute) {
const time = {
hour: hourOfDay,
minute: minute
};
resolve(time);
}

timePicker.updateTime(Calendar.HOUR_OF_DAY, Calendar.MINUTE);

} catch (err) {
reject(err);
}),
hour,
minute,
options.is24HourView
);

timePicker.show();

if (options.minTime) {
if (
options.minTime.hour < 24 &&
options.minTime.hour >= 0 &&
options.minTime.minute < 60 &&
options.minTime.minute >= 0
) {
timePicker.updateTime(options.minTime.hour, options.minTime.minute);
android.widget.Toast.makeText(
app.android.foregroundActivity,
"Minimum Time: " +
options.minTime.hour +
":" +
options.minTime.minute,
android.widget.Toast.LENGTH_SHORT
).show();
} else {
reject("Invalid minTime");
}
});
}
}

if (options.maxTime) {
if (
options.maxTime.hour < 24 &&
options.maxTime.hour >= 0 &&
options.maxTime.minute < 60 &&
options.maxTime.minute >= 0
) {
timePicker.updateTime(options.maxTime.hour, options.maxTime.minute);
android.widget.Toast.makeText(
app.android.foregroundActivity,
"Maximum Time: " +
options.maxTime.hour +
":" +
options.maxTime.minute,
android.widget.Toast.LENGTH_SHORT
).show();
} else {
reject("Invalid maxTime");
}
}
} catch (err) {
reject(err);
}
});
}
}
Loading

0 comments on commit dc29912

Please sign in to comment.