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

jiangxincode / ApkToolBoxGUI / #1166

06 Sep 2025 11:06AM UTC coverage: 2.891%. Remained the same
#1166

push

jiangxincode
[PMD issues]Fix PMD issues: UnnecessaryFullyQualifiedName

3 of 27 new or added lines in 11 files covered. (11.11%)

1 existing line in 1 file now uncovered.

248 of 8579 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/convert/time/TimeConvertPanel.java
1
package edu.jiangxin.apktoolbox.convert.time;
2

3
import edu.jiangxin.apktoolbox.swing.extend.EasyPanel;
4
import edu.jiangxin.apktoolbox.utils.Constants;
5
import edu.jiangxin.apktoolbox.utils.DateUtils;
6

7
import javax.swing.*;
8
import javax.swing.text.DateFormatter;
9
import java.awt.*;
10
import java.awt.event.ActionEvent;
11
import java.awt.event.ActionListener;
12
import java.text.SimpleDateFormat;
13
import java.util.Arrays;
14
import java.util.Calendar;
15
import java.util.Date;
16
import java.util.TimeZone;
17

18
public class TimeConvertPanel extends EasyPanel {
19

20
    private JSpinner timestamp2Spinner;
21

22
    private JComboBox<Object> timestampComboBox;
23

24
    private JTextField timeTextField;
25

26
    private JTextField currentTimestampTextField;
27

28
    private JTextField currentTimeTextField;
29

30
    private JButton pauseButton;
31

32
    private boolean isPaused;
33

34
    private JFormattedTextField inTimeTextField;
35
    private JComboBox inTimezoneComboBox;
36
    private JComboBox outTimezoneComboBox;
37
    private JTextField outTimeTextField;
38

39
    private static final String SDF_PATTERN = "yyyy-MM-dd HH:mm";
40
    private final SimpleDateFormat SDF = new SimpleDateFormat(SDF_PATTERN);
×
41
    private final DateFormatter dtFormatter = new DateFormatter(SDF);
×
42

43
    final static String[] sortedTimeZones;
44

45
    static {
46
        String[] t = TimeZone.getAvailableIDs();
×
47
        sortedTimeZones = Arrays.copyOf(t, t.length);
×
48
        Arrays.sort(sortedTimeZones, String.CASE_INSENSITIVE_ORDER);
×
49
    }
×
50

51
    public TimeConvertPanel() throws HeadlessException {
52
        super();
×
53
    }
×
54

55
    @Override
56
    public void initUI() {
57
        BoxLayout boxLayout = new BoxLayout(this, BoxLayout.Y_AXIS);
×
58
        setLayout(boxLayout);
×
59

60
        createConvertPanel();
×
61
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER));
×
62

63
        createConvertButtonsPanel();
×
64
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER * 3));
×
65

66
        createCurrentPanel();
×
67
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER * 3));
×
68

69
        createCommentPanel();
×
70
        add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER * 3));
×
71

72
        createTimezonePanel();
×
73
    }
×
74

75
    private void createConvertPanel() {
76
        JPanel convertPanel = new JPanel();
×
77
        convertPanel.setLayout(new BoxLayout(convertPanel, BoxLayout.X_AXIS));
×
78
        add(convertPanel);
×
79

80
        JPanel timestampPanel = new JPanel();
×
81
        timestampPanel.setLayout(new BoxLayout(timestampPanel, BoxLayout.X_AXIS));
×
82

83
        JPanel timePanel = new JPanel();
×
84
        timePanel.setLayout(new BoxLayout(timePanel, BoxLayout.X_AXIS));
×
85

86
        convertPanel.add(timestampPanel);
×
87
        convertPanel.add(Box.createHorizontalStrut(40));
×
88
        convertPanel.add(timePanel);
×
89

90
        JLabel timestampLabel = new JLabel("TimeStamp: ");
×
91

92
        timestamp2Spinner = new JSpinner();
×
93
        timestamp2Spinner.setPreferredSize(new Dimension(150, 25));
×
94
        timestamp2Spinner.setModel(new SpinnerNumberModel(Long.valueOf(0L), Long.valueOf(0L), Long.valueOf(Long.MAX_VALUE), Long.valueOf(1L)));
×
95

96
        timestampComboBox = new JComboBox<>();
×
97
        timestampComboBox.addItem("Second(s)");
×
98
        timestampComboBox.addItem("Millisecond(ms)");
×
99

100
        timestampPanel.add(timestampLabel);
×
101
        timestampPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
102
        timestampPanel.add(timestamp2Spinner);
×
103
        timestampPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
104
        timestampPanel.add(timestampComboBox);
×
105

106
        JLabel timeLabel = new JLabel("Time: ");
×
107

108
        timeTextField = new JTextField(20);
×
109

110
        timePanel.add(timeLabel);
×
111
        timePanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
112
        timePanel.add(timeTextField);
×
113
    }
×
114

