diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2014-10-11 19:55:19 +0200 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2014-10-11 19:55:19 +0200 |
commit | 5453a3e5afb40fda35a768dda9a13d33f9035486 (patch) | |
tree | ba0ad51ed4330b4b74c4ec373553a9fe1cfbf0bc | |
parent | 4bd9c6ff96a986749624b5b1ce64282c1afec3f1 (diff) | |
download | open-keychain-5453a3e5afb40fda35a768dda9a13d33f9035486.tar.gz open-keychain-5453a3e5afb40fda35a768dda9a13d33f9035486.tar.bz2 open-keychain-5453a3e5afb40fda35a768dda9a13d33f9035486.zip |
DeleteResult: add custom createNotify
4 files changed, 137 insertions, 11 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 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 @@ <string name="import_error_nothing">"Nothing to import."</string> <string name="import_error_nothing_cancelled">"Import cancelled."</string> + <!-- Delete result toast --> + <plurals name="delete_ok_but_fail_1"> + <item quantity="one">"Successfully deleted one key"</item> + <item quantity="other">"Successfully deleted %1$d keys"</item> + </plurals> + <plurals name="delete_ok_but_fail_2"> + <item quantity="one">", but failed deleting one key%2$s."</item> + <item quantity="other">", but failed deleting %1$d keys%2$s."</item> + </plurals> + <plurals name="delete_ok"> + <item quantity="one">"Successfully deleted key%2$s."</item> + <item quantity="other">"Successfully deleted %1$d keys%2$s."</item> + </plurals> + <plurals name="delete_fail"> + <item quantity="one">"Error deleting one key%2$s."</item> + <item quantity="other">"Error deleting %1$d keys."</item> + </plurals> + <string name="delete_nothing">"Nothing to delete."</string> + <string name="delete_cancelled">"Delete operation cancelled."</string> + <!-- Certify result toast --> <plurals name="certify_keys_ok"> <item quantity="one">"Successfully certified key%2$s."</item> |