diff --git a/BCL.csproj b/BCL.csproj index b9210b2c8..d6d1f20fd 100644 --- a/BCL.csproj +++ b/BCL.csproj @@ -249,6 +249,7 @@ dialogs.d.ts + @@ -362,15 +363,11 @@ - - - - - - + + + - - + diff --git a/ui/dialogs/dialogs-common.ts b/ui/dialogs/dialogs-common.ts new file mode 100644 index 000000000..f6131fea5 --- /dev/null +++ b/ui/dialogs/dialogs-common.ts @@ -0,0 +1,21 @@ +export var STRING = "string", + PROMPT = "Prompt", + CONFIRM = "Confirm", + ALERT = "Alert", + OK = "OK", + CANCEL = "Cancel"; + +/** +* Defines the input type for prompt dialog. +*/ +export enum InputType { + /** + * Plain text input type. + */ + PlainText, + + /** + * Password input type. + */ + Password, +} \ No newline at end of file diff --git a/ui/dialogs/dialogs.android.ts b/ui/dialogs/dialogs.android.ts index 55f41f24e..616320662 100644 --- a/ui/dialogs/dialogs.android.ts +++ b/ui/dialogs/dialogs.android.ts @@ -3,15 +3,13 @@ */ import promises = require("promises"); import dialogs = require("ui/dialogs"); +import dialogs_common = require("ui/dialogs/dialogs-common"); import appmodule = require("application"); import view = require("ui/core/view"); -var STRING = "string", - PROMPT = "Prompt", - CONFIRM = "Confirm", - ALERT = "Alert", - OK = "OK", - CANCEL = "Cancel"; +// merge the exports of the request file with the exports of this file +declare var exports; +require("utils/module-merge").merge(dialogs_common, exports); function createAlertDialog(message: string, options: dialogs.DialogOptions): android.app.AlertDialog.Builder { var alert = new android.app.AlertDialog.Builder(appmodule.android.foregroundActivity); @@ -55,12 +53,12 @@ function addButtonsToAlertDialog(alert: android.app.AlertDialog.Builder, options } } -export function alert(message: string, options = { title: ALERT, okButtonText: OK }): promises.Promise { +export function alert(message: string, options = { title: dialogs_common.ALERT, okButtonText: dialogs_common.OK }): promises.Promise { var d = promises.defer(); try { var alert = createAlertDialog(message, options); - alert.setPositiveButton(options.okButtonText, new android.content.DialogInterface.OnClickListener({ + alert.setPositiveButton(options.okButtonText, new android.content.DialogInterface.OnClickListener({ onClick: function (dialog: android.content.DialogInterface, id: number) { dialog.cancel(); d.resolve(); @@ -76,7 +74,7 @@ export function alert(message: string, options = { title: ALERT, okButtonText: O return d.promise(); } -export function confirm(message: string, options = { title: CONFIRM, okButtonText: OK, cancelButtonText: CANCEL }): promises.Promise { +export function confirm(message: string, options = { title: dialogs_common.CONFIRM, okButtonText: dialogs_common.OK, cancelButtonText: dialogs_common.CANCEL }): promises.Promise { var d = promises.defer(); try { var alert = createAlertDialog(message, options); @@ -92,12 +90,18 @@ export function confirm(message: string, options = { title: CONFIRM, okButtonTex return d.promise(); } -export function prompt(message: string, defaultText?: string, options = { title: PROMPT, okButtonText: OK, cancelButtonText: CANCEL }): promises.Promise { +export function prompt(message: string, defaultText?: string, + options = { title: dialogs_common.PROMPT, okButtonText: dialogs_common.OK, cancelButtonText: dialogs_common.CANCEL, inputType: dialogs_common.InputType.PlainText }): promises.Promise { var d = promises.defer(); try { var alert = createAlertDialog(message, options); var input = new android.widget.EditText(appmodule.android.context); + + if (options.inputType == dialogs_common.InputType.Password) { + input.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD); + } + input.setText(defaultText ? defaultText : ""); alert.setView(input); diff --git a/ui/dialogs/dialogs.d.ts b/ui/dialogs/dialogs.d.ts index b03e86088..9e4ddd3d8 100644 --- a/ui/dialogs/dialogs.d.ts +++ b/ui/dialogs/dialogs.d.ts @@ -1,6 +1,9 @@ declare module "ui/dialogs" { import promises = require("promises"); import view = require("ui/core/view"); + import dialogs_common = require("ui/dialogs/dialogs-common"); + + export var InputType: dialogs_common.InputType; /** * The alert() method displays an alert box with a specified message. @@ -21,7 +24,7 @@ * @param message The text to display in the dialog box. * @param options The options for the dialog box. Optional. */ - function prompt(message: string, defaultText?: string, options?: DialogButtonsOptions): promises.Promise; + function prompt(message: string, defaultText?: string, options?: PromptOptions): promises.Promise; /** * Provides options for the dialog. @@ -44,7 +47,7 @@ } /** - * Provides options for the confirm. + * Provides options for the confirm dialog. */ interface DialogButtonsOptions extends AlertOptions { /** @@ -58,6 +61,16 @@ neutralButtonText?: string; } + /** + * Provides options for the prompt dialog. + */ + interface PromptOptions extends DialogButtonsOptions { + /** + * Gets or sets the prompt input type (plain text or password). + */ + inputType?: dialogs_common.InputType; + } + /** * Provides result data from the prompt dialog. */ diff --git a/ui/dialogs/dialogs.ios.ts b/ui/dialogs/dialogs.ios.ts index eb5881a98..f5656d85f 100644 --- a/ui/dialogs/dialogs.ios.ts +++ b/ui/dialogs/dialogs.ios.ts @@ -3,15 +3,13 @@ */ import promises = require("promises"); import dialogs = require("ui/dialogs"); +import dialogs_common = require("ui/dialogs/dialogs-common"); import view = require("ui/core/view"); -var UIALERTVIEWDELEGATE = "UIAlertViewDelegate", - STRING = "string", - PROMPT = "Prompt", - CONFIRM = "Confirm", - ALERT = "Alert", - OK = "OK", - CANCEL = "Cancel"; +// merge the exports of the request file with the exports of this file +declare var exports; +require("utils/module-merge").merge(dialogs_common, exports); + function createUIAlertView(message: string, options: dialogs.DialogOptions): UIKit.UIAlertView { var alert = new UIKit.UIAlertView(); @@ -49,7 +47,7 @@ function addButtonsToAlertDialog(alert: UIKit.UIAlertView, options: dialogs.Dial } } -export function alert(message: string, options = { title: ALERT, okButtonText: OK }): promises.Promise { +export function alert(message: string, options = { title: dialogs_common.ALERT, okButtonText: dialogs_common.OK }): promises.Promise { var d = promises.defer(); try { var alert = createUIAlertView(message, options); @@ -75,7 +73,7 @@ export function alert(message: string, options = { title: ALERT, okButtonText: O return d.promise(); } -export function confirm(message: string, options = { title: CONFIRM, okButtonText: OK, cancelButtonText: CANCEL }): promises.Promise { +export function confirm(message: string, options = { title: dialogs_common.CONFIRM, okButtonText: dialogs_common.OK, cancelButtonText: dialogs_common.CANCEL }): promises.Promise { var d = promises.defer(); try { var alert = createUIAlertView(message, options); @@ -100,11 +98,17 @@ export function confirm(message: string, options = { title: CONFIRM, okButtonTe return d.promise(); } -export function prompt(message: string, defaultText?: string, options = { title: PROMPT, okButtonText: OK, cancelButtonText: CANCEL, defaultText: "" }): promises.Promise { +export function prompt(message: string, defaultText?: string, + options = { title: dialogs_common.PROMPT, okButtonText: dialogs_common.OK, cancelButtonText: dialogs_common.CANCEL, inputType: dialogs_common.InputType.PlainText }): promises.Promise { var d = promises.defer(); try { var alert = createUIAlertView(message, options); - alert.alertViewStyle = UIKit.UIAlertViewStyle.UIAlertViewStylePlainTextInput; + + if (options.inputType === dialogs_common.InputType.Password) { + alert.alertViewStyle = UIKit.UIAlertViewStyle.UIAlertViewStyleSecureTextInput; + } else { + alert.alertViewStyle = UIKit.UIAlertViewStyle.UIAlertViewStylePlainTextInput; + } addButtonsToAlertDialog(alert, options);