115
    private void createConvertButtonsPanel() {
116
        JPanel convertButtonsPanel = new JPanel();
×
117
        BoxLayout boxLayout = new BoxLayout(convertButtonsPanel, BoxLayout.X_AXIS);
×
118
        convertButtonsPanel.setLayout(boxLayout);
×
119
        add(convertButtonsPanel);
×
120

121
        JButton timestamp2TimeButton = new JButton();
×
122
        timestamp2TimeButton.setText("Timestamp->Time");
×
123
        timestamp2TimeButton.addActionListener(new Timestamp2TimeButtonActionListener());
×
124
        convertButtonsPanel.add(timestamp2TimeButton);
×
125

126
        convertButtonsPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
127

128
        JButton time2TimestampButton = new JButton();
×
129
        time2TimestampButton.setText("Time->Timestamp");
×
130
        time2TimestampButton.addActionListener(new Time2TimestampButtonActionListener());
×
131
        convertButtonsPanel.add(time2TimestampButton);
×
132

133
        convertButtonsPanel.add(Box.createHorizontalGlue());
×
134
    }
×
135

136
    private void createCurrentPanel() {
137
        JPanel currentPanel = new JPanel();
×
138
        BoxLayout boxLayout = new BoxLayout(currentPanel, BoxLayout.X_AXIS);
×
139
        currentPanel.setLayout(boxLayout);
×
140
        add(currentPanel);
×
141

142
        JLabel currentTimestampLabel = new JLabel("Current timestamp: ");
×
143
        currentPanel.add(currentTimestampLabel);
×
144
        currentPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
145

146
        currentTimestampTextField = new JTextField();
×
147
        currentPanel.add(currentTimestampTextField);
×
148
        currentPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
149

150
        JLabel currentTimeTitleLabel = new JLabel("Current time: ");
×
151
        currentPanel.add(currentTimeTitleLabel);
×
152
        currentPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
153

154
        currentTimeTextField = new JTextField();
×
155
        currentPanel.add(currentTimeTextField);
×
156
        currentPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
157

158
        pauseButton = new JButton("Pause");
×
159
        currentPanel.add(pauseButton);
×
160
        pauseButton.addActionListener(e -> {
×
161
            if (isPaused) {
×
162
                pauseButton.setText("Pause");
×
163
                isPaused = false;
×
164
            } else {
165
                pauseButton.setText("Resume");
×
166
                isPaused = true;
×
167
            }
168
        });
×
169

170
        new Thread(() -> {
×
171
            while (true) {
172
                long currentTimeStamp = System.currentTimeMillis() / 1000;
×
173
                if (!isPaused) {
×
174
                    currentTimestampTextField.setText(String.valueOf(currentTimeStamp));
×
175
                    currentTimeTextField.setText(DateUtils.secondToHumanFormat(currentTimeStamp));
×
176
                }
177
                try {
178
                    Thread.sleep(1000);
×
179
                } catch (InterruptedException e) {
×
180
                    logger.error("sleep InterruptedException");
×
181
                    Thread.currentThread().interrupt();
×
182
                }
×
183
            }
×
184
        }).start();
×
185
    }
×
186

187
    private void createCommentPanel() {
188
        JPanel commentPanel = new JPanel();
×
189
        BoxLayout boxLayout = new BoxLayout(commentPanel, BoxLayout.X_AXIS);
×
190
        commentPanel.setLayout(boxLayout);
×
191
        add(commentPanel);
×
192

193
        JTextArea textArea1 = new JTextArea("1s = 1000ms");
×
194
        textArea1.setEditable(false);
×
195
        JTextArea textArea2 = new JTextArea("1ms = 1000μs");
×
196
        textArea2.setEditable(false);
×
197
        JTextArea textArea3 = new JTextArea("1μs = 1000ns");
×
198
        textArea3.setEditable(false);
×
199
        JTextArea textArea4 = new JTextArea("1ns = 1000ps");
×
200
        textArea4.setEditable(false);
×
201

202
        commentPanel.add(textArea1);
×
203
        commentPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
204

205
        commentPanel.add(textArea2);
×
206
        commentPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
207

208
        commentPanel.add(textArea3);
×
209
        commentPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
210

211
        commentPanel.add(textArea4);
×
212
        commentPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
213
    }
×
214

