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 1dce8f89e..1ca5ad20a 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 @@ -18,7 +18,21 @@ package org.sufficientlysecure.keychain.operations.results; +import android.app.Activity; +import android.content.Intent; import android.os.Parcel; +import android.os.Parcelable; +import android.view.View; + +import com.github.johnpersano.supertoasts.SuperCardToast; +import com.github.johnpersano.supertoasts.SuperToast; +import com.github.johnpersano.supertoasts.SuperToast.Duration; +import com.github.johnpersano.supertoasts.util.OnClickWrapper; +import com.github.johnpersano.supertoasts.util.Style; + +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.ui.LogDisplayActivity; +import org.sufficientlysecure.keychain.ui.LogDisplayFragment; public class DeleteResult extends OperationResult { @@ -54,4 +68,86 @@ public class DeleteResult extends OperationResult { } }; + public SuperCardToast createNotify(final Activity activity) { + + int resultType = getResult(); + + String str; + int duration, color; + + // Not an overall failure + if ((resultType & OperationResult.RESULT_ERROR) == 0) { + String untilCancelled; + + duration = Duration.EXTRA_LONG; + color = Style.GREEN; + untilCancelled = ""; + + // Any warnings? + if ((resultType & ImportKeyResult.RESULT_CANCELLED) > 0) { + duration = 0; + color = Style.ORANGE; + untilCancelled += activity.getString(R.string.with_cancelled); + } + + // New and updated keys + if (mOk > 0 && mFail > 0) { + color = Style.ORANGE; + duration = 0; + str = activity.getResources().getQuantityString( + R.plurals.delete_ok_but_fail_1, mOk, mOk); + str += " " + activity.getResources().getQuantityString( + R.plurals.delete_ok_but_fail_2, mFail, mFail, untilCancelled); + } else if (mOk > 0) { + str = activity.getResources().getQuantityString( + R.plurals.delete_ok, mOk, mOk, untilCancelled); + } else if ((resultType & ImportKeyResult.RESULT_CANCELLED) > 0) { + str = activity.getString(R.string.delete_cancelled); + } else { + duration = 0; + color = Style.RED; + str = "internal error"; + } + + } else { + duration = 0; + color = Style.RED; + if (mFail == 0) { + str = activity.getString(R.string.delete_nothing); + } else { + str = activity.getResources().getQuantityString(R.plurals.delete_fail, mFail); + } + } + + boolean button = getLog() != null && !getLog().isEmpty(); + SuperCardToast toast = new SuperCardToast(activity, + button ? SuperToast.Type.BUTTON : SuperToast.Type.STANDARD, + Style.getStyle(color, SuperToast.Animations.POPUP)); + toast.setText(str); + toast.setDuration(duration); + toast.setIndeterminate(duration == 0); + toast.setSwipeToDismiss(true); + // If we have a log and it's non-empty, show a View Log button + if (button) { + toast.setButtonIcon(R.drawable.ic_action_view_as_list, + activity.getResources().getString(R.string.view_log)); + toast.setButtonTextColor(activity.getResources().getColor(R.color.black)); + toast.setTextColor(activity.getResources().getColor(R.color.black)); + toast.setOnClickWrapper(new OnClickWrapper("supercardtoast", + new SuperToast.OnClickListener() { + @Override + public void onClick(View view, Parcelable token) { + Intent intent = new Intent( + activity, LogDisplayActivity.class); + intent.putExtra(LogDisplayFragment.EXTRA_RESULT, DeleteResult.this); + activity.startActivity(intent); + } + } + )); + } + + return toast; + + } + } 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 b0872a71a..0a9af8673 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -61,6 +61,7 @@ import android.widget.TextView; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing; +import org.sufficientlysecure.keychain.operations.results.DeleteResult; import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.service.KeychainIntentService; @@ -504,7 +505,14 @@ public class KeyListFragment extends LoaderFragment Handler returnHandler = new Handler() { @Override public void handleMessage(Message message) { - if (message.what == DeleteKeyDialogFragment.MESSAGE_OKAY) { + if (message.arg1 == DeleteKeyDialogFragment.MESSAGE_OKAY) { + Bundle data = message.getData(); + if (data != null) { + DeleteResult result = data.getParcelable(DeleteResult.EXTRA_RESULT); + if (result != null) { + result.createNotify(getActivity()).show(); + } + } mode.finish(); } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java index d0c9cea5b..5b96ea231 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java @@ -130,18 +130,20 @@ public class DeleteKeyDialogFragment extends DialogFragment { // Message is received after importing is done in KeychainIntentService KeychainIntentServiceHandler saveHandler = new KeychainIntentServiceHandler( - getActivity(), - getString(R.string.progress_deleting), - ProgressDialog.STYLE_HORIZONTAL) { + getActivity(), getString(R.string.progress_deleting), + ProgressDialog.STYLE_HORIZONTAL, true) { + @Override public void handleMessage(Message message) { - // handle messages by standard KeychainIntentServiceHandler first super.handleMessage(message); - try { - Message msg = Message.obtain(); - msg.copyFrom(message); - messenger.send(msg); - } catch (RemoteException e) { - Log.e(Constants.TAG, "messenger error", e); + // handle messages by standard KeychainIntentServiceHandler first + if (message.arg1 == MESSAGE_OKAY) { + try { + Message msg = Message.obtain(); + msg.copyFrom(message); + messenger.send(msg); + } catch (RemoteException e) { + Log.e(Constants.TAG, "messenger error", e); + } } } }; diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index fcc7436d1..4a973f9e4 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -426,6 +426,26 @@ "Nothing to import." "Import cancelled." + + + "Successfully deleted one key" + "Successfully deleted %1$d keys" + + + ", but failed deleting one key%2$s." + ", but failed deleting %1$d keys%2$s." + + + "Successfully deleted key%2$s." + "Successfully deleted %1$d keys%2$s." + + + "Error deleting one key%2$s." + "Error deleting %1$d keys." + + "Nothing to delete." + "Delete operation cancelled." + "Successfully certified key%2$s."