Skip to content

Commit 4619431

Browse files
authored
Merge pull request #2766 from PhilippC/bugfix/potential-crashes-when-registering-receivers
fix potential crashes
2 parents c4d6e18 + ee41a60 commit 4619431

File tree

11 files changed

+47
-19
lines changed

11 files changed

+47
-19
lines changed

src/java/KP2ASoftkeyboard_AS/app/src/main/java/keepass2android/softkeyboard/KP2AKeyboard.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,13 @@ public void onCreate() {
356356
pFilter.addAction("android.intent.action.PACKAGE_ADDED");
357357
pFilter.addAction("android.intent.action.PACKAGE_REPLACED");
358358
pFilter.addAction("android.intent.action.PACKAGE_REMOVED");
359-
registerReceiver(mPluginManager, pFilter);
359+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
360+
registerReceiver(mPluginManager, pFilter, RECEIVER_EXPORTED);
361+
}
362+
else
363+
{
364+
registerReceiver(mPluginManager, pFilter);
365+
}
360366

361367

362368
LatinIMEUtil.GCUtils.getInstance().reset();
@@ -375,16 +381,28 @@ public void onCreate() {
375381

376382
// register to receive ringer mode changes for silent mode
377383
IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
378-
registerReceiver(mSilentModeReceiver, filter);
379-
384+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
385+
registerReceiver(mSilentModeReceiver, filter, RECEIVER_EXPORTED);
386+
}
387+
else
388+
{
389+
registerReceiver(mSilentModeReceiver, filter);
390+
}
391+
380392
prefs.registerOnSharedPreferenceChangeListener(this);
381393

382394
//check if we have KP2A data available:
383-
mHadKp2aData = mShowKp2aKeyboard = keepass2android.kbbridge.KeyboardData.hasData();
395+
mHadKp2aData = mShowKp2aKeyboard = KeyboardData.hasData();
384396

385397
mClearKeyboardReceiver = new ClearKeyboardBroadcastReceiver();
386-
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)));
387-
android.util.Log.d("KP2AK", "registered receiver for clear keyboard broadcast: "+get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this));
398+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
399+
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)), RECEIVER_EXPORTED);
400+
}
401+
else
402+
{
403+
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)));
404+
}
405+
Log.d("KP2AK", "registered receiver for clear keyboard broadcast: "+get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this));
388406

389407
}
390408

src/keepass2android-app/EntryActivity.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ You should have received a copy of the GNU General Public License
5353
using KeeTrayTOTP.Libraries;
5454
using Boolean = Java.Lang.Boolean;
5555
using Android.Util;
56+
using AndroidX.Core.Content;
5657
using Google.Android.Material.Dialog;
5758
using keepass2android;
5859

@@ -491,9 +492,9 @@ protected override void OnCreate(Bundle savedInstanceState)
491492
App.Kp2a.LastOpenedEntry = new PwEntryOutput(Entry, App.Kp2a.CurrentDb);
492493

493494
_pluginActionReceiver = new PluginActionReceiver(this);
494-
RegisterReceiver(_pluginActionReceiver, new IntentFilter(Strings.ActionAddEntryAction), ReceiverFlags.Exported);
495+
ContextCompat.RegisterReceiver(this, _pluginActionReceiver, new IntentFilter(Strings.ActionAddEntryAction), (int)ReceiverFlags.Exported);
495496
_pluginFieldReceiver = new PluginFieldReceiver(this);
496-
RegisterReceiver(_pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField), ReceiverFlags.Exported);
497+
ContextCompat.RegisterReceiver(this, _pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField), (int)ReceiverFlags.Exported);
497498

498499
var notifyPluginsOnOpenThread = new Thread(NotifyPluginsOnOpen);
499500
notifyPluginsOnOpenThread.Start();

src/keepass2android-app/LockCloseActivity.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ You should have received a copy of the GNU General Public License
2121
using Android.Preferences;
2222
using Android.Runtime;
2323
using Android.Views;
24+
using AndroidX.Core.Content;
2425
using KeePassLib.Serialization;
2526

2627
namespace keepass2android
@@ -69,7 +70,7 @@ protected override void OnCreate(Bundle savedInstanceState)
6970
IntentFilter filter = new IntentFilter();
7071
filter.AddAction(Intents.DatabaseLocked);
7172
filter.AddAction(Intent.ActionScreenOff);
72-
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
73+
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
7374
}
7475

7576
protected override void OnDestroy()

src/keepass2android-app/LockCloseListActivity.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ You should have received a copy of the GNU General Public License
2121
using Android.Preferences;
2222
using Android.Runtime;
2323
using Android.Views;
24+
using AndroidX.Core.Content;
2425
using KeePassLib.Serialization;
2526

2627
namespace keepass2android
@@ -55,7 +56,7 @@ protected override void OnCreate(Bundle savedInstanceState)
5556

5657
filter.AddAction(Intents.DatabaseLocked);
5758
filter.AddAction(Intent.ActionScreenOff);
58-
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
59+
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
5960

6061
}
6162

