comparison src/com/five_ten_sg/connectbot/HostListActivity.java @ 132:265a4733edcb

read deployment.connections on startup for new host entries
author Carl Byington <carl@five-ten-sg.com>
date Thu, 19 Jun 2014 15:47:34 -0700
parents 77ac18bc1b2f
children 81cafbe7cd9b
comparison
equal deleted inserted replaced
131:adf9ca45675b 132:265a4733edcb
23 import com.five_ten_sg.connectbot.service.TerminalBridge; 23 import com.five_ten_sg.connectbot.service.TerminalBridge;
24 import com.five_ten_sg.connectbot.service.TerminalManager; 24 import com.five_ten_sg.connectbot.service.TerminalManager;
25 import com.five_ten_sg.connectbot.transport.TransportFactory; 25 import com.five_ten_sg.connectbot.transport.TransportFactory;
26 import com.five_ten_sg.connectbot.util.HostDatabase; 26 import com.five_ten_sg.connectbot.util.HostDatabase;
27 import com.five_ten_sg.connectbot.util.PreferenceConstants; 27 import com.five_ten_sg.connectbot.util.PreferenceConstants;
28 import java.nio.file.Files;
28 import android.app.Activity; 29 import android.app.Activity;
29 import android.app.AlertDialog; 30 import android.app.AlertDialog;
30 import android.app.ListActivity; 31 import android.app.ListActivity;
31 import android.content.ComponentName; 32 import android.content.ComponentName;
32 import android.content.Context; 33 import android.content.Context;
38 import android.content.SharedPreferences.Editor; 39 import android.content.SharedPreferences.Editor;
39 import android.content.res.ColorStateList; 40 import android.content.res.ColorStateList;
40 import android.net.Uri; 41 import android.net.Uri;
41 import android.os.Build; 42 import android.os.Build;
42 import android.os.Bundle; 43 import android.os.Bundle;
44 import android.os.Environment;
43 import android.os.Handler; 45 import android.os.Handler;
44 import android.os.IBinder; 46 import android.os.IBinder;
45 import android.os.Message; 47 import android.os.Message;
46 import android.preference.PreferenceManager; 48 import android.preference.PreferenceManager;
47 import android.util.Log; 49 import android.util.Log;
179 181
180 makingShortcut = Intent.ACTION_CREATE_SHORTCUT.equals(getIntent().getAction()) 182 makingShortcut = Intent.ACTION_CREATE_SHORTCUT.equals(getIntent().getAction())
181 || Intent.ACTION_PICK.equals(getIntent().getAction()); 183 || Intent.ACTION_PICK.equals(getIntent().getAction());
182 // connect with hosts database and populate list 184 // connect with hosts database and populate list
183 hostdb = new HostDatabase(this); 185 hostdb = new HostDatabase(this);
186 createDeploymentHosts(); // build hosts from a deployment text file
184 updateList(); 187 updateList();
185 sortedByColor = prefs.getBoolean(PreferenceConstants.SORT_BY_COLOR, false); 188 sortedByColor = prefs.getBoolean(PreferenceConstants.SORT_BY_COLOR, false);
186 registerForContextMenu(getListView()); 189 registerForContextMenu(getListView());
187 getListView().setOnItemClickListener(new OnItemClickListener() { 190 getListView().setOnItemClickListener(new OnItemClickListener() {
188 191
385 intent.setData(uri); 388 intent.setData(uri);
386 startActivity(intent); 389 startActivity(intent);
387 return true; 390 return true;
388 } 391 }
389 392
393 private void createDeploymentHosts() {
394 try {
395 String fn = Environment.getExternalStorageDirectory().getAbsolutePath() +
396 File.separator + "deployment.connections";
397 BufferedReader reader = new BufferedReader(new FileReader(fn));
398 String line = null;
399 while ((line = reader.readLine()) != null) {
400 if (line.length() == 0) continue; // empty
401 if (line.substring(0,1).equals("#")) continue; // comment
402 if (!line.contains("://")) continue; // invalid uri
403 Uri uri = Uri.parse(line);
404 ContentValues values = null;
405 while ((line = reader.readLine()).length() > 0) {
406 String [] parts = line.split("=");
407 if (parts.length() != 2) continue;
408 if (values == null) values = new ContentValues();
409 values.put(parts[0], parts[1]);
410 }
411 HostBean host = TransportFactory.findHost(hostdb, uri);
412 if (host == null) {
413 host = TransportFactory.getTransport(uri.getScheme()).createHost(uri);
414 host.setColor(HostDatabase.COLOR_GRAY);
415 host.setPubkeyId(HostDatabase.PUBKEYID_ANY);
416 hostdb.saveHost(host);
417 }
418 host = TransportFactory.findHost(hostdb, uri);
419 if (host == null) continue;
420 if (values == null) continue;
421 SQLiteDatabase db = hostdb.getWritableDatabase();
422 db.update(HostDatabase.TABLE_HOSTS, values, "_id = ?", new String[] { String.valueOf(host.getId()) });
423 db.close();
424 }
425 reader.close();
426 Files.delete(fn);
427 }
428 catch (Exception e) {
429 Log.d(TAG, "Deployment scan failed.", e);
430 }
431 }
432
390 protected void updateList() { 433 protected void updateList() {
391 if (prefs.getBoolean(PreferenceConstants.SORT_BY_COLOR, false) != sortedByColor) { 434 if (prefs.getBoolean(PreferenceConstants.SORT_BY_COLOR, false) != sortedByColor) {
392 Editor edit = prefs.edit(); 435 Editor edit = prefs.edit();
393 edit.putBoolean(PreferenceConstants.SORT_BY_COLOR, sortedByColor); 436 edit.putBoolean(PreferenceConstants.SORT_BY_COLOR, sortedByColor);
394 edit.commit(); 437 edit.commit();