mirror of
https://github.com/bitwarden/android.git
synced 2024-12-25 02:18:27 +03:00
update tasks and sync on app start
This commit is contained in:
parent
dc7b37c8f2
commit
6d51864873
7 changed files with 98 additions and 4 deletions
|
@ -1,6 +1,10 @@
|
||||||
using System;
|
using System;
|
||||||
using Android.App;
|
using Android.App;
|
||||||
using Android.Content;
|
using Android.Content;
|
||||||
|
using Bit.App.Abstractions;
|
||||||
|
using Bit.App.Utilities;
|
||||||
|
using Bit.Core.Abstractions;
|
||||||
|
using Bit.Core.Utilities;
|
||||||
|
|
||||||
namespace Bit.Droid.Receivers
|
namespace Bit.Droid.Receivers
|
||||||
{
|
{
|
||||||
|
@ -8,9 +12,11 @@ namespace Bit.Droid.Receivers
|
||||||
[IntentFilter(new[] { Intent.ActionMyPackageReplaced })]
|
[IntentFilter(new[] { Intent.ActionMyPackageReplaced })]
|
||||||
public class PackageReplacedReceiver : BroadcastReceiver
|
public class PackageReplacedReceiver : BroadcastReceiver
|
||||||
{
|
{
|
||||||
public override void OnReceive(Context context, Intent intent)
|
public override async void OnReceive(Context context, Intent intent)
|
||||||
{
|
{
|
||||||
System.Diagnostics.Debug.WriteLine("PackageReplacedReceiver OnReceive");
|
var storageService = ServiceContainer.Resolve<IStorageService>("storageService");
|
||||||
|
await AppHelpers.PerformUpdateTasksAsync(ServiceContainer.Resolve<ISyncService>("syncService"),
|
||||||
|
ServiceContainer.Resolve<IDeviceActionService>("deviceActionService"), storageService);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -293,6 +293,12 @@ namespace Bit.Droid.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string GetBuildNumber()
|
||||||
|
{
|
||||||
|
return Application.Context.ApplicationContext.PackageManager.GetPackageInfo(
|
||||||
|
Application.Context.PackageName, 0).VersionCode.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
public bool SupportsFaceId()
|
public bool SupportsFaceId()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -486,6 +492,26 @@ namespace Bit.Droid.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool AutofillAccessibilityServiceRunning()
|
||||||
|
{
|
||||||
|
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
||||||
|
var manager = activity.GetSystemService(Context.ActivityService) as ActivityManager;
|
||||||
|
var services = manager.GetRunningServices(int.MaxValue);
|
||||||
|
return services.Any(s => s.Process.ToLowerInvariant().Contains("bitwarden") &&
|
||||||
|
s.Service.ClassName.ToLowerInvariant().Contains("autofill"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool AutofillServiceEnabled()
|
||||||
|
{
|
||||||
|
if(Build.VERSION.SdkInt < BuildVersionCodes.O)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var activity = (MainActivity)CrossCurrentActivity.Current.Activity;
|
||||||
|
var afm = (AutofillManager)activity.GetSystemService(Java.Lang.Class.FromType(typeof(AutofillManager)));
|
||||||
|
return afm.IsEnabled && afm.HasEnabledAutofillServices;
|
||||||
|
}
|
||||||
|
|
||||||
private bool DeleteDir(Java.IO.File dir)
|
private bool DeleteDir(Java.IO.File dir)
|
||||||
{
|
{
|
||||||
if(dir != null && dir.IsDirectory)
|
if(dir != null && dir.IsDirectory)
|
||||||
|
|
|
@ -28,5 +28,8 @@ namespace Bit.App.Abstractions
|
||||||
void Autofill(CipherView cipher);
|
void Autofill(CipherView cipher);
|
||||||
void CloseAutofill();
|
void CloseAutofill();
|
||||||
void Background();
|
void Background();
|
||||||
|
bool AutofillAccessibilityServiceRunning();
|
||||||
|
bool AutofillServiceEnabled();
|
||||||
|
string GetBuildNumber();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,6 +106,13 @@ namespace Bit.App
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
else if(message.Command == "resumed")
|
||||||
|
{
|
||||||
|
if(Device.RuntimePlatform == Device.iOS)
|
||||||
|
{
|
||||||
|
SyncIfNeeded();
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,6 +121,15 @@ namespace Bit.App
|
||||||
System.Diagnostics.Debug.WriteLine("XF App: OnStart");
|
System.Diagnostics.Debug.WriteLine("XF App: OnStart");
|
||||||
await ClearCacheIfNeededAsync();
|
await ClearCacheIfNeededAsync();
|
||||||
Prime();
|
Prime();
|
||||||
|
if(string.IsNullOrWhiteSpace(_appOptions.Uri))
|
||||||
|
{
|
||||||
|
var updated = await AppHelpers.PerformUpdateTasksAsync(_syncService, _deviceActionService,
|
||||||
|
_storageService);
|
||||||
|
if(!updated)
|
||||||
|
{
|
||||||
|
SyncIfNeeded();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async override void OnSleep()
|
protected async override void OnSleep()
|
||||||
|
@ -129,6 +145,10 @@ namespace Bit.App
|
||||||
_messagingService.Send("cancelLockTimer");
|
_messagingService.Send("cancelLockTimer");
|
||||||
await ClearCacheIfNeededAsync();
|
await ClearCacheIfNeededAsync();
|
||||||
Prime();
|
Prime();
|
||||||
|
if(Device.RuntimePlatform == Device.Android)
|
||||||
|
{
|
||||||
|
SyncIfNeeded();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetCulture()
|
private void SetCulture()
|
||||||
|
@ -264,5 +284,17 @@ namespace Bit.App
|
||||||
var mainPageTask = SetMainPageAsync();
|
var mainPageTask = SetMainPageAsync();
|
||||||
ServiceContainer.Resolve<MobilePlatformUtilsService>("platformUtilsService").Init();
|
ServiceContainer.Resolve<MobilePlatformUtilsService>("platformUtilsService").Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SyncIfNeeded()
|
||||||
|
{
|
||||||
|
Task.Run(async () =>
|
||||||
|
{
|
||||||
|
var lastSync = await _syncService.GetLastSyncAsync();
|
||||||
|
if(DateTime.UtcNow - lastSync > TimeSpan.FromMinutes(30))
|
||||||
|
{
|
||||||
|
await _syncService.FullSyncAsync(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,8 @@ namespace Bit.App.Services
|
||||||
Constants.AccessibilityAutofillPersistNotificationKey,
|
Constants.AccessibilityAutofillPersistNotificationKey,
|
||||||
Constants.LastActiveKey,
|
Constants.LastActiveKey,
|
||||||
Constants.PushInitialPromptShownKey,
|
Constants.PushInitialPromptShownKey,
|
||||||
Constants.LastFileCacheClearKey
|
Constants.LastFileCacheClearKey,
|
||||||
|
Constants.LastBuildKey
|
||||||
};
|
};
|
||||||
|
|
||||||
public MobileStorageService(
|
public MobileStorageService(
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
using Bit.App.Pages;
|
using Bit.App.Abstractions;
|
||||||
|
using Bit.App.Pages;
|
||||||
using Bit.App.Resources;
|
using Bit.App.Resources;
|
||||||
|
using Bit.Core;
|
||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using Bit.Core.Models.View;
|
using Bit.Core.Models.View;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
|
@ -108,5 +110,28 @@ namespace Bit.App.Utilities
|
||||||
}
|
}
|
||||||
return selection;
|
return selection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async Task<bool> PerformUpdateTasksAsync(ISyncService syncService,
|
||||||
|
IDeviceActionService deviceActionService, IStorageService storageService)
|
||||||
|
{
|
||||||
|
var lastSync = await syncService.GetLastSyncAsync();
|
||||||
|
var currentBuild = deviceActionService.GetBuildNumber();
|
||||||
|
var lastBuild = await storageService.GetAsync<string>(Constants.LastBuildKey);
|
||||||
|
if(lastBuild == null)
|
||||||
|
{
|
||||||
|
// Installed
|
||||||
|
}
|
||||||
|
else if(lastBuild != currentBuild)
|
||||||
|
{
|
||||||
|
// Updated
|
||||||
|
var tasks = Task.Run(() => syncService.FullSyncAsync(true));
|
||||||
|
}
|
||||||
|
if(lastBuild != currentBuild)
|
||||||
|
{
|
||||||
|
await storageService.SaveAsync(Constants.LastBuildKey, currentBuild);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
public static string ThemeKey = "theme";
|
public static string ThemeKey = "theme";
|
||||||
public static string ClearClipboardKey = "clearClipboard";
|
public static string ClearClipboardKey = "clearClipboard";
|
||||||
public static string LastClipboardValueKey = "lastClipboardValue";
|
public static string LastClipboardValueKey = "lastClipboardValue";
|
||||||
|
public static string LastBuildKey = "lastBuild";
|
||||||
public const int SelectFileRequestCode = 42;
|
public const int SelectFileRequestCode = 42;
|
||||||
public const int SelectFilePermissionRequestCode = 43;
|
public const int SelectFilePermissionRequestCode = 43;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue