diff --git a/src/Android/AutofillActivity.cs b/src/Android/AutofillActivity.cs index 4d76449d7..6b3ad9aef 100644 --- a/src/Android/AutofillActivity.cs +++ b/src/Android/AutofillActivity.cs @@ -94,8 +94,10 @@ namespace Bit.Android } var intent = new Intent(this, typeof(MainActivity)); - intent.PutExtra("uri", _lastQueriedUri); - intent.PutExtra("ts", Java.Lang.JavaSystem.CurrentTimeMillis()); + if(!callingIntent.Flags.HasFlag(ActivityFlags.LaunchedFromHistory)) + { + intent.PutExtra("uri", _lastQueriedUri); + } StartActivityForResult(intent, requestCode); } } diff --git a/src/Android/AutofillService.cs b/src/Android/AutofillService.cs index 74582600a..2bee3bad9 100644 --- a/src/Android/AutofillService.cs +++ b/src/Android/AutofillService.cs @@ -60,7 +60,7 @@ namespace Bit.Android { return; } - + switch(e.EventType) { case EventTypes.WindowContentChanged: @@ -77,13 +77,8 @@ namespace Bit.Android if(passwordNodes.Any()) { var uri = GetUri(root); - if(uri != null) + if(uri != null && !uri.Contains(BitwardenWebsite)) { - if(uri.Contains(BitwardenWebsite)) - { - break; - } - if(NeedToAutofill(AutofillActivity.LastCredentials, uri)) { var allEditTexts = GetWindowNodes(root, e, n => EditText(n)); @@ -252,18 +247,18 @@ namespace Bit.Android } private IEnumerable GetWindowNodes(AccessibilityNodeInfo n, - AccessibilityEvent e, Func p) + AccessibilityEvent e, Func condition) { if(n != null) { - if(n.WindowId == e.WindowId && !(n.ViewIdResourceName?.StartsWith(SystemUiPackage) ?? false) && p(n)) + if(n.WindowId == e.WindowId && !(n.ViewIdResourceName?.StartsWith(SystemUiPackage) ?? false) && condition(n)) { yield return n; } for(int i = 0; i < n.ChildCount; i++) { - foreach(var node in GetWindowNodes(n.GetChild(i), e, p)) + foreach(var node in GetWindowNodes(n.GetChild(i), e, condition)) { yield return node; } diff --git a/src/Android/MainActivity.cs b/src/Android/MainActivity.cs index bdf0388e8..835ad8d67 100644 --- a/src/Android/MainActivity.cs +++ b/src/Android/MainActivity.cs @@ -28,22 +28,7 @@ namespace Bit.Android protected override void OnCreate(Bundle bundle) { - string uri = null; - if(!Intent.Flags.HasFlag(ActivityFlags.LaunchedFromHistory) && Intent.HasExtra("uri") && Intent.HasExtra("ts")) - { - var tsDiff = Java.Lang.JavaSystem.CurrentTimeMillis() - Intent.GetLongExtra("ts", 0); - if(tsDiff < 5000) - { - uri = Intent.GetStringExtra("uri"); - } - - // Attempt to clear intent for future - Intent.ReplaceExtras(new Bundle()); - Intent.SetAction(string.Empty); - Intent.SetData(null); - Intent.SetFlags(0); - } - + var uri = Intent.GetStringExtra("uri"); if(!Resolver.IsSet) { MainApplication.SetIoc(Application); @@ -134,8 +119,7 @@ namespace Bit.Android { Parent.SetResult(Result.Ok, data); } - - MessagingCenter.Send(Xamarin.Forms.Application.Current, "SetMainPage"); + Finish(); } diff --git a/src/App/App.cs b/src/App/App.cs index 56070914c..6b6e7b578 100644 --- a/src/App/App.cs +++ b/src/App/App.cs @@ -22,7 +22,6 @@ namespace Bit.App private const string LastBuildKey = "LastBuild"; private string _uri; - private DateTime _lastMainPageSet = DateTime.MinValue; private readonly IDatabaseService _databaseService; private readonly IConnectivity _connectivity; private readonly IUserDialogs _userDialogs; @@ -93,11 +92,6 @@ namespace Bit.App { Logout(args); }); - - MessagingCenter.Subscribe(Current, "SetMainPage", (sender) => - { - SetMainPageFromAutofill(); - }); } protected async override void OnStart() @@ -165,15 +159,14 @@ namespace Bit.App { if(Device.OS == TargetPlatform.Android && !string.IsNullOrWhiteSpace(_uri)) { - var now = DateTime.UtcNow; - if((now - _lastMainPageSet).Seconds <= 1) + Task.Run(() => { - return; - } - - _lastMainPageSet = now; - Device.BeginInvokeOnMainThread(() => MainPage = new MainPage()); - _uri = null; + Device.BeginInvokeOnMainThread(() => + { + Current.MainPage = new MainPage(); + _uri = null; + }); + }); } }