package processing.mode.android; import processing.app.Base; import processing.app.Preferences; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.border.MatteBorder; import javax.swing.border.TitledBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.util.Arrays; @SuppressWarnings("serial") public class KeyStoreManager extends JFrame { static final String GUIDE_URL = "http://developer.android.com/tools/publishing/app-signing.html#cert"; File keyStore; AndroidEditor editor; JPasswordField passwordField; JPasswordField repeatPasswordField; JTextField commonName; JTextField organizationalUnit; JTextField organizationName; JTextField localityName; JTextField country; JTextField stateName; public KeyStoreManager(final AndroidEditor editor) { super("Android keystore manager"); this.editor = editor; createLayout(); } private void createLayout() { Container outer = getContentPane(); outer.removeAll(); Box pain = Box.createVerticalBox(); pain.setBorder(new EmptyBorder(13, 13, 13, 13)); outer.add(pain); keyStore = AndroidKeyStore.getKeyStore(); if (keyStore != null) { showKeystorePasswordLayout(pain); } else { showKeystoreCredentialsLayout(pain); } // buttons JPanel buttons = new JPanel(); buttons.setAlignmentX(LEFT_ALIGNMENT); JButton okButton = new JButton("OK"); Dimension dim = new Dimension(Preferences.BUTTON_WIDTH, okButton.getPreferredSize().height); okButton.setPreferredSize(dim); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (checkRequiredFields()) { if (keyStore == null) { try { AndroidKeyStore.generateKeyStore(new String(passwordField.getPassword()), commonName.getText(), organizationalUnit.getText(), organizationName.getText(), localityName.getText(), stateName.getText(), country.getText()); setVisible(false); editor.startExportPackage(new String(passwordField.getPassword())); } catch (Exception e1) { e1.printStackTrace(); } } else { setVisible(false); editor.startExportPackage(new String(passwordField.getPassword())); } } } }); okButton.setEnabled(true); JButton cancelButton = new JButton("Cancel"); cancelButton.setPreferredSize(dim); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setVisible(false); } }); cancelButton.setEnabled(true); JButton resetKeystoreButton = new JButton("Reset password"); dim = new Dimension(Preferences.BUTTON_WIDTH*2, okButton.getPreferredSize().height); resetKeystoreButton.setPreferredSize(dim); resetKeystoreButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setVisible(false); int result = Base.showYesNoQuestion(editor, "Android keystore", "Are you sure you want to reset the password?", "
We will have to reset the keystore to do this, " + "which means you won't be able to upload an update for your app signed with the new keystore to Google Play.