diff options
| author | Adithya Abraham Philip <adithyaphilip@gmail.com> | 2015-07-15 20:16:07 +0530 | 
|---|---|---|
| committer | Adithya Abraham Philip <adithyaphilip@gmail.com> | 2015-07-15 20:16:07 +0530 | 
| commit | fe0b083bc5fdcd3cd4543945ef22bcec7a2876f4 (patch) | |
| tree | 46b3a2b5b7e4d73fdcd9228f6118d244b00f3d8b /OpenKeychain/src/main | |
| parent | 771d65476647c4df0d88e95f8df80b201eeb9bf3 (diff) | |
| download | open-keychain-fe0b083bc5fdcd3cd4543945ef22bcec7a2876f4.tar.gz open-keychain-fe0b083bc5fdcd3cd4543945ef22bcec7a2876f4.tar.bz2 open-keychain-fe0b083bc5fdcd3cd4543945ef22bcec7a2876f4.zip  | |
fixed multi-deletion bug, moved logic into DeleteKeyDialogActivity
Diffstat (limited to 'OpenKeychain/src/main')
4 files changed, 22 insertions, 21 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/DeleteResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/DeleteResult.java index c7c48ed56..1a8f10d4f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/DeleteResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/DeleteResult.java @@ -125,7 +125,10 @@ public class DeleteResult extends InputPendingResult {          } else {              duration = 0;              style = Style.ERROR; -            if (mFail == 0) { +            if (mLog.getLast().mType == LogType.MSG_DEL_ERROR_MULTI_SECRET) { +                str = activity.getString(R.string.secret_cannot_multiple); +            } +            else if (mFail == 0) {                  str = activity.getString(R.string.delete_nothing);              } else {                  str = activity.getResources().getQuantityString(R.plurals.delete_fail, mFail); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java index d4b3c433f..04013e9ed 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java @@ -754,7 +754,7 @@ public abstract class OperationResult implements Parcelable {          MSG_GET_QUERY_FAILED(LogLevel.ERROR, R.string.msg_download_query_failed),          MSG_DEL_ERROR_EMPTY (LogLevel.ERROR, R.string.msg_del_error_empty), -        MSG_DEL_ERROR_MULTI_SECRET (LogLevel.DEBUG, R.string.msg_del_error_multi_secret), +        MSG_DEL_ERROR_MULTI_SECRET (LogLevel.ERROR, R.string.msg_del_error_multi_secret),          MSG_DEL (LogLevel.START, R.plurals.msg_del),          MSG_DEL_KEY (LogLevel.DEBUG, R.string.msg_del_key),          MSG_DEL_KEY_FAIL (LogLevel.WARN, R.string.msg_del_key_fail), diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DeleteKeyDialogActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DeleteKeyDialogActivity.java index 1b4083a94..4c1dbd1ee 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DeleteKeyDialogActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DeleteKeyDialogActivity.java @@ -48,6 +48,7 @@ import org.sufficientlysecure.keychain.service.RevokeKeyringParcel;  import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;  import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper;  import org.sufficientlysecure.keychain.ui.dialog.CustomAlertDialogBuilder; +import org.sufficientlysecure.keychain.ui.util.Notify;  import org.sufficientlysecure.keychain.util.Log;  import java.util.Date; @@ -62,6 +63,7 @@ public class DeleteKeyDialogActivity extends FragmentActivity {      private CryptoOperationHelper<RevokeKeyringParcel, RevokeResult> mRevokeOpHelper;      private long[] mMasterKeyIds; +    private boolean mHasSecret;      @Override      protected void onCreate(Bundle savedInstanceState) { @@ -74,14 +76,17 @@ public class DeleteKeyDialogActivity extends FragmentActivity {                  getRevocationCallback(), R.string.progress_revoking_uploading);          mMasterKeyIds = getIntent().getLongArrayExtra(EXTRA_DELETE_MASTER_KEY_IDS); -        boolean hasSecret = getIntent().getBooleanExtra(EXTRA_HAS_SECRET, false); - -        if (mMasterKeyIds.length > 1 && hasSecret) { -            throw new AssertionError("Secret keys can be deleted only one at a time!" + -                    " Should be checked before reaching DeleteKeyDialogActivity."); +        mHasSecret = getIntent().getBooleanExtra(EXTRA_HAS_SECRET, false); + +        if (mMasterKeyIds.length > 1 && mHasSecret) { +            // secret keys can only be deleted individually +            OperationResult.OperationLog log = new OperationResult.OperationLog(); +            log.add(OperationResult.LogType.MSG_DEL_ERROR_MULTI_SECRET, 0); +            returnResult(new DeleteResult(OperationResult.RESULT_ERROR, log, 0, +                    mMasterKeyIds.length));          } -        if (mMasterKeyIds.length == 1 && hasSecret) { +        if (mMasterKeyIds.length == 1 && mHasSecret) {              // if mMasterKeyIds.length == 0 we let the DeleteOperation respond              try {                  HashMap<String, Object> data = new ProviderHelper(this).getUnifiedData( @@ -122,7 +127,7 @@ public class DeleteKeyDialogActivity extends FragmentActivity {      private void showNormalDeleteDialog() {          DeleteKeyDialogFragment deleteKeyDialogFragment -                = DeleteKeyDialogFragment.newInstance(mMasterKeyIds); +                = DeleteKeyDialogFragment.newInstance(mMasterKeyIds, mHasSecret);          deleteKeyDialogFragment.show(getSupportFragmentManager(), "deleteKeyDialog"); @@ -179,7 +184,7 @@ public class DeleteKeyDialogActivity extends FragmentActivity {          return new CryptoOperationHelper.Callback<DeleteKeyringParcel, DeleteResult>() {              @Override              public DeleteKeyringParcel createOperationInput() { -                return new DeleteKeyringParcel(mMasterKeyIds, true); +                return new DeleteKeyringParcel(mMasterKeyIds, mHasSecret);              }              @Override @@ -221,6 +226,7 @@ public class DeleteKeyDialogActivity extends FragmentActivity {      public static class DeleteKeyDialogFragment extends DialogFragment {          private static final String ARG_DELETE_MASTER_KEY_IDS = "delete_master_key_ids"; +        private static final String ARG_HAS_SECRET = "has_secret";          private TextView mMainMessage;          private View mInflateView; @@ -228,11 +234,12 @@ public class DeleteKeyDialogActivity extends FragmentActivity {          /**           * Creates new instance of this delete file dialog fragment           */ -        public static DeleteKeyDialogFragment newInstance(long[] masterKeyIds) { +        public static DeleteKeyDialogFragment newInstance(long[] masterKeyIds, boolean hasSecret) {              DeleteKeyDialogFragment frag = new DeleteKeyDialogFragment();              Bundle args = new Bundle();              args.putLongArray(ARG_DELETE_MASTER_KEY_IDS, masterKeyIds); +            args.putBoolean(ARG_HAS_SECRET, hasSecret);              frag.setArguments(args); @@ -245,6 +252,7 @@ public class DeleteKeyDialogActivity extends FragmentActivity {              final FragmentActivity activity = getActivity();              final long[] masterKeyIds = getArguments().getLongArray(ARG_DELETE_MASTER_KEY_IDS); +            final boolean hasSecret = getArguments().getBoolean(ARG_HAS_SECRET);              ContextThemeWrapper theme = new ContextThemeWrapper(activity,                      R.style.Theme_AppCompat_Light_Dialog); @@ -258,8 +266,6 @@ public class DeleteKeyDialogActivity extends FragmentActivity {              mMainMessage = (TextView) mInflateView.findViewById(R.id.mainMessage); -            final boolean hasSecret; -              // If only a single key has been selected              if (masterKeyIds.length == 1) {                  long masterKeyId = masterKeyIds[0]; @@ -281,7 +287,6 @@ public class DeleteKeyDialogActivity extends FragmentActivity {                      } else {                          name = getString(R.string.user_id_no_name);                      } -                    hasSecret = ((Long) data.get(KeychainContract.KeyRings.HAS_ANY_SECRET)) == 1;                      if (hasSecret) {                          // show title only for secret key deletions, diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java index a42dfef23..95e047b0f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -352,13 +352,6 @@ public class KeyListFragment extends LoaderFragment       * @param hasSecret must contain whether the list of masterKeyIds contains a secret key or not       */      public void showDeleteKeyDialog(long[] masterKeyIds, boolean hasSecret) { -        // Can only work on singular secret keys -        if (hasSecret && masterKeyIds.length > 1) { -            Notify.create(getActivity(), R.string.secret_cannot_multiple, -                    Notify.Style.ERROR).show(); -            return; -        } -          Intent intent = new Intent(getActivity(), DeleteKeyDialogActivity.class);          intent.putExtra(DeleteKeyDialogActivity.EXTRA_DELETE_MASTER_KEY_IDS, masterKeyIds);          intent.putExtra(DeleteKeyDialogActivity.EXTRA_HAS_SECRET, hasSecret);  | 
