From d004bf236bd51817adf5963a3f970acd4e5a243e Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Sat, 4 Oct 2014 16:01:24 +0200 Subject: [PATCH] improve CertifyResult, add custom notify --- .../keychain/pgp/PgpCertifyOperation.java | 8 +- .../service/results/CertifyResult.java | 94 +++++++++++++++++++ .../service/results/ImportKeyResult.java | 4 +- .../service/results/OperationResult.java | 1 + .../src/main/res/values-cs/strings.xml | 2 +- .../src/main/res/values-de/strings.xml | 4 +- .../src/main/res/values-es/strings.xml | 4 +- .../src/main/res/values-fr/strings.xml | 4 +- .../src/main/res/values-it/strings.xml | 2 +- .../src/main/res/values-ja/strings.xml | 4 +- .../src/main/res/values-ru/strings.xml | 2 +- .../src/main/res/values-sl/strings.xml | 4 +- .../src/main/res/values-sr/strings.xml | 4 +- .../src/main/res/values-uk/strings.xml | 2 +- OpenKeychain/src/main/res/values/strings.xml | 27 +++++- 15 files changed, 140 insertions(+), 26 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpCertifyOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpCertifyOperation.java index ffa2181e1..3a29faec3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpCertifyOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpCertifyOperation.java @@ -1,7 +1,5 @@ package org.sufficientlysecure.keychain.pgp; -import android.content.Context; - import org.spongycastle.openpgp.PGPException; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.pgp.exception.PgpGeneralException; @@ -10,7 +8,6 @@ import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException import org.sufficientlysecure.keychain.service.CertifyActionsParcel; import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction; import org.sufficientlysecure.keychain.service.results.CertifyResult; -import org.sufficientlysecure.keychain.service.results.EditKeyResult; import org.sufficientlysecure.keychain.service.results.OperationResult.LogType; import org.sufficientlysecure.keychain.service.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.service.results.SaveKeyringResult; @@ -141,6 +138,11 @@ public class PgpCertifyOperation { } + if (certifyOk == 0) { + log.add(LogType.MSG_CRT_ERROR_NOTHING, 0); + return new CertifyResult(CertifyResult.RESULT_ERROR, log, certifyOk, certifyError); + } + log.add(LogType.MSG_CRT_SUCCESS, 0); return new CertifyResult(CertifyResult.RESULT_OK, log, certifyOk, certifyError); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/CertifyResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/CertifyResult.java index cf54238ec..49bc613bd 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/CertifyResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/CertifyResult.java @@ -18,7 +18,21 @@ package org.sufficientlysecure.keychain.service.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 CertifyResult extends OperationResult { @@ -37,11 +51,15 @@ public class CertifyResult extends OperationResult { /** Construct from a parcel - trivial because we have no extra data. */ public CertifyResult(Parcel source) { super(source); + mCertifyOk = source.readInt(); + mCertifyError = source.readInt(); } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); + dest.writeInt(mCertifyOk); + dest.writeInt(mCertifyError); } public static Creator CREATOR = new Creator() { @@ -54,4 +72,80 @@ public class CertifyResult 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 withWarnings; + + duration = Duration.EXTRA_LONG; + color = Style.GREEN; + withWarnings = ""; + + // Any warnings? + if ((resultType & ImportKeyResult.RESULT_WARNINGS) > 0) { + duration = 0; + color = Style.ORANGE; + withWarnings += activity.getString(R.string.with_warnings); + } + if ((resultType & ImportKeyResult.RESULT_CANCELLED) > 0) { + duration = 0; + color = Style.ORANGE; + withWarnings += activity.getString(R.string.with_cancelled); + } + + // New and updated keys + str = activity.getResources().getQuantityString( + R.plurals.certify_keys_ok, mCertifyOk, mCertifyOk, withWarnings); + if (mCertifyError > 0) { + // definitely switch to warning-style message in this case! + duration = 0; + color = Style.RED; + str += " " + activity.getResources().getQuantityString( + R.plurals.certify_keys_with_errors, mCertifyError, mCertifyError); + } + + } else { + duration = 0; + color = Style.RED; + str = activity.getResources().getQuantityString(R.plurals.certify_error, + mCertifyError, mCertifyError); + } + + 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, CertifyResult.this); + activity.startActivity(intent); + } + } + )); + } + + return toast; + + } + } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/ImportKeyResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/ImportKeyResult.java index b5174bc63..fa0dc6af3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/ImportKeyResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/ImportKeyResult.java @@ -124,12 +124,12 @@ public class ImportKeyResult extends OperationResult { if ((resultType & ImportKeyResult.RESULT_WARNINGS) > 0) { duration = 0; color = Style.ORANGE; - withWarnings += activity.getString(R.string.import_with_warnings); + withWarnings += activity.getString(R.string.with_warnings); } if ((resultType & ImportKeyResult.RESULT_CANCELLED) > 0) { duration = 0; color = Style.ORANGE; - withWarnings += activity.getString(R.string.import_with_cancelled); + withWarnings += activity.getString(R.string.with_cancelled); } // New and updated keys diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/OperationResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/OperationResult.java index 90e1d0037..5613aa794 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/OperationResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/results/OperationResult.java @@ -521,6 +521,7 @@ public abstract class OperationResult implements Parcelable { MSG_CRT_CERTIFY_ALL (LogLevel.DEBUG, R.string.msg_crt_certify_all), MSG_CRT_CERTIFY_SOME (LogLevel.DEBUG, R.plurals.msg_crt_certify_some), MSG_CRT_ERROR_MASTER_NOT_FOUND (LogLevel.ERROR, R.string.msg_crt_error_master_not_found), + MSG_CRT_ERROR_NOTHING (LogLevel.ERROR, R.string.msg_crt_error_nothing), MSG_CRT_ERROR_UNLOCK (LogLevel.ERROR, R.string.msg_crt_error_unlock), MSG_CRT_FP_MISMATCH (LogLevel.WARN, R.string.msg_crt_fp_mismatch), MSG_CRT (LogLevel.START, R.string.msg_crt), diff --git a/OpenKeychain/src/main/res/values-cs/strings.xml b/OpenKeychain/src/main/res/values-cs/strings.xml index 9f676c6f9..a7090aaf0 100644 --- a/OpenKeychain/src/main/res/values-cs/strings.xml +++ b/OpenKeychain/src/main/res/values-cs/strings.xml @@ -329,7 +329,7 @@ Zobrazit log Nic k importu Import zrušen. - , s varováními + , s varováními Import selhal! Import %d klíčů selhal! diff --git a/OpenKeychain/src/main/res/values-de/strings.xml b/OpenKeychain/src/main/res/values-de/strings.xml index 1ff3fa024..d537bd6c3 100644 --- a/OpenKeychain/src/main/res/values-de/strings.xml +++ b/OpenKeychain/src/main/res/values-de/strings.xml @@ -369,8 +369,8 @@ Log ansehen Nichts zu importieren. Import abgebrochen. - , mit Warnungen - . bis abgebrochen wurde + , mit Warnungen + . bis abgebrochen wurde Importieren fehlgeschlagen! Importieren von %d Schlüsseln fehlgeschlagen! diff --git a/OpenKeychain/src/main/res/values-es/strings.xml b/OpenKeychain/src/main/res/values-es/strings.xml index 968ece35a..d1836233c 100644 --- a/OpenKeychain/src/main/res/values-es/strings.xml +++ b/OpenKeychain/src/main/res/values-es/strings.xml @@ -357,8 +357,8 @@ Ver registro (log) No hay nada que importar. Importación cancelada. - , con advertencias - , hasta que este cancelada + , con advertencias + , hasta que este cancelada Descifrar archivo con OpenKeychain Importar clave con OpenKeychain diff --git a/OpenKeychain/src/main/res/values-fr/strings.xml b/OpenKeychain/src/main/res/values-fr/strings.xml index 91940c7c3..ef1659e7d 100644 --- a/OpenKeychain/src/main/res/values-fr/strings.xml +++ b/OpenKeychain/src/main/res/values-fr/strings.xml @@ -357,8 +357,8 @@ Consulter le journal Rien à importer. Importation annulée. - , avec des avertissements - , jusqu\'à l\'annulation + , avec des avertissements + , jusqu\'à l\'annulation Déchiffrer le fichier avec OpenKeychain Importer la clef avec OpenKeychain diff --git a/OpenKeychain/src/main/res/values-it/strings.xml b/OpenKeychain/src/main/res/values-it/strings.xml index 5c652fd73..a26dee6b3 100644 --- a/OpenKeychain/src/main/res/values-it/strings.xml +++ b/OpenKeychain/src/main/res/values-it/strings.xml @@ -362,7 +362,7 @@ Non potrai annullare! Mostra registro Niente da importare Importazione cancellata. - , con avvisi + , con avvisi Decodifica File con OpenKeychain Importa Chiave con OpenKeychain diff --git a/OpenKeychain/src/main/res/values-ja/strings.xml b/OpenKeychain/src/main/res/values-ja/strings.xml index d1a90ff8c..661317852 100644 --- a/OpenKeychain/src/main/res/values-ja/strings.xml +++ b/OpenKeychain/src/main/res/values-ja/strings.xml @@ -371,8 +371,8 @@ ログを見る インポートするものがありません。 インポートをキャンセルしました。 - 、とワーニング - 、キャンセルされるまで + 、とワーニング + 、キャンセルされるまで %d 個の鍵のインポート失敗! diff --git a/OpenKeychain/src/main/res/values-ru/strings.xml b/OpenKeychain/src/main/res/values-ru/strings.xml index 5ce53a9f1..73ef1ed19 100644 --- a/OpenKeychain/src/main/res/values-ru/strings.xml +++ b/OpenKeychain/src/main/res/values-ru/strings.xml @@ -311,7 +311,7 @@ Смотреть журнал Нет данных для импорта. - , с предупреждениями + , с предупреждениями OpenKeychain: Расшифровать файл OpenKeychain: Импортировать ключ diff --git a/OpenKeychain/src/main/res/values-sl/strings.xml b/OpenKeychain/src/main/res/values-sl/strings.xml index 491bf5cf5..0f54c95ef 100644 --- a/OpenKeychain/src/main/res/values-sl/strings.xml +++ b/OpenKeychain/src/main/res/values-sl/strings.xml @@ -319,8 +319,8 @@ Poglej dnevnik Nič za uvoziti. Uvoz preklican. - , z opozorilom - do preklica + , z opozorilom + do preklica Dešifriraj datoteko z OpenKeychain Uvozi ključ z OpenKeychain diff --git a/OpenKeychain/src/main/res/values-sr/strings.xml b/OpenKeychain/src/main/res/values-sr/strings.xml index c1121ef4d..c765d27af 100644 --- a/OpenKeychain/src/main/res/values-sr/strings.xml +++ b/OpenKeychain/src/main/res/values-sr/strings.xml @@ -330,8 +330,8 @@ Прикажи дневник Нема ништа за увоз. Увоз је отказан. - , са упозорењима - , док није отказано + , са упозорењима + , док није отказано Дешифруј фајл помоћу Отвореног кључарника Увези кључ у Отворени кључарник diff --git a/OpenKeychain/src/main/res/values-uk/strings.xml b/OpenKeychain/src/main/res/values-uk/strings.xml index f38a542be..d3b3f1753 100644 --- a/OpenKeychain/src/main/res/values-uk/strings.xml +++ b/OpenKeychain/src/main/res/values-uk/strings.xml @@ -327,7 +327,7 @@ Переглянути журнал Нема що імпортувати. - , із застереженнями + , із застереженнями Розшифрувати файл з OpenKeychain Імпортувати ключ з OpenKeychain diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 28933ac89..4ce73b5cb 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -387,6 +387,11 @@ "Fingerprint is too short (< 16 characters)" "Scan QR Code…" + + "View Log" + ", with warnings" + ", until cancelled" + "Successfully imported key" @@ -408,15 +413,26 @@ "Import failed for one key!" "Import failed for %d keys!" - "View Log" - "Nothing to import." - "Import cancelled." - ", with warnings" - ", until cancelled" "Import failed!" "Import of %d keys failed!" + "Nothing to import." + "Import cancelled." + + + + "Successfully certified key%2$s." + "Successfully certified %1$d keys%2$s." + + + "Certification failed!" + "Certification failed for %d keys!" + + + "Certification failed!" + "Certification of %d keys failed!" + "Decrypt File with OpenKeychain" @@ -882,6 +898,7 @@ "Certifying %1$d user ids for key %2$s" "Master key not found!" + "No keys certified!" "Error unlocking master key!" "Fingerprint mismatch, not certifying!" "Certifying keyrings"