From 94b37f6414a48c77cf46387c1f51f5f9c889a9aa Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Fri, 9 Feb 2018 10:51:08 +0100 Subject: [PATCH] fix crashes on Huawei devices when trying to enable autofill --- src/keepass2android/ChangeLog.cs | 3 +- src/keepass2android/GroupBaseActivity.cs | 18 ++++++++- .../Properties/AndroidManifest_net.xml | 4 +- .../Resources/values/strings.xml | 8 ++++ .../settings/DatabaseSettingsActivity.cs | 37 +++++++++++++++++-- 5 files changed, 63 insertions(+), 7 deletions(-) diff --git a/src/keepass2android/ChangeLog.cs b/src/keepass2android/ChangeLog.cs index 635749b6..197cbfa8 100644 --- a/src/keepass2android/ChangeLog.cs +++ b/src/keepass2android/ChangeLog.cs @@ -26,7 +26,8 @@ namespace keepass2android AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(ctx, Android.Resource.Style.ThemeHoloLightDialog)); builder.SetTitle(ctx.GetString(Resource.String.ChangeLog_title)); List changeLog = new List{ - ctx.GetString(Resource.String.ChangeLog_1_04), + ctx.GetString(Resource.String.ChangeLog_1_04b), + ctx.GetString(Resource.String.ChangeLog_1_04), ctx.GetString(Resource.String.ChangeLog_1_03), ctx.GetString(Resource.String.ChangeLog_1_02), #if !NoNet diff --git a/src/keepass2android/GroupBaseActivity.cs b/src/keepass2android/GroupBaseActivity.cs index f0c58970..a187624e 100644 --- a/src/keepass2android/GroupBaseActivity.cs +++ b/src/keepass2android/GroupBaseActivity.cs @@ -297,7 +297,23 @@ namespace keepass2android { var intent = new Intent(Settings.ActionRequestSetAutofillService); intent.SetData(Android.Net.Uri.Parse("package:" + PackageName)); - StartActivity(intent); + try + { + StartActivity(intent); + } + catch (ActivityNotFoundException e) + { + //this exception was reported by many Huawei users + Kp2aLog.LogUnexpectedError(e); + new AlertDialog.Builder(this) + .SetTitle(Resource.String.autofill_enable) + .SetMessage(Resource.String.autofill_enable_failed) + .SetPositiveButton(Resource.String.ok, (o, eventArgs) => { }) + .Show(); + const string autofillservicewasenabled = "AutofillServiceWasEnabled"; + _prefs.Edit().PutBoolean(autofillservicewasenabled, true).Commit(); + UpdateBottomBarElementVisibility(Resource.Id.autofill_infotext, false); + } }; } diff --git a/src/keepass2android/Properties/AndroidManifest_net.xml b/src/keepass2android/Properties/AndroidManifest_net.xml index 51c4108d..9c3820a1 100644 --- a/src/keepass2android/Properties/AndroidManifest_net.xml +++ b/src/keepass2android/Properties/AndroidManifest_net.xml @@ -1,7 +1,7 @@  diff --git a/src/keepass2android/Resources/values/strings.xml b/src/keepass2android/Resources/values/strings.xml index 17d974b0..6cca8edc 100644 --- a/src/keepass2android/Resources/values/strings.xml +++ b/src/keepass2android/Resources/values/strings.xml @@ -692,11 +692,18 @@ Show soft keyboard for password input when fingerprint scan is active. + + + Version 1.04b\n + * Avoid crash when user tries to enable Autofill on Huawei devices.\n + Version 1.04\n * Added Autofill service for Android 8.0 and later.\n * Upgraded libraries, build tools and Target SDK version.\n + + Version 1.03\n @@ -1042,6 +1049,7 @@ Initial public release Keepass2Android supports Android\'s Autofill feature but it looks like you haven\'t enabled it yet. Enable Autofill + Sorry, it looks like your device does not support opening the settings from inside the app. Please go manually to the system settings for AutoFill to enable the service. Show Autofill help Fill with Keepass2Android Could not associate web domain %1$s with app %2$s diff --git a/src/keepass2android/settings/DatabaseSettingsActivity.cs b/src/keepass2android/settings/DatabaseSettingsActivity.cs index f0aa308a..ce9d6fd2 100644 --- a/src/keepass2android/settings/DatabaseSettingsActivity.cs +++ b/src/keepass2android/settings/DatabaseSettingsActivity.cs @@ -371,6 +371,32 @@ namespace keepass2android UpdateAutofillPref(); + var autofillPref = FindPreference(GetString(Resource.String.AutoFill_prefs_key)); + if (autofillPref != null) + { + autofillPref.PreferenceClick += (sender, args) => + { + + var intent = new Intent(Settings.ActionRequestSetAutofillService); + intent.SetData(Android.Net.Uri.Parse("package:" + Context.PackageName)); + try + { + Context.StartActivity(intent); + } + catch (ActivityNotFoundException e) + { + //this exception was reported by many Huawei users + Kp2aLog.LogUnexpectedError(e); + new AlertDialog.Builder(Context) + .SetTitle(Resource.String.autofill_enable) + .SetMessage(Resource.String.autofill_enable_failed) + .SetPositiveButton(Resource.String.ok, (o, eventArgs) => { }) + .Show(); + + } + }; + } + PrepareNoDonatePreference(Activity, FindPreference(GetString(Resource.String.NoDonateOption_key))); PrepareNoDonationReminderPreference(Activity, ((PreferenceScreen)FindPreference(GetString(Resource.String.display_prefs_key))), FindPreference(GetString(Resource.String.NoDonationReminder_key))); @@ -488,8 +514,11 @@ namespace keepass2android else { autofillPref.Summary = Activity.GetString(Resource.String.not_enabled); - autofillPref.Intent = new Intent(Settings.ActionRequestSetAutofillService); - autofillPref.Intent.SetData(Android.Net.Uri.Parse("package:" + Activity.PackageName)); + + + + + } } @@ -990,7 +1019,9 @@ namespace keepass2android } - /// + + + /// /// Activity to configure the application and database settings. The database must be unlocked, and this activity will close if it becomes locked. /// [Activity(Label = "@string/app_name", Theme = "@style/MyTheme")]