diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2015-06-23 16:58:40 +0200 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2015-06-23 16:58:40 +0200 |
commit | 6a5bd6509b088cf8cee3e9ddf9a5eac5a33de98a (patch) | |
tree | 9a2b162ce038a7dbbc252f9bae21198f6c6300ea /OpenKeychain/src/main/java | |
parent | 558cc6befca479d33c20ca58f426bda486b5ee8f (diff) | |
download | open-keychain-6a5bd6509b088cf8cee3e9ddf9a5eac5a33de98a.tar.gz open-keychain-6a5bd6509b088cf8cee3e9ddf9a5eac5a33de98a.tar.bz2 open-keychain-6a5bd6509b088cf8cee3e9ddf9a5eac5a33de98a.zip |
implement saving of files
Diffstat (limited to 'OpenKeychain/src/main/java')
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java | 25 | ||||
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/FileHelper.java | 31 |
2 files changed, 54 insertions, 2 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java index 422a12a2e..0d527926d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java @@ -19,6 +19,7 @@ package org.sufficientlysecure.keychain.ui; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -220,8 +221,7 @@ public class DecryptListFragment if (resultCode == Activity.RESULT_OK && data != null) { Uri saveUri = data.getData(); Uri outputUri = mOutputUris.get(mCurrentInputUri); - // TODO save from outputUri to saveUri - + saveFile(saveUri, outputUri); mCurrentInputUri = null; } return; @@ -233,6 +233,21 @@ public class DecryptListFragment } } + private void saveFile(Uri outputUri, Uri saveUri) { + Activity activity = getActivity(); + if (activity == null) { + return; + } + + try { + FileHelper.copyUriData(activity, outputUri, saveUri); + Notify.create(activity, R.string.file_saved, Style.ERROR).show(); + } catch (IOException e) { + Log.e(Constants.TAG, "error saving file", e); + Notify.create(activity, R.string.error_saving_file, Style.ERROR).show(); + } + } + @Override protected void cryptoOperation(CryptoInputParcel cryptoInput) { super.cryptoOperation(cryptoInput, false); @@ -448,6 +463,12 @@ public class DecryptListFragment if (mAdapter.mMenuClickedModel == null || !mAdapter.mMenuClickedModel.hasResult()) { return false; } + + // don't process menu items until all items are done! + if (!mPendingInputUris.isEmpty()) { + return true; + } + Activity activity = getActivity(); if (activity == null) { return false; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/FileHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/FileHelper.java index e223217ef..4a00f46cb 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/FileHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/FileHelper.java @@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.util; import android.annotation.TargetApi; import android.app.Activity; import android.content.ActivityNotFoundException; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.Cursor; @@ -41,8 +42,11 @@ import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround; import org.sufficientlysecure.keychain.ui.dialog.FileDialogFragment; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; @@ -267,6 +271,33 @@ public class FileHelper { } + public static void copyUriData(Context context, Uri fromUri, Uri toUri) throws IOException { + BufferedInputStream bis = null; + BufferedOutputStream bos = null; + + try { + ContentResolver resolver = context.getContentResolver(); + bis = new BufferedInputStream(resolver.openInputStream(fromUri)); + bos = new BufferedOutputStream(resolver.openOutputStream(toUri)); + byte[] buf = new byte[1024]; + int len; + while ( (len = bis.read(buf)) > 0) { + bos.write(buf, 0, len); + } + } finally { + try { + if (bis != null) { + bis.close(); + } + if (bos != null) { + bos.close(); + } + } catch (IOException e) { + // ignore, it's just stream closin' + } + } + } + public interface FileDialogCallback { void onFileSelected(File file, boolean checked); } |