diff --git a/bin/SSLDroid.apk b/bin/SSLDroid.apk index 780ed46..f5083fe 100644 Binary files a/bin/SSLDroid.apk and b/bin/SSLDroid.apk differ diff --git a/bin/classes.dex b/bin/classes.dex index d7cfcdb..f341a25 100644 Binary files a/bin/classes.dex and b/bin/classes.dex differ diff --git a/bin/resources.ap_ b/bin/resources.ap_ index ca8a129..842c630 100644 Binary files a/bin/resources.ap_ and b/bin/resources.ap_ differ diff --git a/res/layout/tunnel_details.xml b/res/layout/tunnel_details.xml index 5abf36c..a4185d1 100644 --- a/res/layout/tunnel_details.xml +++ b/res/layout/tunnel_details.xml @@ -10,7 +10,7 @@ android:paddingRight="10dip" android:gravity="right|center_vertical" android:textAppearance="?android:attr/textAppearanceMedium" /> - diff --git a/res/values/strings.xml b/res/values/strings.xml index 8575d23..4b24d7b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -14,4 +14,6 @@ Start service No tunnels configured yet Delete tunnel + Pick a PKCS12 file from SD card + No SD card present, please insert one to continue diff --git a/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java b/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java index be79eb1..a78b087 100644 --- a/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java +++ b/src/hu/blint/ssldroid/SSLDroidTunnelDetails.java @@ -1,9 +1,18 @@ package hu.blint.ssldroid; +import java.io.File; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.content.Intent; +import android.content.DialogInterface.OnClickListener; import android.database.Cursor; import android.os.Bundle; +import android.os.Environment; import android.util.Log; import android.view.View; import android.widget.Button; @@ -35,6 +44,14 @@ public class SSLDroidTunnelDetails extends Activity { remoteport = (EditText) findViewById(R.id.remoteport); pkcsfile = (EditText) findViewById(R.id.pkcsfile); pkcspass = (EditText) findViewById(R.id.pkcspass); + Button pickFile = (Button) findViewById(R.id.pickFile); + + pickFile.setOnClickListener(new View.OnClickListener() { + public void onClick(View view) { + pickFileSimple(); + } + }); + rowId = null; Bundle extras = getIntent().getExtras(); @@ -75,6 +92,50 @@ public class SSLDroidTunnelDetails extends Activity { }); } + //pick a file from /sdcard, courtesy of ConnectBot + private void pickFileSimple() { + // build list of all files in sdcard root + final File sdcard = Environment.getExternalStorageDirectory(); + Log.d("SSLDroid", "SD Card location: "+sdcard.toString()); + + // Don't show a dialog if the SD card is completely absent. + final String state = Environment.getExternalStorageState(); + if (!Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) + && !Environment.MEDIA_MOUNTED.equals(state)) { + new AlertDialog.Builder(SSLDroidTunnelDetails.this) + .setMessage(R.string.alert_sdcard_absent) + .setNegativeButton(android.R.string.cancel, null).create().show(); + return; + } + + List names = new LinkedList(); + { + File[] files = sdcard.listFiles(); + if (files != null) { + for(File file : sdcard.listFiles()) { + if(file.isDirectory()) continue; + names.add(file.getName()); + } + } + } + Collections.sort(names); + + final String[] namesList = names.toArray(new String[] {}); + Log.d("SSLDroid", "Gathered file names: "+names.toString()); + + // prompt user to select any file from the sdcard root + new AlertDialog.Builder(SSLDroidTunnelDetails.this) + .setTitle(R.string.pkcsfile_pick) + .setItems(namesList, new OnClickListener() { + public void onClick(DialogInterface arg0, int arg1) { + String name = namesList[arg1]; + + pkcsfile.setText(sdcard+"/"+name); + } + }) + .setNegativeButton(android.R.string.cancel, null).create().show(); + } + private void populateFields() { if (rowId != null) { Cursor Tunnel = dbHelper.fetchTunnel(rowId); @@ -147,12 +208,14 @@ public class SSLDroidTunnelDetails extends Activity { } if (rowId == null) { - long id = dbHelper.createTunnel(sName, sLocalport, sRemotehost, sRemoteport, sPkcsfile, sPkcspass); + long id = dbHelper.createTunnel(sName, sLocalport, sRemotehost, + sRemoteport, sPkcsfile, sPkcspass); if (id > 0) { rowId = id; } } else { - dbHelper.updateTunnel(rowId, sName, sLocalport, sRemotehost, sRemoteport, sPkcsfile, sPkcspass); + dbHelper.updateTunnel(rowId, sName, sLocalport, sRemotehost, sRemoteport, + sPkcsfile, sPkcspass); } Log.d("SSLDroid", "Saving settings...");