diff --git a/src/Android/Android.csproj b/src/Android/Android.csproj index d1226b869..738908b25 100644 --- a/src/Android/Android.csproj +++ b/src/Android/Android.csproj @@ -139,6 +139,7 @@ + diff --git a/src/Android/MainActivity.cs b/src/Android/MainActivity.cs index bc5fecb76..70f24bd67 100644 --- a/src/Android/MainActivity.cs +++ b/src/Android/MainActivity.cs @@ -30,8 +30,11 @@ namespace Bit.Droid private IDeviceActionService _deviceActionService; private IMessagingService _messagingService; private IBroadcasterService _broadcasterService; + private IUserService _userService; + private IAppIdService _appIdService; private PendingIntent _lockAlarmPendingIntent; private AppOptions _appOptions; + private const string HockeyAppId = "d3834185b4a643479047b86c65293d42"; private Java.Util.Regex.Pattern _otpPattern = Java.Util.Regex.Pattern.Compile("^.*?([cbdefghijklnrtuv]{32,64})$"); @@ -47,6 +50,8 @@ namespace Bit.Droid _deviceActionService = ServiceContainer.Resolve("deviceActionService"); _messagingService = ServiceContainer.Resolve("messagingService"); _broadcasterService = ServiceContainer.Resolve("broadcasterService"); + _userService = ServiceContainer.Resolve("userService"); + _appIdService = ServiceContainer.Resolve("appIdService"); TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; @@ -57,6 +62,12 @@ namespace Bit.Droid Window.AddFlags(Android.Views.WindowManagerFlags.Secure); } +#if !FDROID + var hockeyAppListener = new HockeyAppCrashManagerListener(_appIdService, _userService); + var hockeyAppTask = hockeyAppListener.InitAsync(); + HockeyApp.Android.CrashManager.Register(this, HockeyAppId, hockeyAppListener); +#endif + Xamarin.Essentials.Platform.Init(this, savedInstanceState); Xamarin.Forms.Forms.Init(this, savedInstanceState); _appOptions = GetOptions(); diff --git a/src/Android/Utilities/HockeyAppCrashManagerListener.cs b/src/Android/Utilities/HockeyAppCrashManagerListener.cs new file mode 100644 index 000000000..0fdcc4408 --- /dev/null +++ b/src/Android/Utilities/HockeyAppCrashManagerListener.cs @@ -0,0 +1,65 @@ +#if !FDROID +using HockeyApp.Android; +using Bit.App.Abstractions; +using Newtonsoft.Json; +using Android.Runtime; +using Bit.Core.Abstractions; +using System.Threading.Tasks; + +namespace Bit.Droid.Utilities +{ + public class HockeyAppCrashManagerListener : CrashManagerListener + { + private readonly IAppIdService _appIdService; + private readonly IUserService _userService; + + private string _userId; + private string _appId; + + public HockeyAppCrashManagerListener() + { } + + public HockeyAppCrashManagerListener(System.IntPtr javaRef, JniHandleOwnership transfer) + : base(javaRef, transfer) + { } + + public HockeyAppCrashManagerListener( + IAppIdService appIdService, + IUserService userService) + { + _appIdService = appIdService; + _userService = userService; + } + + public async Task InitAsync() + { + _userId = await _userService.GetUserIdAsync(); + _appId = await _appIdService.GetAppIdAsync(); + } + + public override string Description + { + get + { + if(_userId != null && _appId != null) + { + return JsonConvert.SerializeObject(new + { + AppId = _appId, + UserId = _userId + }, Formatting.Indented); + } + else + { + return null; + } + } + } + + public override bool ShouldAutoUploadCrashes() + { + return true; + } + } +} +#endif diff --git a/src/Android/ci-build-apks.ps1 b/src/Android/ci-build-apks.ps1 index 0cdc942e6..bfd871d57 100644 --- a/src/Android/ci-build-apks.ps1 +++ b/src/Android/ci-build-apks.ps1 @@ -56,16 +56,16 @@ $firebaseNode.ParentNode.RemoveChild($firebaseNode); $xml.Save($androidPath); -#echo "##### Uninstall from App.csproj" -# -#$xml=New-Object XML; -#$xml.Load($appPath); -# -#$hockeyNode=$xml.SelectSingleNode("/Project/ItemGroup/PackageReference[@Include='HockeySDK.Xamarin']"); -#$hockeyNode.ParentNode.RemoveChild($hockeyNode); -# -#$xml.Save($appPath); -# +echo "##### Uninstall from App.csproj" + +$xml=New-Object XML; +$xml.Load($appPath); + +$hockeyNode=$xml.SelectSingleNode("/Project/ItemGroup/PackageReference[@Include='HockeySDK.Xamarin']"); +$hockeyNode.ParentNode.RemoveChild($hockeyNode); + +$xml.Save($appPath); + echo "##### Restore NuGet" $nugetPath = $($rootPath + "\nuget.exe"); diff --git a/src/App/App.csproj b/src/App/App.csproj index f2d2ffb83..212cd358b 100644 --- a/src/App/App.csproj +++ b/src/App/App.csproj @@ -13,10 +13,11 @@ + - +