diff options
author | Kenny Root <kenny@the-b.org> | 2009-07-10 16:07:42 +0000 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2009-07-10 16:07:42 +0000 |
commit | ad97859930429db5a5237b9d15b8e9a66da11970 (patch) | |
tree | bacaa687524bd947776b328962eca63a9c63f13a /src/org | |
parent | abf0f26e1c52c92ed257a7c1cc1e91b1f56493b6 (diff) | |
download | connectbot-ad97859930429db5a5237b9d15b8e9a66da11970.tar.gz connectbot-ad97859930429db5a5237b9d15b8e9a66da11970.tar.bz2 connectbot-ad97859930429db5a5237b9d15b8e9a66da11970.zip |
Add support for picking files through AndExplorer as well
git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@370 df292f66-193f-0410-a5fc-6d59da041ff2
Diffstat (limited to 'src/org')
-rw-r--r-- | src/org/connectbot/PubkeyListActivity.java | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/src/org/connectbot/PubkeyListActivity.java b/src/org/connectbot/PubkeyListActivity.java index 8478bac..5413f7a 100644 --- a/src/org/connectbot/PubkeyListActivity.java +++ b/src/org/connectbot/PubkeyListActivity.java @@ -23,6 +23,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.net.URI; import java.security.KeyPair; import java.security.PrivateKey; import java.security.PublicKey; @@ -86,6 +87,10 @@ public class PubkeyListActivity extends ListActivity implements EventListener { private static final int MAX_KEYFILE_SIZE = 8192; private static final int REQUEST_CODE_PICK_FILE = 1; + // Constants for AndExplorer's file picking intent + private static final String ANDEXPLORER_TITLE = "explorer_title"; + private static final String MIME_TYPE_ANDEXPLORER_FILE = "vnd.android.cursor.dir/lysesoft.andexplorer.file"; + protected PubkeyDatabase pubkeydb; private List<PubkeyBean> pubkeys; @@ -204,16 +209,28 @@ public class PubkeyListActivity extends ListActivity implements EventListener { importkey.setIcon(android.R.drawable.ic_menu_upload); importkey.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { + Uri sdcard = Uri.fromFile(Environment.getExternalStorageDirectory()); + String pickerTitle = getString(R.string.pubkey_list_pick); + // Try to use OpenIntent's file browser to pick a file Intent intent = new Intent(FileManagerIntents.ACTION_PICK_FILE); - intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory())); - intent.putExtra(FileManagerIntents.EXTRA_TITLE, getString(R.string.pubkey_list_pick)); + intent.setData(sdcard); + intent.putExtra(FileManagerIntents.EXTRA_TITLE, pickerTitle); intent.putExtra(FileManagerIntents.EXTRA_BUTTON_TEXT, getString(android.R.string.ok)); try { startActivityForResult(intent, REQUEST_CODE_PICK_FILE); } catch (ActivityNotFoundException e) { - pickFileSimple(); + // If OI didn't work, try AndExplorer + intent = new Intent(Intent.ACTION_PICK); + intent.setDataAndType(sdcard, MIME_TYPE_ANDEXPLORER_FILE); + intent.putExtra(ANDEXPLORER_TITLE, pickerTitle); + + try { + startActivityForResult(intent, REQUEST_CODE_PICK_FILE); + } catch (ActivityNotFoundException e1) { + pickFileSimple(); + } } return true; @@ -470,20 +487,19 @@ public class PubkeyListActivity extends ListActivity implements EventListener { } @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); + protected void onActivityResult(int requestCode, int resultCode, Intent intent) { + super.onActivityResult(requestCode, resultCode, intent); switch (requestCode) { case REQUEST_CODE_PICK_FILE: - if (resultCode == RESULT_OK && data != null) { - String filename = data.getDataString(); - if (filename != null) { - // Get rid of URI prefix: - if (filename.startsWith("file://")) { - filename = filename.substring(7); - } - - readKeyFromFile(filename); + if (resultCode == RESULT_OK && intent != null) { + Uri uri = intent.getData(); + if (uri != null) { + readKeyFromFile(new File(URI.create(uri.toString()))); + } else { + String filename = intent.getDataString(); + if (filename != null) + readKeyFromFile(new File(URI.create(filename))); } } break; @@ -493,15 +509,13 @@ public class PubkeyListActivity extends ListActivity implements EventListener { /** * @param name */ - private void readKeyFromFile(String name) { + private void readKeyFromFile(File file) { PubkeyBean pubkey = new PubkeyBean(); // find the exact file selected - pubkey.setNickname(name); - File actual = new File(Environment.getExternalStorageDirectory(), - name); + pubkey.setNickname(file.getName()); - if (actual.length() > MAX_KEYFILE_SIZE) { + if (file.length() > MAX_KEYFILE_SIZE) { Toast.makeText(PubkeyListActivity.this, R.string.pubkey_import_parse_problem, Toast.LENGTH_LONG).show(); @@ -511,7 +525,7 @@ public class PubkeyListActivity extends ListActivity implements EventListener { // parse the actual key once to check if its encrypted // then save original file contents into our database try { - byte[] raw = readRaw(actual); + byte[] raw = readRaw(file); String data = new String(raw); if (data.startsWith(PubkeyUtils.PKCS8_START)) { @@ -542,7 +556,10 @@ public class PubkeyListActivity extends ListActivity implements EventListener { } // write new value into database + if (pubkeydb == null) + pubkeydb = new PubkeyDatabase(this); pubkeydb.savePubkey(pubkey); + updateHandler.sendEmptyMessage(-1); } catch(Exception e) { Log.e(TAG, "Problem parsing imported private key", e); @@ -587,7 +604,7 @@ public class PubkeyListActivity extends ListActivity implements EventListener { public void onClick(DialogInterface arg0, int arg1) { String name = namesList[arg1]; - readKeyFromFile(name); + readKeyFromFile(new File(sdcard, name)); } }) .setNegativeButton(android.R.string.cancel, null).create().show(); |