From 3513f4453b6df6f72e42bc459195fb0f4b1313b9 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Tue, 29 Sep 2015 02:09:57 +0200 Subject: enc-export: implement save file as CREATE_DOCUMENT, with static fallback for pre-kitkat --- .../keychain/ui/BackupCodeFragment.java | 84 ++++++++++++++++++---- 1 file changed, 69 insertions(+), 15 deletions(-) (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BackupCodeFragment.java') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BackupCodeFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BackupCodeFragment.java index 298858329..abf1a890e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BackupCodeFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/BackupCodeFragment.java @@ -31,6 +31,7 @@ import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.support.annotation.ColorInt; import android.support.annotation.NonNull; @@ -56,6 +57,7 @@ import org.sufficientlysecure.keychain.provider.TemporaryStorageProvider; import org.sufficientlysecure.keychain.service.ExportKeyringParcel; import org.sufficientlysecure.keychain.ui.base.CryptoOperationFragment; import org.sufficientlysecure.keychain.ui.util.Notify; +import org.sufficientlysecure.keychain.ui.util.Notify.ActionListener; import org.sufficientlysecure.keychain.ui.util.Notify.Style; import org.sufficientlysecure.keychain.util.FileHelper; import org.sufficientlysecure.keychain.util.Passphrase; @@ -68,6 +70,7 @@ public class BackupCodeFragment extends CryptoOperationFragment= Build.VERSION_CODES.KITKAT) { + String filename = "openkeychain_backup_" + date + (mExportSecret ? ".gpg" : ".pub.gpg"); + FileHelper.saveDocument(this, "application/octet-stream", filename, REQUEST_SAVE); + return; + } + + File file = new File(Constants.Path.APP_DIR, "backup_" + date + (mExportSecret ? ".gpg" : ".pub.gpg")); + + if (!overwrite && file.exists()) { + Notify.create(activity, "Backup already exists!", Style.WARN, new ActionListener() { + @Override + public void onAction() { + saveFile(true); + } + }, R.string.snack_btn_overwrite).show(); + return; + } + + try { + FileHelper.copyUriData(activity, mCachedExportUri, Uri.fromFile(file)); + Notify.create(activity, "Saved to /sdcard/OpenKeychain", Style.OK).show(); + } catch (IOException e) { + Notify.create(activity, "Error saving backup", Style.ERROR).show(); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode != REQUEST_SAVE) { + super.onActivityResult(requestCode, resultCode, data); + return; + } + + if (resultCode != FragmentActivity.RESULT_OK) { + return; + } + + FragmentActivity activity = getActivity(); + if (activity == null) { + return; + } + try { + Uri outputUri = data.getData(); + FileHelper.copyUriData(activity, mCachedExportUri, outputUri); + Notify.create(activity, "Backup saved", Style.OK).show(); + } catch (IOException e) { + Notify.create(activity, "Error saving backup!", Style.ERROR).show(); + } } @Nullable -- cgit v1.2.3