/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.motorola.studio.android.common.utilities.ui; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import com.motorola.studio.android.common.utilities.i18n.UtilitiesNLS; public class PasswordInputDialog extends Dialog { private static final int SMALL_TEXT_SIZE = 64; private String newPassword = null; private String oldPassword = null; private final boolean changePassword; private Text newPasswordConfirmText; private Text newPasswordText; private Text oldPasswordText; private Label message; private Label image; private final String description; private Button saveCheckBox; private boolean needToStorePassword = true; private int passwordMinimumSize = 1; //1 is default, it is recommended to change in the constructor /** * Create a new Input dialog * @param parent: the parent shell * @param description: the textual description of dialog * @param changePassword: true if you want this dialog be a change password dialog (it will present old, new and confirm new fields). False to show only enter password field * @param oldPassword: null if user must enter oldpassword. Anything to create dialog with preentered password (only if changePassword is true); */ public PasswordInputDialog(Shell parent, String description, boolean changePassword, String oldPassword, int passwordMinimumSize) { super(parent); this.changePassword = changePassword; this.description = description; if (changePassword) { this.oldPassword = oldPassword; } this.passwordMinimumSize = passwordMinimumSize; } @Override protected Control createDialogArea(Composite parent) { Composite mainComposite = new Composite(parent, SWT.NONE); mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); mainComposite.setLayout(new GridLayout(2, false)); /** * The Message Area (With an image and a text) */ Composite messageComposite = new Composite(mainComposite, SWT.NONE); GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1); messageComposite.setLayoutData(layoutData); GridLayout layout = new GridLayout(2, false); layout.marginWidth = 0; messageComposite.setLayout(layout); image = new Label(messageComposite, SWT.NONE); image.setVisible(false); layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); image.setLayoutData(layoutData); message = new Label(messageComposite, SWT.NONE); message.setText(description); layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); message.setLayoutData(layoutData); Label oldPasswordLabel = new Label(mainComposite, SWT.NONE); layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); oldPasswordLabel.setLayoutData(layoutData); oldPasswordLabel.setText(UtilitiesNLS.Passwordinput_Enterpassword_Label); oldPasswordText = new Text(mainComposite, SWT.BORDER | SWT.SINGLE | SWT.PASSWORD); oldPasswordText.setTextLimit(SMALL_TEXT_SIZE); layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); layoutData.minimumWidth = 150; oldPasswordText.setLayoutData(layoutData); if (oldPassword != null) { oldPasswordText.setEnabled(false); oldPasswordText.setText(oldPassword); oldPasswordLabel.setEnabled(false); } oldPasswordText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updateStatus(); } }); /** * If the input is to change the passwords, create all other fields */ if (changePassword) { Label separator = new Label(mainComposite, SWT.HORIZONTAL | SWT.SEPARATOR); layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1); separator.setLayoutData(layoutData); /** * The newPassword area */ Label passwordLabel = new Label(mainComposite, SWT.NONE); layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); passwordLabel.setLayoutData(layoutData); passwordLabel.setText(UtilitiesNLS.Passwordinput_Enternewpassword_Label); newPasswordText = new Text(mainComposite, SWT.BORDER | SWT.SINGLE | SWT.PASSWORD); newPasswordText.setTextLimit(SMALL_TEXT_SIZE); layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); layoutData.minimumWidth = 150; newPasswordText.setLayoutData(layoutData); Label passwordConfirmLabel = new Label(mainComposite, SWT.NONE); layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); passwordConfirmLabel.setLayoutData(layoutData); passwordConfirmLabel.setText(UtilitiesNLS.Passwordinput_Reenterpassword_Label); newPasswordConfirmText = new Text(mainComposite, SWT.BORDER | SWT.SINGLE | SWT.PASSWORD); newPasswordConfirmText.setTextLimit(SMALL_TEXT_SIZE); layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); layoutData.minimumWidth = 150; newPasswordConfirmText.setLayoutData(layoutData); newPasswordText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updateStatus(); } }); newPasswordConfirmText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updateStatus(); } }); } //Creates the save password checkbox saveCheckBox = new Button(mainComposite, SWT.CHECK); saveCheckBox.setText(UtilitiesNLS.PasswordProvider_SaveThisPassword); saveCheckBox.setSelection(false); GridData gridData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1); saveCheckBox.setLayoutData(gridData); return mainComposite; } public void updateStatus() { String errorMessage = null; int severity = IMessageProvider.NONE; if (oldPasswordText.getText().length() > 0) { oldPassword = oldPasswordText.getText(); } else { errorMessage = ""; oldPassword = null; } if ((errorMessage == null) && changePassword) { if (newPasswordText.getText().length() < passwordMinimumSize) { errorMessage = UtilitiesNLS.bind(UtilitiesNLS.Passwordinput_Error_PasswordMinimumSize, passwordMinimumSize); severity = IMessageProvider.ERROR; } else { if (!newPasswordText.getText().equals(newPasswordConfirmText.getText())) { errorMessage = UtilitiesNLS.Passwordinput_Error_Passwordnotmatch; severity = IMessageProvider.ERROR; } else { newPassword = newPasswordText.getText(); } } } setErrorMessage(errorMessage, severity); } private void setErrorMessage(String errorMsg, int severity) { if ((errorMsg == null) || (severity == IMessageProvider.NONE)) { image.setImage(null); image.setVisible(false); message.setText(description); getButton(OK).setEnabled(errorMsg == null); } else { message.setText(errorMsg); message.setVisible(true); switch (severity) { case IMessageProvider.ERROR: image.setImage(PlatformUI.getWorkbench().getSharedImages() .getImage(ISharedImages.IMG_OBJS_ERROR_TSK)); break; case IMessageProvider.INFORMATION: image.setImage(PlatformUI.getWorkbench().getSharedImages() .getImage(ISharedImages.IMG_OBJS_INFO_TSK)); break; case IMessageProvider.WARNING: image.setImage(PlatformUI.getWorkbench().getSharedImages() .getImage(ISharedImages.IMG_OBJS_WARN_TSK)); break; default: image.setImage(PlatformUI.getWorkbench().getSharedImages() .getImage(ISharedImages.IMG_OBJS_ERROR_TSK)); break; } image.setVisible(true); getButton(OK).setEnabled(false); } message.getParent().layout(); } @Override protected void createButtonsForButtonBar(Composite parent) { super.createButtonsForButtonBar(parent); getButton(OK).setEnabled(false); } public String getNewPassword() { return newPassword; } public String getOldPassword() { return oldPassword; } public boolean needToStorePassword() { return needToStorePassword; } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(UtilitiesNLS.Passwordinput_Title); newShell.setMinimumSize(500, 200); newShell.layout(true); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#okPressed() */ @Override protected void okPressed() { needToStorePassword = saveCheckBox.getSelection(); super.okPressed(); } }