after updating to targetSdkVersion=34, an implicit mutable intent could lead to a crash.

closes https://github.com/PhilippC/keepass2android/issues/2790
This commit is contained in:
Philipp Crocoll
2025-03-11 16:02:51 +01:00
parent 9cd8996aeb
commit d2e0ae6394
3 changed files with 28 additions and 5 deletions

View File

@@ -0,0 +1,24 @@
using Android.Content.PM;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace keepass2android
{
[Activity(Label = AppNames.AppName,
MainLauncher = false,
Theme = "@style/Kp2aTheme_BlueNoActionBar",
Exported = true)]
///For autofill, we sometimes need to pass an intent to an inline presentation which never gets fired. We use this as a dummy activity.
public class NullActivity: Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
Kp2aLog.Log("NullActivity.OnCreate - this is unexpected.");
base.OnCreate(savedInstanceState);
Finish();
}
}
}

View File

@@ -30,10 +30,9 @@ namespace keepass2android.services.AutofillBase
{
return null;
}
//make sure we have a pendingIntent always not null
pendingIntent ??= PendingIntent.GetService(context, 0, new Intent(),
Util.AddMutabilityFlag(PendingIntentFlags.OneShot | PendingIntentFlags.UpdateCurrent, PendingIntentFlags.Mutable));
// If the pending intent is null, we need to create a dummy one to avoid a crash
pendingIntent ??= PendingIntent.GetActivity(context, 0, new Intent(context, typeof(NullActivity)), PendingIntentFlags.OneShot | PendingIntentFlags.UpdateCurrent | PendingIntentFlags.Immutable);
var slice = CreateInlinePresentationSlice(
inlinePresentationSpec,
text,

View File

@@ -405,7 +405,7 @@ namespace keepass2android.services.AutofillBase
var datasetBuilder = new Dataset.Builder(presentation);
datasetBuilder.SetAuthentication(pendingIntent?.IntentSender);
AutofillHelper.AddInlinePresentation(this, inlinePresentationSpec, text, datasetBuilder, Resource.Drawable.baseline_close_24, null);
AutofillHelper.AddInlinePresentation(this, inlinePresentationSpec, text, datasetBuilder, Resource.Drawable.baseline_close_24, pendingIntent);
foreach (var autofillId in autofillIds)
{