fixed multi-deletion bug, moved logic into DeleteKeyDialogActivity
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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);
|
||||
mHasSecret = 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.");
|
||||
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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user