From 8759fe5346f805e70cc44d443f954c64f3831eb6 Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Mon, 3 Feb 2025 18:05:10 -0500 Subject: [PATCH 1/3] Remove deprecated Firefox Nightly app ID from trusted browsers This app ID has not been used for a few years now and can be safely removed. See the original PR for added context: https://github.com/PhilippC/keepass2android/pull/896 --- .../services/AutofillBase/Kp2aDigitalAssetLinksDataSource.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/keepass2android-app/services/AutofillBase/Kp2aDigitalAssetLinksDataSource.cs b/src/keepass2android-app/services/AutofillBase/Kp2aDigitalAssetLinksDataSource.cs index 122597d0..48a985b4 100644 --- a/src/keepass2android-app/services/AutofillBase/Kp2aDigitalAssetLinksDataSource.cs +++ b/src/keepass2android-app/services/AutofillBase/Kp2aDigitalAssetLinksDataSource.cs @@ -71,7 +71,7 @@ namespace keepass2android.services.AutofillBase static readonly HashSet _trustedBrowsers = new HashSet { "org.mozilla.firefox","org.mozilla.firefox_beta","org.mozilla.klar","org.mozilla.focus", - "org.mozilla.fenix","org.mozilla.fenix.nightly","org.mozilla.reference.browser", + "org.mozilla.fenix","org.mozilla.reference.browser", "com.android.browser","com.android.chrome","com.chrome.beta","com.chrome.dev","com.chrome.canary", "com.google.android.apps.chrome","com.google.android.apps.chrome_dev", "com.opera.browser","com.opera.browser.beta","com.opera.mini.native","com.opera.mini.native.beta","com.opera.touch", From 0bd58bd51fe767a370e6dcb65c6972d0225ac5e4 Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Thu, 6 Feb 2025 12:12:54 +0100 Subject: [PATCH 2/3] upgrade to target sdk 34: mark OngoingNotificationsService as Special Use, register receivers as exported (This is required because it is allowed that plugins send intents and also intents from system notifications are not received in NonExported mode) --- src/keepass2android-app/EntryActivity.cs | 4 ++-- src/keepass2android-app/LockCloseActivity.cs | 2 +- src/keepass2android-app/LockCloseListActivity.cs | 2 +- src/keepass2android-app/LockingClosePreferenceActivity.cs | 2 +- .../Manifests/AndroidManifest_debug.xml | 3 ++- src/keepass2android-app/Manifests/AndroidManifest_net.xml | 3 ++- .../Manifests/AndroidManifest_nonet.xml | 2 +- src/keepass2android-app/PasswordActivity.cs | 2 +- src/keepass2android-app/QuickUnlock.cs | 4 +--- src/keepass2android-app/SelectCurrentDbActivity.cs | 2 +- src/keepass2android-app/app/App.cs | 2 +- src/keepass2android-app/services/CopyToClipboardService.cs | 4 ++-- .../services/OngoingNotificationsService.cs | 7 +++++-- 13 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/keepass2android-app/EntryActivity.cs b/src/keepass2android-app/EntryActivity.cs index 62852654..62450f1f 100644 --- a/src/keepass2android-app/EntryActivity.cs +++ b/src/keepass2android-app/EntryActivity.cs @@ -491,9 +491,9 @@ namespace keepass2android App.Kp2a.LastOpenedEntry = new PwEntryOutput(Entry, App.Kp2a.CurrentDb); _pluginActionReceiver = new PluginActionReceiver(this); - RegisterReceiver(_pluginActionReceiver, new IntentFilter(Strings.ActionAddEntryAction)); + RegisterReceiver(_pluginActionReceiver, new IntentFilter(Strings.ActionAddEntryAction), ReceiverFlags.Exported); _pluginFieldReceiver = new PluginFieldReceiver(this); - RegisterReceiver(_pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField)); + RegisterReceiver(_pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField), ReceiverFlags.Exported); var notifyPluginsOnOpenThread = new Thread(NotifyPluginsOnOpen); notifyPluginsOnOpenThread.Start(); diff --git a/src/keepass2android-app/LockCloseActivity.cs b/src/keepass2android-app/LockCloseActivity.cs index 9ea1babe..57b6f198 100644 --- a/src/keepass2android-app/LockCloseActivity.cs +++ b/src/keepass2android-app/LockCloseActivity.cs @@ -69,7 +69,7 @@ namespace keepass2android IntentFilter filter = new IntentFilter(); filter.AddAction(Intents.DatabaseLocked); filter.AddAction(Intent.ActionScreenOff); - RegisterReceiver(_intentReceiver, filter); + RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported); } protected override void OnDestroy() diff --git a/src/keepass2android-app/LockCloseListActivity.cs b/src/keepass2android-app/LockCloseListActivity.cs index 1f05e094..94cad492 100644 --- a/src/keepass2android-app/LockCloseListActivity.cs +++ b/src/keepass2android-app/LockCloseListActivity.cs @@ -55,7 +55,7 @@ namespace keepass2android filter.AddAction(Intents.DatabaseLocked); filter.AddAction(Intent.ActionScreenOff); - RegisterReceiver(_intentReceiver, filter); + RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported); } diff --git a/src/keepass2android-app/LockingClosePreferenceActivity.cs b/src/keepass2android-app/LockingClosePreferenceActivity.cs index fd2baebf..0e088409 100644 --- a/src/keepass2android-app/LockingClosePreferenceActivity.cs +++ b/src/keepass2android-app/LockingClosePreferenceActivity.cs @@ -39,7 +39,7 @@ namespace keepass2android _intentReceiver = new LockCloseActivityBroadcastReceiver(this); IntentFilter filter = new IntentFilter(); filter.AddAction(Intents.DatabaseLocked); - RegisterReceiver(_intentReceiver, filter); + RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported); } protected override void OnResume() { diff --git a/src/keepass2android-app/Manifests/AndroidManifest_debug.xml b/src/keepass2android-app/Manifests/AndroidManifest_debug.xml index 2edff61b..27a4d6bc 100644 --- a/src/keepass2android-app/Manifests/AndroidManifest_debug.xml +++ b/src/keepass2android-app/Manifests/AndroidManifest_debug.xml @@ -43,7 +43,7 @@ - + + diff --git a/src/keepass2android-app/Manifests/AndroidManifest_net.xml b/src/keepass2android-app/Manifests/AndroidManifest_net.xml index a3e913fa..79b4b3ab 100644 --- a/src/keepass2android-app/Manifests/AndroidManifest_net.xml +++ b/src/keepass2android-app/Manifests/AndroidManifest_net.xml @@ -42,7 +42,7 @@ - + @@ -270,6 +270,7 @@ The scheme=file is still there for old OS devices. It's also queried by apps lik + diff --git a/src/keepass2android-app/Manifests/AndroidManifest_nonet.xml b/src/keepass2android-app/Manifests/AndroidManifest_nonet.xml index 3fce187d..f924a72a 100644 --- a/src/keepass2android-app/Manifests/AndroidManifest_nonet.xml +++ b/src/keepass2android-app/Manifests/AndroidManifest_nonet.xml @@ -40,7 +40,7 @@ - + (Resource.Id.QuickUnlock_password)); @@ -503,8 +503,6 @@ namespace keepass2android } } } - - } } diff --git a/src/keepass2android-app/SelectCurrentDbActivity.cs b/src/keepass2android-app/SelectCurrentDbActivity.cs index 744fd0c2..26f270ca 100644 --- a/src/keepass2android-app/SelectCurrentDbActivity.cs +++ b/src/keepass2android-app/SelectCurrentDbActivity.cs @@ -343,7 +343,7 @@ namespace keepass2android IntentFilter filter = new IntentFilter(); filter.AddAction(Intents.DatabaseLocked); filter.AddAction(Intent.ActionScreenOff); - RegisterReceiver(_intentReceiver, filter); + RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported); } } diff --git a/src/keepass2android-app/app/App.cs b/src/keepass2android-app/app/App.cs index a3c94786..510c5d34 100644 --- a/src/keepass2android-app/app/App.cs +++ b/src/keepass2android-app/app/App.cs @@ -1342,7 +1342,7 @@ namespace keepass2android intentFilter.AddAction(Intents.LockDatabase); intentFilter.AddAction(Intents.LockDatabaseByTimeout); intentFilter.AddAction(Intents.CloseDatabase); - Context.RegisterReceiver(broadcastReceiver, intentFilter); + Context.RegisterReceiver(broadcastReceiver, intentFilter, ReceiverFlags.Exported); //ZXing.Net.Mobile.Forms.Android.Platform.Init(); } diff --git a/src/keepass2android-app/services/CopyToClipboardService.cs b/src/keepass2android-app/services/CopyToClipboardService.cs index a3817301..fff79c56 100644 --- a/src/keepass2android-app/services/CopyToClipboardService.cs +++ b/src/keepass2android-app/services/CopyToClipboardService.cs @@ -322,7 +322,7 @@ namespace keepass2android _stopOnLockBroadcastReceiver = new StopOnLockBroadcastReceiver(this); IntentFilter filter = new IntentFilter(); filter.AddAction(Intents.DatabaseLocked); - RegisterReceiver(_stopOnLockBroadcastReceiver, filter); + RegisterReceiver(_stopOnLockBroadcastReceiver, filter, ReceiverFlags.Exported); } if ((intent.Action == Intents.ShowNotification) || (intent.Action == Intents.UpdateKeyboard)) @@ -529,7 +529,7 @@ namespace keepass2android _notificationDeletedBroadcastReceiver = new NotificationDeletedBroadcastReceiver(this); IntentFilter deletefilter = new IntentFilter(); deletefilter.AddAction(ActionNotificationCancelled); - RegisterReceiver(_notificationDeletedBroadcastReceiver, deletefilter); + RegisterReceiver(_notificationDeletedBroadcastReceiver, deletefilter, ReceiverFlags.Exported); } } diff --git a/src/keepass2android-app/services/OngoingNotificationsService.cs b/src/keepass2android-app/services/OngoingNotificationsService.cs index 35e2a0db..4dbb0e33 100644 --- a/src/keepass2android-app/services/OngoingNotificationsService.cs +++ b/src/keepass2android-app/services/OngoingNotificationsService.cs @@ -18,6 +18,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file using System; using Android.App; using Android.Content; +using Android.Content.PM; using Android.Graphics; using Android.OS; using Android.Preferences; @@ -37,7 +38,9 @@ namespace keepass2android /// used by the user. This ensures the database is kept in memory (until Android kills it due to low memory). /// It is important to also have a foreground service also for the "unlocked" state because it's really /// irritating if the db is closed while switching between apps. - [Service] + [Service(ForegroundServiceType = ForegroundService.TypeSpecialUse )] + [MetaData("android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE", Value = " This service is running as foreground service to keep the app alive even when it's not currently used by the user. This ensures the database is kept in memory (until Android kills it due to low memory). It is important to also have a foreground service also for the \"unlocked\" state because it's really irritating if the db is closed while switching between apps.")] + public class OngoingNotificationsService : Service { protected override void AttachBaseContext(Context baseContext) @@ -57,7 +60,7 @@ namespace keepass2android _screenOffReceiver = new ScreenOffReceiver(); IntentFilter filter = new IntentFilter(); filter.AddAction(Intent.ActionScreenOff); - RegisterReceiver(_screenOffReceiver, filter); + RegisterReceiver(_screenOffReceiver, filter, ReceiverFlags.Exported); } From 4c632d0c72582770dd898c944dd0f7bd26f7cf8c Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Thu, 6 Feb 2025 13:02:28 +0100 Subject: [PATCH 3/3] fix i18n of a password hint in entry edit --- src/keepass2android-app/Resources/layout/entry_edit.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/keepass2android-app/Resources/layout/entry_edit.xml b/src/keepass2android-app/Resources/layout/entry_edit.xml index cb5edd47..02a0066b 100644 --- a/src/keepass2android-app/Resources/layout/entry_edit.xml +++ b/src/keepass2android-app/Resources/layout/entry_edit.xml @@ -69,6 +69,7 @@ android:layout_height="wrap_content" android:orientation="vertical">