Skip to content

Commit

Permalink
[PM-6726] Fix for Android 14 devices crashing when using the Tiles (#…
Browse files Browse the repository at this point in the history
…3069)

* Fix for Android 14 devices crashing when using the TileService.
Also added fix for an "hidden" crash in accessibility autofill

* Shared StartActivityAndCollapseFromTileService in AndroidHelpers

* Update src/App/Platforms/Android/Utilities/AndroidHelpers.cs

Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>

* Updated name of StartActivityAndCollapseWithIntent method name used by TileService

---------

Co-authored-by: Federico Maccaroni <fedemkr@gmail.com>
  • Loading branch information
dinisvieira and fedemkr authored Mar 11, 2024
1 parent e344184 commit 9bc2901
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 22 deletions.
2 changes: 1 addition & 1 deletion src/App/Platforms/Android/Autofill/AutofillHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ public static InlinePresentation BuildInlinePresentation(InlinePresentationSpec
// InlinePresentation requires nonNull pending intent (even though we only utilize one for the
// "my vault" presentation) so we're including an empty one here
pendingIntent = PendingIntent.GetService(context, 0, new Intent(),
AndroidHelpers.AddPendingIntentMutabilityFlag(PendingIntentFlags.OneShot | PendingIntentFlags.UpdateCurrent, true));
AndroidHelpers.AddPendingIntentMutabilityFlag(PendingIntentFlags.OneShot | PendingIntentFlags.UpdateCurrent, false));
}
var slice = CreateInlinePresentationSlice(
inlinePresentationSpec,
Expand Down
3 changes: 2 additions & 1 deletion src/App/Platforms/Android/Tiles/AutofillTileService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Bit.Core.Utilities;
using Bit.Droid.Accessibility;
using Java.Lang;
using Bit.App.Droid.Utilities;

namespace Bit.Droid.Tile
{
Expand Down Expand Up @@ -76,7 +77,7 @@ private void ScanAndFill()
var intent = new Intent(this, typeof(AccessibilityActivity));
intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.SingleTop | ActivityFlags.ClearTop);
intent.PutExtra("autofillTileClicked", true);
StartActivityAndCollapse(intent);
this.StartActivityAndCollapseWithIntent(intent, isMutable: true);
}

private void ShowConfigErrorDialog()
Expand Down
13 changes: 3 additions & 10 deletions src/App/Platforms/Android/Tiles/GeneratorTileService.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Service.QuickSettings;
using Android.Views;
using Android.Widget;
using Bit.App.Droid.Utilities;
using Java.Lang;

namespace Bit.Droid.Tile
Expand Down Expand Up @@ -62,7 +55,7 @@ private void LaunchMyVault()
var intent = new Intent(this, typeof(MainActivity));
intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.SingleTop | ActivityFlags.ClearTop);
intent.PutExtra("generatorTile", true);
StartActivityAndCollapse(intent);
this.StartActivityAndCollapseWithIntent(intent, isMutable: false);
}
}
}
13 changes: 3 additions & 10 deletions src/App/Platforms/Android/Tiles/MyVaultTileService.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Service.QuickSettings;
using Android.Views;
using Android.Widget;
using Bit.App.Droid.Utilities;
using Java.Lang;

namespace Bit.Droid.Tile
Expand Down Expand Up @@ -63,7 +56,7 @@ private void LaunchMyVault()
var intent = new Intent(this, typeof(MainActivity));
intent.SetFlags(ActivityFlags.NewTask | ActivityFlags.SingleTop | ActivityFlags.ClearTop);
intent.PutExtra("myVaultTile", true);
StartActivityAndCollapse(intent);
this.StartActivityAndCollapseWithIntent(intent, isMutable: false);
}
}
}
22 changes: 22 additions & 0 deletions src/App/Platforms/Android/Utilities/AndroidHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Android.Content;
using Android.OS;
using Android.Provider;
using Android.Service.QuickSettings;
using Bit.App.Utilities;

namespace Bit.App.Droid.Utilities
Expand Down Expand Up @@ -64,5 +65,26 @@ public static PendingIntentFlags AddPendingIntentMutabilityFlag(PendingIntentFla

return pendingIntentFlags;
}

public static void StartActivityAndCollapseWithIntent(this TileService service, Intent intent, bool isMutable)
{
//For Android 14+ We need to use PendingIntent instead of Intent directly. Older versions still need to use Intent.
if (Build.VERSION.SdkInt < BuildVersionCodes.UpsideDownCake)
{
service.StartActivityAndCollapse(intent);
return;
}
var pendingIntent = PendingIntent.GetActivity(
service.ApplicationContext,
0,
intent,
AddPendingIntentMutabilityFlag(PendingIntentFlags.UpdateCurrent, isMutable)
);
if (pendingIntent == null)
{
return;
}
service.StartActivityAndCollapse(pendingIntent);
}
}
}

0 comments on commit 9bc2901

Please sign in to comment.