src/keepass2android-app/LockingClosePreferenceActivity.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License
1818
using System;
1919
using Android.Content;
2020
using Android.OS;
21+
using AndroidX.Core.Content;
2122
using KeePassLib.Serialization;
2223

2324
namespace keepass2android
@@ -39,7 +40,7 @@ protected override void OnCreate(Bundle savedInstanceState)
3940
_intentReceiver = new LockCloseActivityBroadcastReceiver(this);
4041
IntentFilter filter = new IntentFilter();
4142
filter.AddAction(Intents.DatabaseLocked);
42-
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
43+
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
4344
}
4445

4546
protected override void OnResume() {

src/keepass2android-app/PasswordActivity.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ You should have received a copy of the GNU General Public License
6565
using Exception = System.Exception;
6666
using String = System.String;
6767
using Toolbar = AndroidX.AppCompat.Widget.Toolbar;
68+
using AndroidX.Core.Content;
6869

6970
namespace keepass2android
7071
{
@@ -647,7 +648,7 @@ protected override void OnCreate(Bundle savedInstanceState)
647648
_intentReceiver = new PasswordActivityBroadcastReceiver(this);
648649
IntentFilter filter = new IntentFilter();
649650
filter.AddAction(Intent.ActionScreenOff);
650-
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
651+
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
651652

652653

653654
//use FlagSecure to make sure the last (revealed) character of the master password is not visible in recent apps

src/keepass2android-app/QuickUnlock.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ You should have received a copy of the GNU General Public License
3434
using KeePassLib;
3535
using KeePassLib.Serialization;
3636
using Toolbar = AndroidX.AppCompat.Widget.Toolbar;
37+
using AndroidX.Core.Content;
3738

3839
namespace keepass2android
3940
{
@@ -153,7 +154,7 @@ protected override void OnCreate(Bundle bundle)
153154
_intentReceiver = new QuickUnlockBroadcastReceiver(this);
154155
IntentFilter filter = new IntentFilter();
155156
filter.AddAction(Intents.DatabaseLocked);
156-
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
157+
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
157158

158159
Util.SetNoPersonalizedLearning(FindViewById<EditText>(Resource.Id.QuickUnlock_password));
159160

src/keepass2android-app/SelectCurrentDbActivity.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
using KeePassLib.Serialization;
2727
using Console = System.Console;
2828
using Object = Java.Lang.Object;
29+
using AndroidX.Core.Content;
2930

3031
namespace keepass2android
3132
{
@@ -343,7 +344,7 @@ protected override void OnStart()
343344
IntentFilter filter = new IntentFilter();
344345
filter.AddAction(Intents.DatabaseLocked);
345346
filter.AddAction(Intent.ActionScreenOff);
346-
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
347+
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
347348
}
348349
}
349350

src/keepass2android-app/app/App.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1342,7 +1342,7 @@ public override void OnCreate()
13421342
intentFilter.AddAction(Intents.LockDatabase);
13431343
intentFilter.AddAction(Intents.LockDatabaseByTimeout);
13441344
intentFilter.AddAction(Intents.CloseDatabase);
1345-
Context.RegisterReceiver(broadcastReceiver, intentFilter, ReceiverFlags.Exported);
1345+
ContextCompat.RegisterReceiver(Context, broadcastReceiver, intentFilter, (int)ReceiverFlags.Exported);
13461346

13471347
//ZXing.Net.Mobile.Forms.Android.Platform.Init();
13481348
}

src/keepass2android-app/services/CopyToClipboardService.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ You should have received a copy of the GNU General Public License
3939
using keepass2android;
4040
using KeePassLib.Serialization;
4141
using PluginTOTP;
42+
using AndroidX.Core.Content;
4243

4344
namespace keepass2android
4445
{
@@ -322,7 +323,8 @@ public override StartCommandResult OnStartCommand(Intent intent, StartCommandFla
322323
_stopOnLockBroadcastReceiver = new StopOnLockBroadcastReceiver(this);
323324
IntentFilter filter = new IntentFilter();
324325
filter.AddAction(Intents.DatabaseLocked);
325-
RegisterReceiver(_stopOnLockBroadcastReceiver, filter, ReceiverFlags.Exported);
326+
327+
ContextCompat.RegisterReceiver(this, _stopOnLockBroadcastReceiver, filter, (int)ReceiverFlags.Exported);
326328
}
327329

328330
if ((intent.Action == Intents.ShowNotification) || (intent.Action == Intents.UpdateKeyboard))
@@ -529,7 +531,7 @@ public void DisplayAccessNotifications(PwEntryOutput entry, bool activateKeyboar
529531
_notificationDeletedBroadcastReceiver = new NotificationDeletedBroadcastReceiver(this);
530532
IntentFilter deletefilter = new IntentFilter();
531533
deletefilter.AddAction(ActionNotificationCancelled);
532-
RegisterReceiver(_notificationDeletedBroadcastReceiver, deletefilter, ReceiverFlags.Exported);
534+
ContextCompat.RegisterReceiver(this, _notificationDeletedBroadcastReceiver, deletefilter, (int)ReceiverFlags.Exported);
533535
}
534536

535537
}

0 commit comments

Comments
 (0)