• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jiangxincode / ApkToolBoxGUI / #1207

13 Sep 2025 11:58PM UTC coverage: 2.895% (-0.006%) from 2.901%
#1207

push

jiangxincode
fix #569: 可能在完全初始化子类之前逃逸了 'this'

0 of 32 new or added lines in 22 files covered. (0.0%)

9 existing lines in 8 files now uncovered.

248 of 8567 relevant lines covered (2.89%)

0.03 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/edu/jiangxin/apktoolbox/file/EncodeConvertPanel.java
1
package edu.jiangxin.apktoolbox.file;
2

3
import edu.jiangxin.apktoolbox.file.core.EncoderConvert;
4
import edu.jiangxin.apktoolbox.file.core.EncoderDetector;
5
import edu.jiangxin.apktoolbox.swing.extend.autocomplete.AutoCompleteComboBox;
6
import edu.jiangxin.apktoolbox.swing.extend.EasyPanel;
7
import edu.jiangxin.apktoolbox.swing.extend.FileListPanel;
8
import edu.jiangxin.apktoolbox.utils.Constants;
9
import edu.jiangxin.apktoolbox.utils.FileUtils;
10
import org.apache.commons.lang3.StringUtils;
11

12
import javax.swing.*;
13
import java.awt.*;
14
import java.awt.event.*;
15
import java.io.File;
16
import java.io.IOException;
17
import java.nio.charset.Charset;
18
import java.util.ArrayList;
19
import java.util.List;
20
import java.util.Set;
21
import java.util.TreeSet;
22

23
/**
24
 * @author jiangxin
25
 * @author 2019-04-12
26
 *
27
 */
28
public class EncodeConvertPanel extends EasyPanel {
29
    private static final long serialVersionUID = 1L;
30

31
    private FileListPanel srcPanel;
32

33
    private JPanel optionPanel;
34

35
    private JTextField suffixTextField;
36

37
    private JCheckBox autoDetectCheckBox;
38

39
    private AutoCompleteComboBox<String> fromComboBox;
40

41
    private JCheckBox recursiveCheckBox;
42

43
    private AutoCompleteComboBox<String> toComboBox;
44

45
    private JPanel operationPanel;
46

47
    public EncodeConvertPanel() throws HeadlessException {
48
        super();
×
49
    }
×
50

51
    @Override
52
    public void initUI() {
53
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
×
54

55
        createSrcPanel();
×
56
        add(srcPanel);
×
57
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
58

59
        createOptionPanel();
×
60
        add(optionPanel);
×
61
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
62

63
        createOperationPanel();
×
64
        add(operationPanel);
×
65
    }
×
66

67
    private void createSrcPanel() {
68
        srcPanel = new FileListPanel();
×
NEW
69
        srcPanel.initialize();
×
UNCOV
70
    }
×
71

72
    private void createOptionPanel() {
73
        optionPanel = new JPanel();
×
74
        optionPanel.setLayout(new BoxLayout(optionPanel, BoxLayout.X_AXIS));
×
75

76
        JLabel suffixLabel = new JLabel("Suffix:");
×
77
        optionPanel.add(suffixLabel);
×
78
        optionPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
79

80
        suffixTextField = new JTextField();
×
81
        suffixTextField.setToolTipText("an array of extensions, ex. {\"java\",\"xml\"}. If this parameter is empty, all files are returned.");
×
82
        suffixTextField.setText(conf.getString("encodeconvert.suffix"));
×
83
        optionPanel.add(suffixTextField);
×
84
        optionPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
85

86
        recursiveCheckBox = new JCheckBox("Recursive");
×
87
        recursiveCheckBox.setSelected(true);
×
88
        optionPanel.add(recursiveCheckBox);
×
89
        optionPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
90

91
        JLabel fromLabel = new JLabel("From:");
×
92
        optionPanel.add(fromLabel);
×
93
        optionPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
94

95
        fromComboBox = new AutoCompleteComboBox<String>();
×
NEW
96
        fromComboBox.initialize();
×
97
        fromComboBox.setEnabled(false);
×
98
        optionPanel.add(fromComboBox);
×
99
        optionPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
100

101
        autoDetectCheckBox = new JCheckBox("Auto Detect");
×
102
        autoDetectCheckBox.setSelected(true);
×
103
        autoDetectCheckBox.addItemListener(e -> fromComboBox.setEnabled(!(e.getStateChange() == ItemEvent.SELECTED)));
×
104
        optionPanel.add(autoDetectCheckBox);
×
105
        optionPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
106

107
        JLabel toLabel = new JLabel("To:");
×
108
        optionPanel.add(toLabel);
×
109
        optionPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
110

111
        toComboBox = new AutoCompleteComboBox<String>();
×
NEW
112
        toComboBox.initialize();
×
113
        toComboBox.setSelectedItem(conf.getString("encodeconvert.to"));
×
114
        optionPanel.add(toComboBox);
×
115

116
        for (String charset : Charset.availableCharsets().keySet()) {
×
117
            fromComboBox.addItem(charset);
×
118
            toComboBox.addItem(charset);
×
119
        }
×
120
    }
×
121

122
    private void createOperationPanel() {
123
        operationPanel = new JPanel();
×
124
        operationPanel.setLayout(new BoxLayout(operationPanel, BoxLayout.X_AXIS));
×
125
        JButton convertButton = new JButton("Convert");
×
126
        convertButton.addActionListener(new ConvertButtonActionListener());
×
127

128
        operationPanel.add(convertButton);
×
129
    }
×
130

131
    private class ConvertButtonActionListener implements ActionListener {
×
132
        @Override
133
        public void actionPerformed(ActionEvent e) {
134
            conf.setProperty("encodeconvert.suffix", suffixTextField.getText());
×
135
            conf.setProperty("encodeconvert.to", toComboBox.getSelectedItem().toString());
×
136

137
            try {
138
                List<File> fileList = new ArrayList<>();
×
139
                for (File file : srcPanel.getFileList()) {
×
140
                    String[] extensions = null;
×
141
                    if (StringUtils.isNotEmpty(suffixTextField.getText())) {
×
142
                        extensions = suffixTextField.getText().split(",");
×
143
                    }
144
                    fileList.addAll(FileUtils.listFiles(file, extensions, recursiveCheckBox.isSelected()));
×
145
                }
×
146
                Set<File> fileSet = new TreeSet<>(fileList);
×
147
                fileList.clear();
×
148
                fileList.addAll(fileSet);
×
149

150
                for (File file : fileList) {
×
151
                    String fromEncoder;
152
                    if (autoDetectCheckBox.isSelected()) {
×
153
                        fromEncoder = EncoderDetector.judgeFile(file.getCanonicalPath());
×
154
                    } else {
155
                        fromEncoder = fromComboBox.getSelectedItem().toString();
×
156
                    }
157
                    String toEncoder = toComboBox.getSelectedItem().toString();
×
158
                    logger.info("processing: {} from {} to {}", file.getCanonicalPath(), fromEncoder, toEncoder);
×
159
                    EncoderConvert.encodeFile(file.getCanonicalPath(), fromEncoder, toEncoder);
×
160
                    logger.info("processed");
×
161
                }
×
162

163
                logger.info("convert finish");
×
164
            } catch (IOException e1) {
×
165
                logger.error("convert fail", e1);
×
166
            }
×
167
        }
×
168
    }
169
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc