UNPKG

@nativescript/core

Version:

A JavaScript library providing an easy to use api for interacting with iOS and Android platform APIs.

329 lines • 12.5 kB
import { getLabelColor, getButtonColors, isDialogOptions, inputType, capitalizationType, DialogStrings, parseLoginOptions } from './dialogs-common'; import { ad } from '../../utils/native-helper'; export * from './dialogs-common'; function isString(value) { return typeof value === 'string'; } function createAlertDialog(options) { const alert = new android.app.AlertDialog.Builder(ad.getCurrentActivity(), options.theme ? options.theme : -1); alert.setTitle(options && isString(options.title) ? options.title : ''); alert.setMessage(options && isString(options.message) ? options.message : ''); if (options && options.cancelable === false) { alert.setCancelable(false); } return alert; } function showDialog(builder) { const dlg = builder.show(); const labelColor = getLabelColor(); if (labelColor) { const textViewId = dlg.getContext().getResources().getIdentifier('android:id/alertTitle', null, null); if (textViewId) { const tv = dlg.findViewById(textViewId); if (tv) { tv.setTextColor(labelColor.android); } } const messageTextViewId = dlg.getContext().getResources().getIdentifier('android:id/message', null, null); if (messageTextViewId) { const messageTextView = dlg.findViewById(messageTextViewId); if (messageTextView) { messageTextView.setTextColor(labelColor.android); } } } const { color, backgroundColor } = getButtonColors(); if (color) { const buttons = []; for (let i = 0; i < 3; i++) { const id = dlg .getContext() .getResources() .getIdentifier('android:id/button' + i, null, null); buttons[i] = dlg.findViewById(id); } buttons.forEach((button) => { if (button) { if (color) { button.setTextColor(color.android); } if (backgroundColor) { button.setBackgroundColor(backgroundColor.android); } } }); } } function addButtonsToAlertDialog(alert, options, callback) { if (!options) { return; } if (options.okButtonText) { alert.setPositiveButton(options.okButtonText, new android.content.DialogInterface.OnClickListener({ onClick: function (dialog, id) { dialog.cancel(); callback(true); }, })); } if (options.cancelButtonText) { alert.setNegativeButton(options.cancelButtonText, new android.content.DialogInterface.OnClickListener({ onClick: function (dialog, id) { dialog.cancel(); callback(false); }, })); } if (options.neutralButtonText) { alert.setNeutralButton(options.neutralButtonText, new android.content.DialogInterface.OnClickListener({ onClick: function (dialog, id) { dialog.cancel(); callback(undefined); }, })); } alert.setOnDismissListener(new android.content.DialogInterface.OnDismissListener({ onDismiss: function () { callback(false); }, })); } export function alert(arg) { return new Promise((resolve, reject) => { try { const options = !isDialogOptions(arg) ? { title: DialogStrings.ALERT, okButtonText: DialogStrings.OK, message: arg + '' } : arg; const alert = createAlertDialog(options); alert.setPositiveButton(options.okButtonText, new android.content.DialogInterface.OnClickListener({ onClick: function (dialog, id) { dialog.cancel(); resolve(); }, })); alert.setOnDismissListener(new android.content.DialogInterface.OnDismissListener({ onDismiss: function () { resolve(); }, })); showDialog(alert); } catch (ex) { reject(ex); } }); } export function confirm(arg) { return new Promise((resolve, reject) => { try { const options = !isDialogOptions(arg) ? { title: DialogStrings.CONFIRM, okButtonText: DialogStrings.OK, cancelButtonText: DialogStrings.CANCEL, message: arg + '', } : arg; const alert = createAlertDialog(options); addButtonsToAlertDialog(alert, options, function (result) { resolve(result); }); showDialog(alert); } catch (ex) { reject(ex); } }); } export function prompt(...args) { let options; const defaultOptions = { title: DialogStrings.PROMPT, okButtonText: DialogStrings.OK, cancelButtonText: DialogStrings.CANCEL, inputType: inputType.text, }; const arg = args[0]; if (args.length === 1) { if (isString(arg)) { options = defaultOptions; options.message = arg; } else { options = arg; } } else if (args.length === 2) { if (isString(arg) && isString(args[1])) { options = defaultOptions; options.message = arg; options.defaultText = args[1]; } } return new Promise((resolve, reject) => { try { const alert = createAlertDialog(options); const input = new android.widget.EditText(ad.getCurrentActivity()); if (options) { if (options.inputType === inputType.password) { input.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD); } else if (options.inputType === inputType.email) { input.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); } else if (options.inputType === inputType.number) { input.setInputType(android.text.InputType.TYPE_CLASS_NUMBER); } else if (options.inputType === inputType.decimal) { input.setInputType(android.text.InputType.TYPE_CLASS_NUMBER | android.text.InputType.TYPE_NUMBER_FLAG_DECIMAL); } else if (options.inputType === inputType.phone) { input.setInputType(android.text.InputType.TYPE_CLASS_PHONE); } switch (options.capitalizationType) { case capitalizationType.all: { input.setInputType(input.getInputType() | android.text.InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); break; } case capitalizationType.sentences: { input.setInputType(input.getInputType() | android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); break; } case capitalizationType.words: { input.setInputType(input.getInputType() | android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS); break; } } } input.setText((options && options.defaultText) || ''); alert.setView(input); const getText = function () { return input.getText().toString(); }; addButtonsToAlertDialog(alert, options, function (r) { resolve({ result: r, text: getText() }); }); showDialog(alert); } catch (ex) { reject(ex); } }); } export function login(...args) { const options = parseLoginOptions(args); return new Promise((resolve, reject) => { try { const alert = createAlertDialog(options); const userNameInput = new android.widget.EditText(ad.getApplicationContext()); userNameInput.setHint(options.userNameHint ? options.userNameHint : ''); userNameInput.setText(options.userName ? options.userName : ''); const passwordInput = new android.widget.EditText(ad.getApplicationContext()); passwordInput.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD); passwordInput.setTypeface(android.graphics.Typeface.DEFAULT); passwordInput.setHint(options.passwordHint ? options.passwordHint : ''); passwordInput.setText(options.password ? options.password : ''); const layout = new android.widget.LinearLayout(ad.getApplicationContext()); layout.setOrientation(1); layout.addView(userNameInput); layout.addView(passwordInput); alert.setView(layout); addButtonsToAlertDialog(alert, options, function (r) { resolve({ result: r, userName: userNameInput.getText().toString(), password: passwordInput.getText().toString(), }); }); showDialog(alert); } catch (ex) { reject(ex); } }); } export function action(...args) { let options; const defaultOptions = { title: null, cancelButtonText: DialogStrings.CANCEL }; if (args.length === 1) { if (isString(args[0])) { options = defaultOptions; options.message = args[0]; } else { options = args[0]; } } else if (args.length === 2) { if (isString(args[0]) && isString(args[1])) { options = defaultOptions; options.message = args[0]; options.cancelButtonText = args[1]; } } else if (args.length === 3) { if (isString(args[0]) && isString(args[1]) && typeof args[2] !== 'undefined') { options = defaultOptions; options.message = args[0]; options.cancelButtonText = args[1]; options.actions = args[2]; } } return new Promise((resolve, reject) => { try { const alert = new android.app.AlertDialog.Builder(ad.getCurrentActivity(), options.theme ? options.theme : -1); const message = options && isString(options.message) ? options.message : ''; const title = options && isString(options.title) ? options.title : ''; if (options && options.cancelable === false) { alert.setCancelable(false); } if (title) { alert.setTitle(title); if (!options.actions) { alert.setMessage(message); } } else { alert.setTitle(message); } if (options.actions) { alert.setItems(options.actions, new android.content.DialogInterface.OnClickListener({ onClick: function (dialog, which) { resolve(options.actions[which]); }, })); } if (isString(options.cancelButtonText)) { alert.setNegativeButton(options.cancelButtonText, new android.content.DialogInterface.OnClickListener({ onClick: function (dialog, id) { dialog.cancel(); resolve(options.cancelButtonText); }, })); } alert.setOnDismissListener(new android.content.DialogInterface.OnDismissListener({ onDismiss: function () { if (isString(options.cancelButtonText)) { resolve(options.cancelButtonText); } else { resolve(''); } }, })); showDialog(alert); } catch (ex) { reject(ex); } }); } /** * Singular rollup for convenience of all dialog methods */ export const Dialogs = { alert, confirm, prompt, login, action, }; //# sourceMappingURL=index.android.js.map