From 388dfd6fb05ba7211939f6fc837ef665f41ef9aa Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Thu, 5 Jun 2014 21:40:43 +0200 Subject: [PATCH] Bug fixes: - ShowUserNotifications now correctly defaults to true in CreateEntryThenCloseTask - fixed message of donation dialog - fixed problem with exception in TrayTotpHandler when displaying toast --- .../Totp/ITotpPluginAdapter.cs | 2 +- .../Totp/KeeOtpPluginAdapter.cs | 2 +- src/keepass2android/Totp/Kp2aTotp.cs | 2 +- .../Totp/TrayTotpPluginAdapter.cs | 25 +++++++++++++++---- .../Totp/UpdateTotpTimerTask.cs | 3 ++- src/keepass2android/Utils/Util.cs | 2 +- src/keepass2android/app/AppTask.cs | 5 ++++ 7 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/keepass2android/Totp/ITotpPluginAdapter.cs b/src/keepass2android/Totp/ITotpPluginAdapter.cs index 29f1bf3d..c3fc36e9 100644 --- a/src/keepass2android/Totp/ITotpPluginAdapter.cs +++ b/src/keepass2android/Totp/ITotpPluginAdapter.cs @@ -7,6 +7,6 @@ namespace PluginTOTP interface ITotpPluginAdapter { - TotpData GetTotpData(IDictionary entryFields, Context ctx); + TotpData GetTotpData(IDictionary entryFields, Context ctx, bool muteWarnings); } } \ No newline at end of file diff --git a/src/keepass2android/Totp/KeeOtpPluginAdapter.cs b/src/keepass2android/Totp/KeeOtpPluginAdapter.cs index 859fde11..d6c19ae2 100644 --- a/src/keepass2android/Totp/KeeOtpPluginAdapter.cs +++ b/src/keepass2android/Totp/KeeOtpPluginAdapter.cs @@ -19,7 +19,7 @@ namespace PluginTOTP const string SizeParameter = "size"; - public TotpData GetTotpData(IDictionary entryFields, Context ctx) + public TotpData GetTotpData(IDictionary entryFields, Context ctx, bool muteWarnings) { return new KeeOtpHandler(entryFields, ctx).GetData(); } diff --git a/src/keepass2android/Totp/Kp2aTotp.cs b/src/keepass2android/Totp/Kp2aTotp.cs index d27bfeec..04f4af99 100644 --- a/src/keepass2android/Totp/Kp2aTotp.cs +++ b/src/keepass2android/Totp/Kp2aTotp.cs @@ -17,7 +17,7 @@ namespace keepass2android { foreach (ITotpPluginAdapter adapter in _pluginAdapters) { - TotpData totpData = adapter.GetTotpData(App.Kp2a.GetDb().LastOpenedEntry.OutputStrings.ToDictionary(pair => StrUtil.SafeXmlString(pair.Key), pair => pair.Value.ReadString()), Application.Context); + TotpData totpData = adapter.GetTotpData(App.Kp2a.GetDb().LastOpenedEntry.OutputStrings.ToDictionary(pair => StrUtil.SafeXmlString(pair.Key), pair => pair.Value.ReadString()), Application.Context, false); if (totpData.IsTotpEnry) { new UpdateTotpTimerTask(Application.Context, adapter).Run(); diff --git a/src/keepass2android/Totp/TrayTotpPluginAdapter.cs b/src/keepass2android/Totp/TrayTotpPluginAdapter.cs index 9575c793..c73435e0 100644 --- a/src/keepass2android/Totp/TrayTotpPluginAdapter.cs +++ b/src/keepass2android/Totp/TrayTotpPluginAdapter.cs @@ -1,30 +1,34 @@ using System; using System.Collections.Generic; using Android.Content; +using Android.OS; using Android.Preferences; using Android.Widget; -using KeePassLib.Collections; using keepass2android; namespace PluginTOTP { class TrayTotpPluginAdapter : ITotpPluginAdapter { - public TotpData GetTotpData(IDictionary entryFields, Context ctx) + public TotpData GetTotpData(IDictionary entryFields, Context ctx, bool muteWarnings) { - return new TrayTotpHandler(ctx).GetTotpData(entryFields); + return new TrayTotpHandler(ctx, new Handler(Looper.MainLooper), muteWarnings).GetTotpData(entryFields); } private class TrayTotpHandler { private readonly Context _ctx; + private readonly Handler _uiThreadHandler; + private readonly bool _muteWarnings; private string SeedFieldName { get { return PreferenceManager.GetDefaultSharedPreferences(_ctx).GetString(_ctx.GetString(Resource.String.TrayTotp_SeedField_key), "TOTP Seed"); } } private string SettingsFieldName { get { return PreferenceManager.GetDefaultSharedPreferences(_ctx).GetString(_ctx.GetString(Resource.String.TrayTotp_SettingsField_key), "TOTP Settings"); } } - public TrayTotpHandler(Context ctx) + public TrayTotpHandler(Context ctx, Handler uiThreadHandler, bool muteWarnings) { _ctx = ctx; + _uiThreadHandler = uiThreadHandler; + _muteWarnings = muteWarnings; } /// @@ -156,7 +160,18 @@ namespace PluginTOTP private void ShowWarning(string warning) { - Toast.MakeText(_ctx, warning, ToastLength.Short).Show(); + if (_muteWarnings) + return; + try + { + _uiThreadHandler.Post(() => Toast.MakeText(_ctx, warning, ToastLength.Short).Show()); + } + catch (Exception e) + { + Kp2aLog.Log(e.ToString()); + //ignore, it's only a warning + } + } private bool SeedValidate(IDictionary entryFields, out string invalidCharacters) diff --git a/src/keepass2android/Totp/UpdateTotpTimerTask.cs b/src/keepass2android/Totp/UpdateTotpTimerTask.cs index 79566c72..08b970fb 100644 --- a/src/keepass2android/Totp/UpdateTotpTimerTask.cs +++ b/src/keepass2android/Totp/UpdateTotpTimerTask.cs @@ -31,7 +31,8 @@ namespace PluginTOTP return; //DB was locked Dictionary entryFields = App.Kp2a.GetDb().LastOpenedEntry.OutputStrings.ToDictionary(pair => StrUtil.SafeXmlString(pair.Key), pair => pair.Value.ReadString()); - TotpData totpData = _adapter.GetTotpData(entryFields, _context); + //mute warnings to avoid repeated display of the toasts + TotpData totpData = _adapter.GetTotpData(entryFields, _context, true /*mute warnings*/); if (totpData.IsTotpEnry) { //generate a new totp diff --git a/src/keepass2android/Utils/Util.cs b/src/keepass2android/Utils/Util.cs index 85391e55..dd9d828c 100644 --- a/src/keepass2android/Utils/Util.cs +++ b/src/keepass2android/Utils/Util.cs @@ -357,7 +357,7 @@ namespace keepass2android if ((bool) args.NewValue) { new AlertDialog.Builder(ctx) - .SetTitle(AppNames.AppName) + .SetTitle(ctx.GetString(AppNames.AppNameResource)) .SetCancelable(false) .SetPositiveButton(Android.Resource.String.Ok, delegate(object o, DialogClickEventArgs eventArgs) { diff --git a/src/keepass2android/app/AppTask.cs b/src/keepass2android/app/AppTask.cs index 50a6d63a..4b59ccdd 100644 --- a/src/keepass2android/app/AppTask.cs +++ b/src/keepass2android/app/AppTask.cs @@ -586,6 +586,11 @@ namespace keepass2android /// public class CreateEntryThenCloseTask: AppTask { + public CreateEntryThenCloseTask() + { + ShowUserNotifications = true; + } + /// /// extra key if only a URL is passed. optional. ///