package com.github.nukc.plugin.ui;
import com.github.nukc.plugin.helper.BuildHelper;
import com.github.nukc.plugin.helper.OptionsHelper;
import com.github.nukc.plugin.model.Options;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.uiDesigner.core.GridConstraints;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
/**
* Created by Nukc.
*/
public class OptionForm extends JFrame {
private JPanel mPanel;
private JButton mBtnOk;
private JButton mBtnCancel;
private JPanel mPathJPanel;
private JPasswordField mTextStorePwd;
private JPasswordField mTextKeyPwd;
private JTextField mTextAlias;
private JTextArea mTextAreaChannels;
private JPanel mZipalignJPanel;
private JComboBox mCbBuildType;
private JPanel mSignerJPanel;
private JComboBox mCbSigner;
private TextFieldWithBrowseButton mBtnPathBrowse;
private TextFieldWithBrowseButton mBtnZipalignBrowse;
private TextFieldWithBrowseButton mBtnSignerBrowse;
private Project mProject;
private VirtualFile mChooseFile;
public static OptionForm show(Project project, VirtualFile chooseFile) {
OptionForm optionForm = show(project);
optionForm.setChooseFile(chooseFile);
return optionForm;
}
public static OptionForm show(Project project) {
OptionForm optionForm = new OptionForm(project);
optionForm.setSize(450, 450);
optionForm.setLocationRelativeTo(null);
optionForm.setAlwaysOnTop(true);
optionForm.setVisible(true);
return optionForm;
}
public OptionForm(Project project) {
setContentPane(mPanel);
setTitle("Channel Build Setting");
mProject = project;
FileChooserDescriptor fileChooserDescriptor = FileChooserDescriptorFactory.createSingleFileDescriptor();
mBtnPathBrowse = new TextFieldWithBrowseButton();
mBtnPathBrowse.addBrowseFolderListener("Choose Keystore File", null,
mProject, fileChooserDescriptor);
GridConstraints gridConstraints = new GridConstraints();
gridConstraints.setFill(GridConstraints.FILL_BOTH);
mPathJPanel.add(mBtnPathBrowse, gridConstraints);
mBtnZipalignBrowse = new TextFieldWithBrowseButton();
mBtnZipalignBrowse.addBrowseFolderListener("Choose Zipalign", null,
null, fileChooserDescriptor);
mZipalignJPanel.add(mBtnZipalignBrowse, gridConstraints);
mBtnSignerBrowse = new TextFieldWithBrowseButton();
mBtnSignerBrowse.addBrowseFolderListener("Choose ApkSigner", null,
null, fileChooserDescriptor);
mSignerJPanel.add(mBtnSignerBrowse, gridConstraints);
mBtnSignerBrowse.setEnabled(false);
mCbBuildType.addItem(OptionsHelper.BUILD_TYPE_UPDATE);
mCbBuildType.addItem(OptionsHelper.BUILD_TYPE_ADD);
mCbBuildType.addItem(OptionsHelper.BUILD_TYPE_ZIP_COMMENT);
mBtnOk.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
onOK();
}
});
mBtnCancel.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
onCancel();
}
});
mCbSigner.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
int index = mCbSigner.getSelectedIndex();
if (index == 1) {
if ("jarsigner".equals(mBtnSignerBrowse.getText())) {
mBtnSignerBrowse.setText("");
}
mBtnSignerBrowse.setEnabled(true);
} else {
mBtnSignerBrowse.setEnabled(false);
}
}
}
});
mCbBuildType.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
String buildType = mCbBuildType.getSelectedItem().toString();
// v2 signature not support write zip comment
if (OptionsHelper.BUILD_TYPE_ZIP_COMMENT.equals(buildType)) {
mCbSigner.setEnabled(false);
mBtnSignerBrowse.setEnabled(false);
} else {
mCbSigner.setEnabled(true);
mBtnSignerBrowse.setEnabled(true);
}
}
}
});
Options options = OptionsHelper.load(mProject);
if (options != null) {
mBtnPathBrowse.setText(options.keyStorePath);
mTextStorePwd.setText(options.keyStorePassword);
mTextKeyPwd.setText(options.keyPassword);
mTextAlias.setText(options.keyAlias);
mBtnZipalignBrowse.setText(options.zipalignPath);
mBtnSignerBrowse.setText(options.signer);
if ("jarsigner".equals(options.signer)) {
mCbSigner.setSelectedIndex(0);
} else {
mCbSigner.setSelectedIndex(1);
}
mCbBuildType.setSelectedItem(options.buildType);
String text = "";
for (String channel : options.channels) {
text += ">" + channel + "\n";
}
mTextAreaChannels.setText(text);
}
}
public void setChooseFile(VirtualFile virtualFile) {
mChooseFile = virtualFile;
}
private void onOK() {
dispose();
String storePassword = String.valueOf(mTextStorePwd.getPassword());
String storeFilePath = mBtnPathBrowse.getText();
String keyPassword = String.valueOf(mTextKeyPwd.getPassword());
String keyAlias = mTextAlias.getText();
String[] channels = mTextAreaChannels.getText().split("\n");
String zipalignPath = mBtnZipalignBrowse.getText();
String buildType = mCbBuildType.getSelectedItem().toString();
String signer = mCbSigner.getSelectedItem().toString();
if ("apksigner".equals(signer)) {
signer = mBtnSignerBrowse.getText();
}
System.out.print(storeFilePath + "--" + storePassword + "--" + keyPassword +
"--" + keyAlias + "---" + signer + "---" + buildType);
OptionsHelper.save(mProject, storeFilePath, storePassword, keyPassword, keyAlias,
zipalignPath, channels, buildType, signer);
BuildHelper.build(mProject, mChooseFile);
}
private void onCancel() {
dispose();
}
}