diff --git a/ui/dialogs/dialogs.android.ts b/ui/dialogs/dialogs.android.ts index ef3dfcad4..067d0f70c 100644 --- a/ui/dialogs/dialogs.android.ts +++ b/ui/dialogs/dialogs.android.ts @@ -13,6 +13,9 @@ function createAlertDialog(options?: dialogs.DialogOptions): android.app.AlertDi var alert = new android.app.AlertDialog.Builder(appmodule.android.foregroundActivity); alert.setTitle(options && types.isString(options.title) ? options.title : ""); alert.setMessage(options && types.isString(options.message) ? options.message : ""); + if (options && options.cancelable === false) { + alert.setCancelable(false); + } return alert; } @@ -72,6 +75,11 @@ function addButtonsToAlertDialog(alert: android.app.AlertDialog.Builder, options } })); } + alert.setOnDismissListener(new android.content.DialogInterface.OnDismissListener({ + onDismiss: function() { + callback(false); + } + })); } export function alert(arg: any): Promise { @@ -87,6 +95,11 @@ export function alert(arg: any): Promise { resolve(); } })); + alert.setOnDismissListener(new android.content.DialogInterface.OnDismissListener({ + onDismiss: function() { + resolve(); + } + })); showDialog(alert); @@ -262,6 +275,9 @@ export function action(arg: any): Promise { var alert = new android.app.AlertDialog.Builder(activity); var message = options && types.isString(options.message) ? options.message : ""; var title = options && types.isString(options.title) ? options.title : ""; + if (options && options.cancelable === false) { + alert.setCancelable(false); + } if (title) { alert.setTitle(title); @@ -289,6 +305,17 @@ export function action(arg: any): Promise { } })); } + + alert.setOnDismissListener(new android.content.DialogInterface.OnDismissListener({ + onDismiss: function() { + if (types.isString(options.cancelButtonText)) { + resolve(options.cancelButtonText); + } else { + resolve(""); + } + } + })); + showDialog(alert); } catch (ex) { diff --git a/ui/dialogs/dialogs.d.ts b/ui/dialogs/dialogs.d.ts index 8114eb669..d134fc707 100644 --- a/ui/dialogs/dialogs.d.ts +++ b/ui/dialogs/dialogs.d.ts @@ -81,11 +81,21 @@ declare module "ui/dialogs" { * @param options The options for the dialog box. */ export function action(options: ActionOptions): Promise; + + /** + * Provides options for the dialog. + */ + export interface CancelableOptions { + /** + * [Android only] Gets or sets if the dialog can be canceled by taping outside of the dialog. + */ + cancelable?: boolean; + } /** * Provides options for the dialog. */ - export interface ActionOptions { + export interface ActionOptions extends CancelableOptions { /** * Gets or sets the dialog title. */ @@ -110,7 +120,7 @@ declare module "ui/dialogs" { /** * Provides options for the dialog. */ - export interface DialogOptions { + export interface DialogOptions extends CancelableOptions { /** * Gets or sets the dialog title. */ @@ -120,6 +130,7 @@ declare module "ui/dialogs" { * Gets or sets the dialog message. */ message?: string; + } /**