215
    private void createTimezonePanel() {
216
        JPanel timezonePanel = new JPanel();
×
217
        BoxLayout boxLayout = new BoxLayout(timezonePanel, BoxLayout.X_AXIS);
×
218
        timezonePanel.setLayout(boxLayout);
×
219
        add(timezonePanel);
×
220

221
        JLabel label1 = new JLabel("From Time: ");
×
222
        label1.setLabelFor(inTimeTextField);
×
223
        timezonePanel.add(label1);
×
224

225
        inTimeTextField = new JFormattedTextField(dtFormatter);
×
226
        inTimeTextField.setToolTipText("Enter time (" + SDF_PATTERN + "): ");
×
227
        inTimeTextField.setValue(new Date());
×
228
        inTimeTextField.addPropertyChangeListener("value", event -> update());
×
229

230
        JLabel label2 = new JLabel("From Timezone: ");
×
231
        label2.setLabelFor(inTimezoneComboBox);
×
232
        inTimezoneComboBox = new JComboBox(sortedTimeZones);
×
233
        inTimezoneComboBox.setPreferredSize(new Dimension(70, 0));
×
234
        inTimezoneComboBox.addActionListener(e -> update());
×
235

236
        JLabel label3 = new JLabel("To Timezone: ");
×
237
        label3.setLabelFor(outTimezoneComboBox);
×
238
        outTimezoneComboBox = new JComboBox(sortedTimeZones);
×
239
        outTimezoneComboBox.setPreferredSize(new Dimension(70, 0));
×
240
        outTimezoneComboBox.addActionListener(e -> update());
×
241

242
        JLabel label4 = new JLabel("To Time: ");
×
243
        label4.setLabelFor(outTimeTextField);
×
244
        outTimeTextField = new JTextField(10);
×
245

246
        JButton swapButton = new JButton("Swap");
×
247
        swapButton.addActionListener(e -> {
×
248
            final String src = (String) inTimezoneComboBox.getSelectedItem();
×
249
            inTimezoneComboBox.setSelectedItem(outTimezoneComboBox.getSelectedItem());
×
250
            outTimezoneComboBox.setSelectedItem(src);
×
251
        });
×
252

253
        timezonePanel.add(label1);
×
254
        timezonePanel.add(inTimeTextField);
×
255
        timezonePanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
256
        timezonePanel.add(label2);
×
257
        timezonePanel.add(inTimezoneComboBox);
×
258
        timezonePanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
259
        timezonePanel.add(label3);
×
260
        timezonePanel.add(outTimezoneComboBox);
×
261
        timezonePanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
262
        timezonePanel.add(label4);
×
263
        timezonePanel.add(outTimeTextField);
×
264
        timezonePanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER));
×
265
        timezonePanel.add(swapButton);
×
266
    }
×
267

268
    private final class Timestamp2TimeButtonActionListener implements ActionListener {
×
269
        @Override
270
        public void actionPerformed(ActionEvent e) {
271
            Long timestamp = (Long) timestamp2Spinner.getValue();
×
272
            Integer index = timestampComboBox.getSelectedIndex();
×
273
            String result = "";
×
274
            if (index.equals(0)) {
×
275
                result = DateUtils.secondToHumanFormat(timestamp);
×
276
            } else if (index.equals(1)) {
×
277
                result = DateUtils.millisecondToHumanFormat(timestamp);
×
278
            }
279
            timeTextField.setText(result);
×
280
        }
×
281
    }
282

283
    private final class Time2TimestampButtonActionListener implements ActionListener {
×
284
        @Override
285
        public void actionPerformed(ActionEvent e) {
286
            String string = timeTextField.getText();
×
287
            Integer index = timestampComboBox.getSelectedIndex();
×
288
            Long result = 0L;
×
289
            if (index.equals(0)) {
×
290
                result = DateUtils.humanFormatToSecond(string);
×
291
            } else if (index.equals(1)) {
×
292
                result = DateUtils.humanFormatToMillisecond(string);
×
293
            }
294
            timestamp2Spinner.setValue(result);
×
295
        }
×
296
    }
297

298
    private static Date getDate(final int hour, final int minute) {
299
        Calendar cal = Calendar.getInstance();
×
NEW
300
        cal.set(Calendar.HOUR_OF_DAY, hour);
×
NEW
301
        cal.set(Calendar.MINUTE, minute);
×
UNCOV
302
        return cal.getTime();
×
303
    }
304

305

306
    private void update() {
307
        // Get the timezone objects:
308
        final TimeZone sourceTimezone = TimeZone.getTimeZone(
×
309
                (String) inTimezoneComboBox.getSelectedItem());
×
310
        final TimeZone destTimezone = TimeZone.getTimeZone(
×
311
                (String) outTimezoneComboBox.getSelectedItem());
×
312

313
        // Get the entered date:
314
        Date sourceDate = (Date) inTimeTextField.getValue();
×
315

316
        // Compute the source:
317
        Calendar localTime = Calendar.getInstance();
×
318
        localTime.setTime(sourceDate);
×
319
        Calendar sourceTime = Calendar.getInstance(sourceTimezone);
×
NEW
320
        sourceTime.set(localTime.get(Calendar.YEAR),
×
NEW
321
                localTime.get(Calendar.MONTH),
×
NEW
322
                localTime.get(Calendar.DATE),
×
NEW
323
                localTime.get(Calendar.HOUR_OF_DAY),
×
NEW
324
                localTime.get(Calendar.MINUTE));
×
325

326
        // Destination:
327
        SimpleDateFormat sdf = (SimpleDateFormat) SDF.clone();
×
328
        sdf.setTimeZone(destTimezone);
×
329
        outTimeTextField.setText(sdf.format(sourceTime.getTime()));
×
330
    }
×
331
}
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