diff options
author | Arne Schwabe <arne@rfc2549.org> | 2014-01-21 20:37:05 +0100 |
---|---|---|
committer | Arne Schwabe <arne@rfc2549.org> | 2014-01-21 20:37:05 +0100 |
commit | f3957386eb230ab85fa7d727c96d9ca6fe122ee3 (patch) | |
tree | 1d8c26896b8b0283c740314068f09cbe2f36ee4a /src/de/blinkt/openvpn/views/FileSelectLayout.java | |
parent | 3dbcc517f0f060c46adf0a54024bff85d54a5982 (diff) |
Move to common code for selecting and embedding files
--HG--
extra : rebase_source : 7e0aa4672ca93e4e3b6a7c056e1004edd12f2fbc
Diffstat (limited to 'src/de/blinkt/openvpn/views/FileSelectLayout.java')
-rw-r--r-- | src/de/blinkt/openvpn/views/FileSelectLayout.java | 108 |
1 files changed, 12 insertions, 96 deletions
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; |