diff --git a/src/Android/Android.csproj b/src/Android/Android.csproj
index 8a02b77a7..b993852c2 100644
--- a/src/Android/Android.csproj
+++ b/src/Android/Android.csproj
@@ -348,6 +348,7 @@
+
diff --git a/src/Android/PackageReplacedReceiver.cs b/src/Android/PackageReplacedReceiver.cs
new file mode 100644
index 000000000..9620c3124
--- /dev/null
+++ b/src/Android/PackageReplacedReceiver.cs
@@ -0,0 +1,22 @@
+using Android.App;
+using Android.Content;
+using Bit.App.Abstractions;
+using Bit.App.Utilities;
+using Plugin.Settings.Abstractions;
+using System.Diagnostics;
+using XLabs.Ioc;
+
+namespace Bit.Android
+{
+ [BroadcastReceiver(Name = "com.x8bit.bitwarden.PackageReplacedReceiver", Exported = true)]
+ [IntentFilter(new[] { Intent.ActionMyPackageReplaced })]
+ public class PackageReplacedReceiver : BroadcastReceiver
+ {
+ public override void OnReceive(Context context, Intent intent)
+ {
+ Debug.WriteLine("App updated!");
+ Helpers.PerformUpdateTasks(Resolver.Resolve(), Resolver.Resolve(),
+ Resolver.Resolve());
+ }
+ }
+}
diff --git a/src/Android/Services/DeviceActionService.cs b/src/Android/Services/DeviceActionService.cs
index 5e3501dcb..bc2232e92 100644
--- a/src/Android/Services/DeviceActionService.cs
+++ b/src/Android/Services/DeviceActionService.cs
@@ -95,7 +95,7 @@ namespace Bit.Android.Services
var pm = CrossCurrentActivity.Current.Activity.PackageManager;
var intent = new Intent(Intent.ActionView);
intent.SetType(mimeType);
- var activities = pm.QueryIntentActivities(intent, global::Android.Content.PM.PackageInfoFlags.MatchDefaultOnly);
+ var activities = pm.QueryIntentActivities(intent, PackageInfoFlags.MatchDefaultOnly);
return (activities?.Count ?? 0) > 0;
}
diff --git a/src/App/App.cs b/src/App/App.cs
index 1adfc1fbb..93c3dd651 100644
--- a/src/App/App.cs
+++ b/src/App/App.cs
@@ -13,13 +13,12 @@ using Acr.UserDialogs;
using XLabs.Ioc;
using System.Reflection;
using Bit.App.Resources;
+using Bit.App.Utilities;
namespace Bit.App
{
public class App : Application
{
- private const string LastBuildKey = "LastBuild";
-
private string _uri;
private readonly IDatabaseService _databaseService;
private readonly IConnectivity _connectivity;
@@ -103,13 +102,7 @@ namespace Bit.App
if(string.IsNullOrWhiteSpace(_uri))
{
- var lastBuild = _settings.GetValueOrDefault(LastBuildKey);
- if(Utilities.Helpers.InDebugMode() || lastBuild == null || lastBuild != _appInfoService.Build)
- {
- _settings.AddOrUpdateValue(LastBuildKey, _appInfoService.Build);
- _databaseService.CreateTables();
- }
-
+ Helpers.PerformUpdateTasks(_settings, _appInfoService, _databaseService);
await Task.Run(() => FullSyncAsync()).ConfigureAwait(false);
}
diff --git a/src/App/Constants.cs b/src/App/Constants.cs
index 293c22a6e..56021bfd9 100644
--- a/src/App/Constants.cs
+++ b/src/App/Constants.cs
@@ -33,6 +33,7 @@
public const string Locked = "other:locked";
public const string LastLoginEmail = "other:lastLoginEmail";
public const string LastSync = "other:lastSync";
+ public const string LastBuildKey = "LastBuild";
public const int SelectFileRequestCode = 42;
public const int SelectFilePermissionRequestCode = 43;
diff --git a/src/App/Utilities/Helpers.cs b/src/App/Utilities/Helpers.cs
index 3db1b2c70..4246f8bee 100644
--- a/src/App/Utilities/Helpers.cs
+++ b/src/App/Utilities/Helpers.cs
@@ -1,4 +1,6 @@
-using System;
+using Bit.App.Abstractions;
+using Plugin.Settings.Abstractions;
+using System;
using Xamarin.Forms;
namespace Bit.App.Utilities
@@ -38,5 +40,19 @@ namespace Bit.App.Utilities
return false;
#endif
}
+
+ public static bool PerformUpdateTasks(ISettings settings, IAppInfoService appInfoService,
+ IDatabaseService databaseService)
+ {
+ var lastBuild = settings.GetValueOrDefault(Constants.LastBuildKey);
+ if(InDebugMode() || lastBuild == null || lastBuild != appInfoService.Build)
+ {
+ settings.AddOrUpdateValue(Constants.LastBuildKey, appInfoService.Build);
+ databaseService.CreateTables();
+ return true;
+ }
+
+ return false;
+ }
}
}