From 81c4477453b406a93070f0d35c38999153fb926a Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Thu, 11 Nov 2021 12:12:24 +0100 Subject: [PATCH] allow to change app language, closes https://github.com/PhilippC/keepass2android/issues/201 --- src/keepass2android/AutoOpenEdit.cs | 10 +- src/keepass2android/FileSelectHelper.cs | 2 +- src/keepass2android/GroupBaseActivity.cs | 2 +- src/keepass2android/KeeAutoExec.cs | 4 +- src/keepass2android/LifecycleAwareActivity.cs | 6 + .../NoSecureDisplayActivity.cs | 2 +- .../Resources/values/config.xml | 1 + .../Resources/values/strings.xml | 3 + .../Resources/xml/preferences.xml | 6 + src/keepass2android/Totp/Kp2aTotp.cs | 6 +- src/keepass2android/Utils/Util.cs | 73 +++++++++- src/keepass2android/app/App.cs | 107 ++++++++------- src/keepass2android/app/AppTask.cs | 2 +- .../app/OtpAuxCacheSupervisor.cs | 8 +- src/keepass2android/icons/DrawableFactory.cs | 8 +- src/keepass2android/search/SearchProvider.cs | 6 +- .../AutofillBase/AutofillServiceBase.cs | 5 + .../services/CopyToClipboardService.cs | 5 + .../Kp2aAutofill/ChooseForAutofillActivity.cs | 8 +- .../services/OngoingNotificationsService.cs | 4 + .../settings/DatabaseSettingsActivity.cs | 125 ++++++++++++------ src/keepass2android/timeout/TimeoutHelper.cs | 4 +- 22 files changed, 273 insertions(+), 124 deletions(-) diff --git a/src/keepass2android/AutoOpenEdit.cs b/src/keepass2android/AutoOpenEdit.cs index 17f24353..730d5f14 100644 --- a/src/keepass2android/AutoOpenEdit.cs +++ b/src/keepass2android/AutoOpenEdit.cs @@ -66,16 +66,16 @@ namespace keepass2android public override string GetTitle(string key) { if (key == strVisible) - return Application.Context.GetString(Resource.String.Visible_title); + return LocaleManager.LocalizedAppContext.GetString(Resource.String.Visible_title); if (key == strEnabled) - return Application.Context.GetString(Resource.String.child_db_Enabled_title); + return LocaleManager.LocalizedAppContext.GetString(Resource.String.child_db_Enabled_title); if (key == strUiKeyFile) - return Application.Context.GetString(Resource.String.keyfile_heading); + return LocaleManager.LocalizedAppContext.GetString(Resource.String.keyfile_heading); if (key == strUiDatabaseFile) - return Application.Context.GetString(Resource.String.database_file_heading); + return LocaleManager.LocalizedAppContext.GetString(Resource.String.database_file_heading); if (key.StartsWith(strUiIfDevice)) { - return Application.Context.GetString(Resource.String.if_device_text,new Object[]{key.Substring(strUiIfDevice.Length)}); + return LocaleManager.LocalizedAppContext.GetString(Resource.String.if_device_text,new Object[]{key.Substring(strUiIfDevice.Length)}); } return key; } diff --git a/src/keepass2android/FileSelectHelper.cs b/src/keepass2android/FileSelectHelper.cs index c8db0e89..11064101 100644 --- a/src/keepass2android/FileSelectHelper.cs +++ b/src/keepass2android/FileSelectHelper.cs @@ -459,7 +459,7 @@ namespace keepass2android _activity.StartActivityForResult(i, _requestCode); #else - Toast.MakeText(Application.Context, "File chooser is excluded!", ToastLength.Long).Show(); + Toast.MakeText(LocaleManager.LocalizedAppContext, "File chooser is excluded!", ToastLength.Long).Show(); #endif return true; } diff --git a/src/keepass2android/GroupBaseActivity.cs b/src/keepass2android/GroupBaseActivity.cs index 767f5de3..bb0bec18 100644 --- a/src/keepass2android/GroupBaseActivity.cs +++ b/src/keepass2android/GroupBaseActivity.cs @@ -1250,7 +1250,7 @@ namespace keepass2android { Handler.Post(() => { - Toast.MakeText(ActiveActivity ?? Application.Context, "Unrecoverable error: " + Message, ToastLength.Long).Show(); + Toast.MakeText(ActiveActivity ?? LocaleManager.LocalizedAppContext, "Unrecoverable error: " + Message, ToastLength.Long).Show(); }); App.Kp2a.Lock(false); diff --git a/src/keepass2android/KeeAutoExec.cs b/src/keepass2android/KeeAutoExec.cs index 3b695870..6a530b17 100644 --- a/src/keepass2android/KeeAutoExec.cs +++ b/src/keepass2android/KeeAutoExec.cs @@ -61,7 +61,7 @@ namespace keepass2android { if (_thisDevice != null) return _thisDevice; - String android_id = Settings.Secure.GetString(Application.Context.ContentResolver, Settings.Secure.AndroidId); + String android_id = Settings.Secure.GetString(LocaleManager.LocalizedAppContext.ContentResolver, Settings.Secure.AndroidId); string deviceName = Build.Manufacturer+" "+Build.Model; _thisDevice = deviceName + " (" + android_id + ")"; @@ -315,7 +315,7 @@ namespace keepass2android try { ck.AddUserKey(new KcpKeyFile(strAbs)); } catch (InvalidOperationException) { - Toast.MakeText(Application.Context,Resource.String.error_adding_keyfile,ToastLength.Long).Show(); + Toast.MakeText(LocaleManager.LocalizedAppContext,Resource.String.error_adding_keyfile,ToastLength.Long).Show(); return false; } catch (Exception) { throw; } diff --git a/src/keepass2android/LifecycleAwareActivity.cs b/src/keepass2android/LifecycleAwareActivity.cs index 7286cf94..90cfe54b 100644 --- a/src/keepass2android/LifecycleAwareActivity.cs +++ b/src/keepass2android/LifecycleAwareActivity.cs @@ -28,6 +28,10 @@ namespace keepass2android public abstract class LifecycleAwareActivity : AndroidX.AppCompat.App.AppCompatActivity { + protected override void AttachBaseContext(Context baseContext) + { + base.AttachBaseContext(LocaleManager.setLocale(baseContext)); + } protected LifecycleAwareActivity (IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) { @@ -86,7 +90,9 @@ namespace keepass2android protected override void OnCreate(Bundle bundle) { + base.OnCreate(bundle); + Kp2aLog.Log(ClassName+".OnCreate" + " " + ID); Kp2aLog.Log(ClassName+":apptask="+Intent.GetStringExtra("KP2A_APP_TASK_TYPE") + " " + ID); } diff --git a/src/keepass2android/NoSecureDisplayActivity.cs b/src/keepass2android/NoSecureDisplayActivity.cs index 99e0180a..cc54ede2 100644 --- a/src/keepass2android/NoSecureDisplayActivity.cs +++ b/src/keepass2android/NoSecureDisplayActivity.cs @@ -37,7 +37,7 @@ namespace keepass2android }; FindViewById