24
24
import java .io .IOException ;
25
25
import java .util .ArrayList ;
26
26
import java .util .Arrays ;
27
+ import java .util .HashMap ;
27
28
import java .util .List ;
28
29
import java .util .Vector ;
29
30
import java .util .concurrent .CancellationException ;
30
31
import java .util .concurrent .ExecutionException ;
31
32
32
33
@ SuppressWarnings ("serial" )
33
34
public class SDKUpdater extends JFrame implements PropertyChangeListener {
34
- private final Vector <String > columnsInstalled = new Vector <>(Arrays .asList ("Path " , "Version " , "Description " ));
35
- private final Class [] columnClassI = new Class []{
36
- String .class , String .class , String .class
37
- };
35
+ private final Vector <String > columns = new Vector <>(Arrays .asList ("Package name " , "Installed version " , "New version " ));
36
+ // private final Class[] columnClassI = new Class[]{
37
+ // String.class, String.class, String.class
38
+ // };
38
39
39
- private final Vector <String > columnsUpdates = new Vector <>(Arrays .asList ("ID" , "Installed" , "Available" ));
40
- private final Class [] columnClassU = new Class []{
41
- String .class , String .class , String .class
42
- };
40
+ // private final Vector<String> columnsUpdates = new Vector<>(Arrays.asList("ID", "Installed", "Available"));
41
+ // private final Class[] columnClassU = new Class[]{
42
+ // String.class, String.class, String.class
43
+ // };
43
44
44
45
private static final String PROPERTY_CHANGE_QUERY = "query" ;
45
46
46
47
private AndroidSDK sdk ;
47
- // private File toolsFolder;
48
- private Vector <Vector <String >> updatesList ;
49
48
private Vector <Vector <String >> installedList ;
49
+ // private Vector<Vector<String>> updatesList;
50
+
50
51
private QueryTask queryTask ;
51
52
private DownloadTask downloadTask ;
52
53
private boolean downloadTaskRunning ;
53
54
55
+ // private Vector<Vector<String>> packageInfo;
56
+ // private DefaultTableModel packageTable;
57
+
54
58
private DefaultTableModel modelInstalled ;
55
- private DefaultTableModel modelUpdates ;
59
+ private int numUpdates ;
60
+ // private DefaultTableModel modelUpdates;
61
+
56
62
private JProgressBar progressBar ;
57
63
private JLabel status ;
58
64
private JButton actionButton ;
@@ -74,10 +80,8 @@ public SDKUpdater(Editor editor, AndroidMode androidMode) {
74
80
e .printStackTrace ();
75
81
}
76
82
77
- if (sdk == null )
78
- return ;
83
+ if (sdk == null ) return ;
79
84
80
- // toolsFolder = sdk.getToolsFolder();
81
85
queryTask = new QueryTask ();
82
86
queryTask .addPropertyChangeListener (this );
83
87
queryTask .execute ();
@@ -89,13 +93,16 @@ public void propertyChange(PropertyChangeEvent evt) {
89
93
switch (evt .getPropertyName ()) {
90
94
case PROPERTY_CHANGE_QUERY :
91
95
progressBar .setIndeterminate (false );
92
- if (updatesList .size () == 0 ) {
96
+ if (numUpdates == 0 ) {
97
+ actionButton .setEnabled (false );
93
98
status .setText ("No updates available" );
94
- status .setForeground (Color .GREEN );
95
99
} else {
96
- actionButton .setVisible (true );
97
- status .setText ("Update(s) found!" );
98
- status .setForeground (Color .BLUE );
100
+ actionButton .setEnabled (true );
101
+ if (numUpdates == 1 ) {
102
+ status .setText ("1 update found!" );
103
+ } else {
104
+ status .setText (numUpdates + " updates found!" );
105
+ }
99
106
}
100
107
break ;
101
108
}
@@ -104,7 +111,7 @@ public void propertyChange(PropertyChangeEvent evt) {
104
111
class QueryTask extends SwingWorker <Object , Object > {
105
112
@ Override
106
113
protected Object doInBackground () throws Exception {
107
- updatesList = new Vector <>() ;
114
+ numUpdates = 0 ;
108
115
installedList = new Vector <>();
109
116
110
117
/* Following code is from listPackages() of com.android.sdklib.tool.SdkManagerCli
@@ -132,13 +139,77 @@ public Channel getChannel() {
132
139
}), null );
133
140
134
141
RepositoryPackages packages = mRepoManager .getPackages ();
135
-
142
+ HashMap <String , String []> local = new HashMap ();
143
+ for (LocalPackage pck : packages .getLocalPackages ().values ()) {
144
+ String path = pck .getPath ();
145
+ String name = pck .getDisplayName ();
146
+ String ver = pck .getVersion ().toString ();
147
+ int rev = name .indexOf (", rev" );
148
+ if (-1 < rev ) {
149
+ name = name .substring (0 , rev );
150
+ }
151
+ int maj = ver .indexOf ("." );
152
+ if (-1 < maj ) {
153
+ String major = ver .substring (0 , maj );
154
+ int pos = name .indexOf (major );
155
+ if (-1 < pos ) {
156
+ name = name .substring (0 , pos ).trim ();
157
+ }
158
+ }
159
+ local .put (path , new String []{name , ver });
160
+ }
161
+
162
+ HashMap <String , String []> update = new HashMap ();
163
+ for (UpdatablePackage pck : packages .getUpdatedPkgs ()) {
164
+ String path = pck .getPath ();
165
+ String inst = pck .getLocal ().getVersion ().toString ();
166
+ String updt = pck .getRemote ().getVersion ().toString ();
167
+ update .put (path , new String []{inst , updt });
168
+ }
169
+
170
+ for (String path : local .keySet ()) {
171
+ Vector <String > info = new Vector <>();
172
+ String [] locInfo = local .get (path );
173
+ info .add (locInfo [0 ]);
174
+ info .add (locInfo [1 ]);
175
+ if (update .containsKey (path )) {
176
+ String [] updInfo = update .get (path );
177
+ info .add (updInfo [1 ]);
178
+ numUpdates ++;
179
+ } else {
180
+ info .add ("" );
181
+ }
182
+ installedList .add (info );
183
+ }
184
+
185
+
186
+ /*
136
187
for (LocalPackage local : packages.getLocalPackages().values()) {
137
188
Vector<String> localPackages = new Vector<>();
189
+ String name = local.getDisplayName();
190
+ String ver = local.getVersion().toString();
191
+ int rev = name.indexOf(", rev");
192
+ if (-1 < rev) {
193
+ name = name.substring(0, rev);
194
+ }
195
+ int maj = ver.indexOf(".");
196
+ if (-1 < maj) {
197
+ String major = ver.substring(0, maj);
198
+ int pos = name.indexOf(major);
199
+ if (-1 < pos) {
200
+ name = name.substring(0, pos).trim();
201
+ }
202
+ }
203
+
138
204
localPackages.add(local.getPath());
139
205
localPackages.add(local.getVersion().toString());
140
- localPackages .add (local .getDisplayName ());
141
-
206
+ localPackages.add(name);
207
+
208
+ System.out.println("*************************");
209
+ System.out.println(local.getDisplayName());
210
+ System.out.println(name);
211
+
212
+
142
213
installedList.add(localPackages);
143
214
}
144
215
@@ -150,6 +221,8 @@ public Channel getChannel() {
150
221
151
222
updatesList.add(updatePackages);
152
223
}
224
+ */
225
+
153
226
154
227
return null ;
155
228
}
@@ -162,12 +235,13 @@ protected void done() {
162
235
get ();
163
236
firePropertyChange (PROPERTY_CHANGE_QUERY , "query" , "SUCCESS" );
164
237
165
- if (updatesList != null && installedList != null ) {
166
- modelInstalled .setDataVector (installedList , columnsInstalled );
167
- modelUpdates .setDataVector (updatesList , columnsUpdates );
168
-
169
- modelUpdates .fireTableDataChanged ();
238
+ if (installedList != null ) {
239
+ modelInstalled .setDataVector (installedList , columns );
170
240
modelInstalled .fireTableDataChanged ();
241
+
242
+ // modelUpdates.setDataVector(updatesList, columnsUpdates);
243
+ // modelUpdates.fireTableDataChanged();
244
+
171
245
}
172
246
} catch (InterruptedException | CancellationException e ) {
173
247
this .cancel (false );
@@ -232,7 +306,8 @@ protected void done() {
232
306
233
307
try {
234
308
get ();
235
- actionButton .setVisible (false ); //Hide button after update completes
309
+ // actionButton.setVisible(false); //Hide button after update completes
310
+ actionButton .setEnabled (false );
236
311
status .setText ("Refreshing packages..." );
237
312
238
313
queryTask = new QueryTask ();
@@ -290,47 +365,48 @@ private void createLayout() {
290
365
291
366
/* Packages panel */
292
367
JPanel packagesPanel = new JPanel ();
293
- packagesPanel .setBorder (BorderFactory .createTitledBorder (
294
- BorderFactory .createEtchedBorder (), "Packages" ));
368
+ // packagesPanel.setBorder(BorderFactory.createTitledBorder(
369
+ // BorderFactory.createEtchedBorder(), "Packages"));
295
370
296
371
BoxLayout boxLayout = new BoxLayout (packagesPanel , BoxLayout .Y_AXIS );
297
372
packagesPanel .setLayout (boxLayout );
298
373
299
374
/* Installed Packages panel */
300
- JPanel installedPanel = new JPanel (new BorderLayout ());
301
- installedPanel .setBorder (BorderFactory .createTitledBorder (
302
- BorderFactory .createEtchedBorder (), "Installed" ));
375
+ // JPanel installedPanel = new JPanel(new BorderLayout());
376
+ // installedPanel.setBorder(BorderFactory.createTitledBorder(
377
+ // BorderFactory.createEtchedBorder(), "Installed"));
303
378
304
379
//Installed Packages table
305
- modelInstalled = new DefaultTableModel (15 , columnClassI . length ) {
380
+ modelInstalled = new DefaultTableModel (15 , columns . size () ) {
306
381
@ Override
307
382
public boolean isCellEditable (int row , int column ) {
308
383
return false ;
309
384
}
310
385
311
386
@ Override
312
387
public Class <?> getColumnClass (int columnIndex ) {
313
- return columnClassI [ columnIndex ] ;
388
+ return String . class ;
314
389
}
315
390
};
316
391
JTable tInstalled = new JTable (modelInstalled ) {
317
392
@ Override
318
393
public String getColumnName (int column ) {
319
- return columnsInstalled .get (column );
394
+ return columns .get (column );
320
395
}
321
396
};
322
397
tInstalled .setFillsViewportHeight (true );
323
398
324
399
tInstalled .setPreferredScrollableViewportSize (new Dimension (tInstalled .getPreferredSize ().width ,
325
400
15 * tInstalled .getRowHeight ()));
326
- installedPanel .add (new JScrollPane (tInstalled ));
401
+ packagesPanel .add (new JScrollPane (tInstalled ));
327
402
328
403
329
404
/* Updates panel */
330
- JPanel updatesPanel = new JPanel (new BorderLayout ());
331
- updatesPanel .setBorder (BorderFactory .createTitledBorder (
332
- BorderFactory .createEtchedBorder (), "Available Updates" ));
405
+ // JPanel updatesPanel = new JPanel(new BorderLayout());
406
+ // updatesPanel.setBorder(BorderFactory.createTitledBorder(
407
+ // BorderFactory.createEtchedBorder(), "Available Updates"));
333
408
409
+ /*
334
410
//Updates table
335
411
modelUpdates = new DefaultTableModel(5, columnClassU.length) {
336
412
@Override
@@ -353,9 +429,12 @@ public String getColumnName(int column) {
353
429
tUpdates.setPreferredScrollableViewportSize(new Dimension(tUpdates.getPreferredSize().width,
354
430
5 * tUpdates.getRowHeight()));
355
431
updatesPanel.add(new JScrollPane(tUpdates), BorderLayout.CENTER);
356
-
357
- packagesPanel .add (installedPanel );
358
- packagesPanel .add (updatesPanel );
432
+ */
433
+
434
+
435
+
436
+ // packagesPanel.add(installedPanel);
437
+ // packagesPanel.add(updatesPanel);
359
438
360
439
JPanel controlPanel = new JPanel ();
361
440
GridBagLayout gridBagLayout = new GridBagLayout ();
@@ -393,7 +472,8 @@ public void actionPerformed(ActionEvent e) {
393
472
}
394
473
}
395
474
});
396
- actionButton .setVisible (false );
475
+ // actionButton.setVisible(false);
476
+ actionButton .setEnabled (false );
397
477
gbc .gridx = 1 ;
398
478
gbc .gridy = 0 ;
399
479
gbc .weightx = 0.0 ;
0 commit comments