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

jiangxincode / ApkToolBoxGUI / #832

28 Aug 2024 03:03PM UTC coverage: 3.138% (-0.002%) from 3.14%
#832

push

jiangxincode
fix #17: add finish dialog for i18n tool

0 of 42 new or added lines in 3 files covered. (0.0%)

2 existing lines in 1 file now uncovered.

236 of 7520 relevant lines covered (3.14%)

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/android/i18n/I18nRemovePanel.java
1
package edu.jiangxin.apktoolbox.android.i18n;
2

3
import java.awt.HeadlessException;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.io.File;
7
import java.io.FileFilter;
8
import java.io.IOException;
9
import java.io.Serial;
10
import java.util.ArrayList;
11
import java.util.List;
12
import java.util.regex.Matcher;
13
import java.util.regex.Pattern;
14

15
import javax.swing.Box;
16
import javax.swing.BoxLayout;
17
import javax.swing.JButton;
18
import javax.swing.JLabel;
19
import javax.swing.JPanel;
20
import javax.swing.JTextField;
21

22
import edu.jiangxin.apktoolbox.swing.extend.listener.SelectDirectoryListener;
23
import org.apache.commons.io.FileUtils;
24
import org.apache.commons.lang3.StringUtils;
25

26
import edu.jiangxin.apktoolbox.swing.extend.EasyPanel;
27
import edu.jiangxin.apktoolbox.utils.Constants;
28

29
/**
30
 * @author jiangxin
31
 * @author 2019-04-12
32
 *
33
 */
34
public class I18nRemovePanel extends EasyPanel {
35
    @Serial
36
    private static final long serialVersionUID = 1L;
37

38
    List<I18nFindLongestPanel.I18nInfo> infos = new ArrayList<>();
×
39

40
    private static final String CHARSET = "UTF-8";
41

42
    private JTextField srcTextField;
43

44
    private JTextField itemTextField;
45

46
    public I18nRemovePanel() throws HeadlessException {
47
        super();
×
48
    }
×
49

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

55
        createSourcePanel();
×
56
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
57
        createItemPanel();
×
58
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
59
        createOperationPanel();
×
60
    }
×
61

62
    private void createOperationPanel() {
63
        JPanel operationPanel = new JPanel();
×
64
        operationPanel.setLayout(new BoxLayout(operationPanel, BoxLayout.X_AXIS));
×
65
        add(operationPanel);
×
66

67
        JButton removeButton = new JButton(bundle.getString("android.i18n.remove.title"));
×
68
        removeButton.addActionListener(new ActionListener() {
×
69
            @Override
70
            public void actionPerformed(ActionEvent e) {
71
                infos.clear();
×
72

73
                String srcPath = checkAndGetDirContent(srcTextField, "android.i18n.remove.src.dir", "Source directory is invalid");
×
74
                if (StringUtils.isEmpty(srcPath)) {
×
75
                    return;
×
76
                }
77

78
                String item = checkAndGetStringContent(itemTextField, "android.i18n.remove.items", "Items is empty");
×
79
                if (StringUtils.isEmpty(item)) {
×
80
                    return;
×
81
                }
82

83
                remove(srcPath, itemTextField.getText());
×
84
            }
×
85
        });
86

87
        operationPanel.add(removeButton);
×
88
    }
×
89

90
    private void createItemPanel() {
91
        JPanel itemPanel = new JPanel();
×
92
        itemPanel.setLayout(new BoxLayout(itemPanel, BoxLayout.X_AXIS));
×
93
        add(itemPanel);
×
94
        
95
        itemTextField = new JTextField();
×
96
        itemTextField.setText(conf.getString("android.i18n.remove.items"));
×
97

98
        JLabel itemLabel = new JLabel("Items");
×
99

100
        itemPanel.add(itemTextField);
×
101
        itemPanel.add(Box.createHorizontalGlue());
×
102
        itemPanel.add(itemLabel);
×
103
    }
×
104

105
    private void createSourcePanel() {
106
        JPanel sourcePanel = new JPanel();
×
107
        sourcePanel.setLayout(new BoxLayout(sourcePanel, BoxLayout.X_AXIS));
×
108
        add(sourcePanel);
×
109
        
110
        srcTextField = new JTextField();
×
111
        srcTextField.setText(conf.getString("android.i18n.remove.src.dir"));
×
112

113
        JButton srcButton = new JButton("Source Directory");
×
114
        srcButton.addActionListener(new SelectDirectoryListener("select a directory", srcTextField));
×
115

116
        sourcePanel.add(srcTextField);
×
117
        sourcePanel.add(Box.createHorizontalGlue());
×
118
        sourcePanel.add(srcButton);
×
119
    }
×
120

121
    private void remove(String sourceBaseStr, String itemName) {
122
        File[] sourceParentFiles = new File(sourceBaseStr).listFiles(new FileFilter() {
×
123
            @Override
124
            public boolean accept(File pathname) {
125
                return pathname.getName().startsWith("values");
×
126
            }
127
        });
128
        if (sourceParentFiles == null) {
×
129
            logger.error("None valid directory found");
×
130
            return;
×
131
        }
132
        int count = 0;
×
133
        for (File sourceParentFile : sourceParentFiles) {
×
134
            File sourceFile = new File(sourceParentFile, "strings.xml");
×
135
            if (sourceFile.exists()) {
×
136
                try {
137
                    System.out.println("read from: " + sourceFile.getCanonicalPath());
×
138
                    String content = FileUtils.readFileToString(sourceFile, CHARSET);
×
139
                    Pattern pattern = Pattern.compile("\\s*<string name=\"" + itemName + "\".*>.*</string>");
×
140
                    Matcher matcher = pattern.matcher(content);
×
141
                    String resultString = matcher.replaceAll("");
×
142
                    FileUtils.writeStringToFile(sourceFile, resultString, CHARSET);
×
NEW
143
                    logger.info("remove success, count: {}, and file: {}", ++count, sourceFile);
×
144
                } catch (IOException e) {
×
NEW
145
                    logger.error("remove exception: {}", sourceFile);
×
146
                }
×
147
            }
148
        }
149
    }
×
150
}
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