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 ++++++++++++++++++---- .../keychain/ui/util/Notify.java | 7 +- 2 files changed, 75 insertions(+), 16 deletions(-) (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui') 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 diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Notify.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Notify.java index 7dfd56430..9cf5907bc 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Notify.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Notify.java @@ -37,7 +37,7 @@ import org.sufficientlysecure.keychain.util.FabContainer; */ public class Notify { - public static enum Style { + public enum Style { OK (R.color.android_green_light), WARN(R.color.android_orange_light), ERROR(R.color.android_red_light); public final int mLineColor; @@ -142,6 +142,11 @@ public class Notify { return create(activity, text, LENGTH_LONG, style); } + public static Showable create(Activity activity, String text, Style style, + ActionListener actionListener, int actionResId) { + return create(activity, text, LENGTH_LONG, style, actionListener, actionResId); + } + public static Showable create(Activity activity, int textResId, int duration, Style style, ActionListener actionListener, int actionResId) { return create(activity, activity.getString(textResId), duration, style, actionListener, actionResId); -- cgit v1.2.3