summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2014-01-21 20:37:05 +0100
committerArne Schwabe <arne@rfc2549.org>2014-01-21 20:37:05 +0100
commitf3957386eb230ab85fa7d727c96d9ca6fe122ee3 (patch)
tree1d8c26896b8b0283c740314068f09cbe2f36ee4a
parent3dbcc517f0f060c46adf0a54024bff85d54a5982 (diff)
Move to common code for selecting and embedding files
--HG-- extra : rebase_source : 7e0aa4672ca93e4e3b6a7c056e1004edd12f2fbc
-rw-r--r--src/de/blinkt/openvpn/fragments/Settings_Authentication.java21
-rw-r--r--src/de/blinkt/openvpn/fragments/Settings_Basic.java11
-rw-r--r--src/de/blinkt/openvpn/fragments/Utils.java122
-rw-r--r--src/de/blinkt/openvpn/fragments/VPNProfileList.java32
-rw-r--r--src/de/blinkt/openvpn/views/FileSelectLayout.java108
5 files changed, 155 insertions, 139 deletions
diff --git a/src/de/blinkt/openvpn/fragments/Settings_Authentication.java b/src/de/blinkt/openvpn/fragments/Settings_Authentication.java
index d8c4ac6a..ac0d804a 100644
--- a/src/de/blinkt/openvpn/fragments/Settings_Authentication.java
+++ b/src/de/blinkt/openvpn/fragments/Settings_Authentication.java
@@ -2,6 +2,7 @@ package de.blinkt.openvpn.fragments;
import android.app.Activity;
import android.content.Intent;
+import android.os.Build;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
@@ -19,7 +20,8 @@ import de.blinkt.openvpn.VpnProfile;
public class Settings_Authentication extends OpenVpnPreferencesFragment implements OnPreferenceChangeListener, OnPreferenceClickListener {
private static final int SELECT_TLS_FILE = 23223232;
- private CheckBoxPreference mExpectTLSCert;
+ private static final int SELECT_TLS_FILE_KITKAT = SELECT_TLS_FILE +1;
+ private CheckBoxPreference mExpectTLSCert;
private CheckBoxPreference mCheckRemoteCN;
private RemoteCNPreference mRemoteCN;
private ListPreference mTLSAuthDirection;
@@ -159,10 +161,15 @@ public class Settings_Authentication extends OpenVpnPreferencesFragment implemen
}
void startFileDialog() {
- Intent startFC = new Intent(getActivity(), FileSelect.class);
- startFC.putExtra(FileSelect.START_DATA, mTlsAuthFileData);
- startFC.putExtra(FileSelect.WINDOW_TITLE, R.string.tls_auth_file);
- startActivityForResult(startFC, SELECT_TLS_FILE);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ Intent startFC = Utils.getFilePickerIntent (Utils.FileType.TLS_AUTH_FILE);
+ startActivityForResult(startFC, SELECT_TLS_FILE_KITKAT);
+ } else {
+ Intent startFC = new Intent(getActivity(), FileSelect.class);
+ startFC.putExtra(FileSelect.START_DATA, mTlsAuthFileData);
+ startFC.putExtra(FileSelect.WINDOW_TITLE, R.string.tls_auth_file);
+ startActivityForResult(startFC, SELECT_TLS_FILE);
+ }
}
@Override
@@ -180,7 +187,9 @@ public class Settings_Authentication extends OpenVpnPreferencesFragment implemen
mTlsAuthFileData=result;
setTlsAuthSummary(result);
- }
+ } else if (requestCode == SELECT_TLS_FILE_KITKAT && requestCode == Activity.RESULT_OK) {
+
+ }
}
private void setTlsAuthSummary(String result) {
diff --git a/src/de/blinkt/openvpn/fragments/Settings_Basic.java b/src/de/blinkt/openvpn/fragments/Settings_Basic.java
index cf4d22d1..f2fab505 100644
--- a/src/de/blinkt/openvpn/fragments/Settings_Basic.java
+++ b/src/de/blinkt/openvpn/fragments/Settings_Basic.java
@@ -26,7 +26,6 @@ import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.ToggleButton;
-import de.blinkt.openvpn.activities.FileSelect;
import de.blinkt.openvpn.views.FileSelectLayout;
import de.blinkt.openvpn.R;
import de.blinkt.openvpn.VpnProfile;
@@ -64,7 +63,7 @@ public class Settings_Basic extends Fragment implements View.OnClickListener, On
- private void addFileSelectLayout (FileSelectLayout fsl, FileSelectLayout.FileType type) {
+ private void addFileSelectLayout (FileSelectLayout fsl, Utils.FileType type) {
int i = fileselects.size() + CHOOSE_FILE_OFFSET;
fileselects.put(i, fsl);
fsl.setFragment(this,i,type);
@@ -141,10 +140,10 @@ public class Settings_Basic extends Fragment implements View.OnClickListener, On
mPassword = (EditText) mView.findViewById(R.id.auth_password);
mKeyPassword = (EditText) mView.findViewById(R.id.key_password);
- addFileSelectLayout(mCaCert, FileSelectLayout.FileType.CERTIFICATE);
- addFileSelectLayout(mClientCert, FileSelectLayout.FileType.CERTIFICATE);
- addFileSelectLayout(mClientKey, FileSelectLayout.FileType.KEYFILE);
- addFileSelectLayout(mpkcs12, FileSelectLayout.FileType.PKCS12);
+ addFileSelectLayout(mCaCert, Utils.FileType.CERTIFICATE);
+ addFileSelectLayout(mClientCert, Utils.FileType.CERTIFICATE);
+ addFileSelectLayout(mClientKey, Utils.FileType.KEYFILE);
+ addFileSelectLayout(mpkcs12, Utils.FileType.PKCS12);
mCaCert.setShowClear();
mType.setOnItemSelectedListener(this);
diff --git a/src/de/blinkt/openvpn/fragments/Utils.java b/src/de/blinkt/openvpn/fragments/Utils.java
new file mode 100644
index 00000000..d7a144ed
--- /dev/null
+++ b/src/de/blinkt/openvpn/fragments/Utils.java
@@ -0,0 +1,122 @@
+package de.blinkt.openvpn.fragments;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Build;
+import android.util.Base64;
+import android.webkit.MimeTypeMap;
+
+import java.io.*;
+import java.util.TreeSet;
+import java.util.Vector;
+
+public class Utils {
+
+ @TargetApi(Build.VERSION_CODES.KITKAT)
+ public static Intent getFilePickerIntent(FileType fileType) {
+ Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+ i.addCategory(Intent.CATEGORY_OPENABLE);
+ TreeSet<String> supportedMimeTypes = new TreeSet<String>();
+ Vector<String> extensions = new Vector<String>();
+
+ switch (fileType) {
+ case PKCS12:
+ i.setType("application/x-pkcs12");
+ supportedMimeTypes.add("application/x-pkcs12");
+ extensions.add("p12");
+ extensions.add("pfx");
+ break;
+ case CERTIFICATE:
+ i.setType("application/x-pem-file");
+ supportedMimeTypes.add("application/x-x509-ca-cert");
+ supportedMimeTypes.add("application/x-x509-user-cert");
+ supportedMimeTypes.add("application/x-pem-file");
+ supportedMimeTypes.add("text/plain");
+
+ extensions.add("pem");
+ extensions.add("crt");
+ break;
+ case KEYFILE:
+ i.setType("application/x-pem-file");
+ supportedMimeTypes.add("application/x-pem-file");
+ supportedMimeTypes.add("application/pkcs8");
+ extensions.add("key");
+ break;
+
+ case OVPN_CONFIG:
+ i.setType("application/x-openvpn-profile");
+ supportedMimeTypes.add("application/x-openvpn-profile");
+ supportedMimeTypes.add("application/openvpn-profile");
+ supportedMimeTypes.add("application/ovpn");
+ extensions.add("ovpn");
+ extensions.add("conf");
+ break;
+ case TLS_AUTH_FILE:
+ i.setType("text/plain");
+
+ // Backup ....
+ supportedMimeTypes.add("application/pkcs8");
+ extensions.add("txt");
+ extensions.add("key");
+ break;
+ }
+
+ MimeTypeMap mtm = MimeTypeMap.getSingleton();
+
+ for (String ext : extensions) {
+ String mimeType = mtm.getMimeTypeFromExtension(ext);
+ if (mimeType != null)
+ supportedMimeTypes.add(mimeType);
+ else
+ supportedMimeTypes.add("application/octet-stream");
+ }
+
+ i.putExtra(Intent.EXTRA_MIME_TYPES, supportedMimeTypes.toArray(new String[supportedMimeTypes.size()]));
+ return i;
+ }
+
+ public enum FileType {
+ PKCS12,
+ CERTIFICATE,
+ OVPN_CONFIG,
+ KEYFILE,
+ TLS_AUTH_FILE
+ }
+
+ static private byte[] readBytesFromStream(InputStream input) throws IOException {
+
+ ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+
+ int nRead;
+ byte[] data = new byte[16384];
+
+ while ((nRead = input.read(data, 0, data.length)) != -1) {
+ buffer.write(data, 0, nRead);
+ }
+
+ buffer.flush();
+ input.close();
+ return buffer.toByteArray();
+ }
+
+ public static String getStringFromFilePickerResult(FileType ft, Intent result, Context c) throws IOException {
+
+ Uri uri = result.getData();
+ if (uri ==null)
+ return null;
+
+ byte[] fileData = readBytesFromStream(c.getContentResolver().openInputStream(uri));
+ String newData = null;
+ switch (ft) {
+ case PKCS12:
+ newData = Base64.encodeToString(fileData, Base64.DEFAULT);
+ break;
+ default:
+ newData = new String(fileData, "UTF-8");
+ break;
+ }
+ return newData;
+ }
+}
diff --git a/src/de/blinkt/openvpn/fragments/VPNProfileList.java b/src/de/blinkt/openvpn/fragments/VPNProfileList.java
index 1fd875b0..b26f3505 100644
--- a/src/de/blinkt/openvpn/fragments/VPNProfileList.java
+++ b/src/de/blinkt/openvpn/fragments/VPNProfileList.java
@@ -220,37 +220,7 @@ public class VPNProfileList extends ListFragment {
@TargetApi(Build.VERSION_CODES.KITKAT)
private void startFilePicker() {
-
-
-
- Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT);
- i.addCategory(Intent.CATEGORY_OPENABLE);
- i.setType("application/x-openvpn-profile");
-
-
- TreeSet<String> supportedMimeTypes = new TreeSet<String>();
- supportedMimeTypes.add("application/x-openvpn-profile");
- supportedMimeTypes.add("application/openvpn-profile");
- supportedMimeTypes.add("application/ovpn");
-
-
- // Webservers unfortunately report this for .conf files sometimes
- supportedMimeTypes.add("text/plain");
- supportedMimeTypes.add("application/conf");
-
- MimeTypeMap mtm = MimeTypeMap.getSingleton();
-
- for(String ext: new String[] {"ovpn", "conf"}) {
- String mimeType = mtm.getMimeTypeFromExtension(ext);
- if(mimeType!=null)
- supportedMimeTypes.add(mimeType);
- else
- supportedMimeTypes.add("application/octet-stream");
- }
-
-
-
- i.putExtra(Intent.EXTRA_MIME_TYPES, supportedMimeTypes.toArray(new String[supportedMimeTypes.size()]));
+ Intent i = Utils.getFilePickerIntent(Utils.FileType.OVPN_CONFIG);
startActivityForResult(i, FILE_PICKER_RESULT);
}
diff --git a/src/de/blinkt/openvpn/views/FileSelectLayout.java b/src/de/blinkt/openvpn/views/FileSelectLayout.java
index 57ccd895..18a2a766 100644
--- a/src/de/blinkt/openvpn/views/FileSelectLayout.java
+++ b/src/de/blinkt/openvpn/views/FileSelectLayout.java
@@ -1,13 +1,7 @@
package de.blinkt.openvpn.views;
-import android.annotation.TargetApi;
-import android.app.Activity;
import android.net.Uri;
-import android.os.Build;
-import android.text.TextUtils;
-import android.text.style.CharacterStyle;
import android.util.Base64;
-import android.webkit.MimeTypeMap;
import de.blinkt.openvpn.R;
import de.blinkt.openvpn.VpnProfile;
import de.blinkt.openvpn.activities.FileSelect;
@@ -23,10 +17,9 @@ import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
+import de.blinkt.openvpn.fragments.Utils;
import java.io.*;
-import java.util.TreeSet;
-import java.util.Vector;
import static android.os.Build.*;
@@ -38,20 +31,10 @@ public class FileSelectLayout extends LinearLayout implements OnClickListener {
String fileData = data.getStringExtra(FileSelect.RESULT_DATA);
setData(fileData, c);
} else if (data != null) {
- Uri uri = data.getData();
try {
- byte[] fileData = readBytesFromStream(c.getContentResolver().openInputStream(uri));
- String newData = null;
- switch (fileType) {
- case CERTIFICATE:
- case KEYFILE:
- newData = new String(fileData, "UTF-8");
- break;
- case PKCS12:
- newData = Base64.encodeToString(fileData, Base64.DEFAULT);
- break;
- }
- setData(VpnProfile.INLINE_TAG + newData, c);
+ String newData = Utils.getStringFromFilePickerResult(fileType,data,c);
+ if (newData!=null)
+ setData(VpnProfile.INLINE_TAG + newData, c);
} catch (IOException e) {
VpnStatus.logException(e);
@@ -61,35 +44,13 @@ public class FileSelectLayout extends LinearLayout implements OnClickListener {
}
}
- static private byte[] readBytesFromStream(InputStream input) throws IOException {
-
- ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-
- int nRead;
- byte[] data = new byte[16384];
-
- while ((nRead = input.read(data, 0, data.length)) != -1) {
- buffer.write(data, 0, nRead);
- }
-
- buffer.flush();
- input.close();
- return buffer.toByteArray();
- }
-
- public enum FileType {
- PKCS12,
- CERTIFICATE,
- KEYFILE
- }
-
private final boolean mIsCertificate;
private TextView mDataView;
private String mData;
private Fragment mFragment;
private int mTaskId;
private Button mSelectButton;
- private FileType fileType;
+ private Utils.FileType fileType;
private String mTitle;
private boolean mShowClear;
private TextView mDataDetails;
@@ -114,7 +75,7 @@ public class FileSelectLayout extends LinearLayout implements OnClickListener {
ta.recycle();
}
- public void setFragment(Fragment fragment, int i, FileType ft) {
+ public void setFragment(Fragment fragment, int i, Utils.FileType ft) {
mTaskId = i;
mFragment = fragment;
fileType = ft;
@@ -124,7 +85,7 @@ public class FileSelectLayout extends LinearLayout implements OnClickListener {
Intent startFC = new Intent(getContext(), FileSelect.class);
startFC.putExtra(FileSelect.START_DATA, mData);
startFC.putExtra(FileSelect.WINDOW_TITLE, mTitle);
- if (fileType == FileType.PKCS12)
+ if (fileType == Utils.FileType.PKCS12)
startFC.putExtra(FileSelect.DO_BASE64_ENCODE, true);
if (mShowClear)
startFC.putExtra(FileSelect.SHOW_CLEAR_BUTTON, true);
@@ -156,62 +117,17 @@ public class FileSelectLayout extends LinearLayout implements OnClickListener {
@Override
public void onClick(View v) {
if (v == mSelectButton) {
- if (VERSION.SDK_INT >= VERSION_CODES.KITKAT)
- startFilePicker();
- else
+ if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
+ Intent startFilePicker = Utils.getFilePickerIntent(fileType);
+ mFragment.startActivityForResult(startFilePicker, mTaskId);
+ } else {
getCertificateFileDialog();
+ }
}
}
- @TargetApi(VERSION_CODES.KITKAT)
- private void startFilePicker() {
-
-
- Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT);
- i.addCategory(Intent.CATEGORY_OPENABLE);
- TreeSet<String> supportedMimeTypes = new TreeSet<String>();
- Vector<String> extensions = new Vector<String>();
-
- switch (fileType) {
- case PKCS12:
- i.setType("application/x-pkcs12");
- supportedMimeTypes.add("application/x-pkcs12");
- extensions.add("p12");
- extensions.add("pfx");
- break;
- case CERTIFICATE:
- i.setType("application/x-pem-file");
- supportedMimeTypes.add("application/x-x509-ca-cert");
- supportedMimeTypes.add("application/x-x509-user-cert");
- supportedMimeTypes.add("application/x-pem-file");
- supportedMimeTypes.add("text/plain");
-
- extensions.add("pem");
- extensions.add("crt");
- break;
- case KEYFILE:
- i.setType("application/x-pem-file");
- supportedMimeTypes.add("application/x-pem-file");
- supportedMimeTypes.add("application/pkcs8");
- extensions.add("key");
- break;
- }
- MimeTypeMap mtm = MimeTypeMap.getSingleton();
-
- for (String ext : new String[]{"ovpn", "conf"}) {
- String mimeType = mtm.getMimeTypeFromExtension(ext);
- if (mimeType != null)
- supportedMimeTypes.add(mimeType);
- else
- supportedMimeTypes.add("application/octet-stream");
- }
-
-
- i.putExtra(Intent.EXTRA_MIME_TYPES, supportedMimeTypes.toArray(new String[supportedMimeTypes.size()]));
- mFragment.startActivityForResult(i, mTaskId);
- }
public void setShowClear() {
mShowClear = true;