Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(android): fixes #5 #9

Merged
merged 5 commits into from
Mar 19, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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