diff --git a/src/Android/MainActivity.cs b/src/Android/MainActivity.cs index 9be66fd8e..876214114 100644 --- a/src/Android/MainActivity.cs +++ b/src/Android/MainActivity.cs @@ -327,6 +327,11 @@ namespace Bit.Droid { if (intent.Action == Intent.ActionSend && intent.Type != null) { + if ((intent.Flags & ActivityFlags.LaunchedFromHistory) == ActivityFlags.LaunchedFromHistory) + { + // don't re-deliver intent if resuming from app switcher + return null; + } var type = intent.Type; if (type.Contains("text/")) { diff --git a/src/App/Pages/Send/SendAddEditPage.xaml.cs b/src/App/Pages/Send/SendAddEditPage.xaml.cs index 3f17e60bb..c58a04cae 100644 --- a/src/App/Pages/Send/SendAddEditPage.xaml.cs +++ b/src/App/Pages/Send/SendAddEditPage.xaml.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Bit.App.Models; using Bit.App.Resources; +using Bit.App.Utilities; using Bit.Core.Abstractions; using Bit.Core.Enums; using Bit.Core.Utilities; @@ -81,7 +82,10 @@ namespace Bit.App.Pages protected override async void OnAppearing() { base.OnAppearing(); - await _vaultTimeoutService.CheckVaultTimeoutAsync(); + if (!await AppHelpers.IsVaultTimeoutImmediateAsync()) + { + await _vaultTimeoutService.CheckVaultTimeoutAsync(); + } if (await _vaultTimeoutService.IsLockedAsync()) { return; @@ -121,7 +125,6 @@ namespace Bit.App.Pages if (_vm.IsAddFromShare && Device.RuntimePlatform == Device.Android) { _appOptions.CreateSend = null; - _vm.CloseMainApp(); } return base.OnBackButtonPressed(); } diff --git a/src/App/Pages/Send/SendAddEditPageViewModel.cs b/src/App/Pages/Send/SendAddEditPageViewModel.cs index e8e724702..73aea806d 100644 --- a/src/App/Pages/Send/SendAddEditPageViewModel.cs +++ b/src/App/Pages/Send/SendAddEditPageViewModel.cs @@ -398,7 +398,7 @@ namespace Bit.App.Pages if (IsAddFromShare && Device.RuntimePlatform == Device.Android) { - CloseMainApp(); + _deviceActionService.CloseMainApp(); } else { @@ -429,14 +429,6 @@ namespace Bit.App.Pages return false; } - public void CloseMainApp() - { - if (Device.RuntimePlatform == Device.Android) - { - _deviceActionService.CloseMainApp(); - } - } - public async Task RemovePasswordAsync() { return await AppHelpers.RemoveSendPasswordAsync(SendId); diff --git a/src/App/Pages/Vault/AddEditPage.xaml.cs b/src/App/Pages/Vault/AddEditPage.xaml.cs index 5809d86bf..cf1ac8f85 100644 --- a/src/App/Pages/Vault/AddEditPage.xaml.cs +++ b/src/App/Pages/Vault/AddEditPage.xaml.cs @@ -147,7 +147,10 @@ namespace Bit.App.Pages protected override async void OnAppearing() { base.OnAppearing(); - await _vaultTimeoutService.CheckVaultTimeoutAsync(); + if (!await AppHelpers.IsVaultTimeoutImmediateAsync()) + { + await _vaultTimeoutService.CheckVaultTimeoutAsync(); + } if (await _vaultTimeoutService.IsLockedAsync()) { return; diff --git a/src/App/Pages/Vault/AutofillCiphersPage.xaml.cs b/src/App/Pages/Vault/AutofillCiphersPage.xaml.cs index bbaa2f026..69d04cda5 100644 --- a/src/App/Pages/Vault/AutofillCiphersPage.xaml.cs +++ b/src/App/Pages/Vault/AutofillCiphersPage.xaml.cs @@ -7,6 +7,7 @@ using System; using System.Linq; using System.Threading.Tasks; using Bit.App.Controls; +using Bit.App.Utilities; using Xamarin.Forms; namespace Bit.App.Pages @@ -34,7 +35,10 @@ namespace Bit.App.Pages protected async override void OnAppearing() { base.OnAppearing(); - await _vaultTimeoutService.CheckVaultTimeoutAsync(); + if (!await AppHelpers.IsVaultTimeoutImmediateAsync()) + { + await _vaultTimeoutService.CheckVaultTimeoutAsync(); + } if (await _vaultTimeoutService.IsLockedAsync()) { return; diff --git a/src/App/Utilities/AppHelpers.cs b/src/App/Utilities/AppHelpers.cs index 9eb08209f..ffa183e88 100644 --- a/src/App/Utilities/AppHelpers.cs +++ b/src/App/Utilities/AppHelpers.cs @@ -458,5 +458,17 @@ namespace Bit.App.Utilities var storageService = ServiceContainer.Resolve("storageService"); await storageService.RemoveAsync(Constants.InvalidUnlockAttempts); } + + public static async Task IsVaultTimeoutImmediateAsync() + { + var storageService = ServiceContainer.Resolve("storageService"); + + var vaultTimeoutMinutes = await storageService.GetAsync(Constants.VaultTimeoutKey); + if (vaultTimeoutMinutes.GetValueOrDefault(-1) == 0) + { + return true; + } + return false; + } } }