protected override async void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); #if !DEBUG App.Tracker.Send(HitBuilder.CreateScreenView("Send").Build()); #endif PersistentDisplay.ActivatePersistentDisplay(); if (Frame.BackStackDepth > 0) { if (Frame.BackStack[Frame.BackStackDepth - 1].SourcePageType == typeof(MainSend)) { Frame.BackStack.RemoveAt(Frame.BackStackDepth - 1); } } var rs = MainPage.Current.GetSelectedSystem(); bool isDestinationAndroid; IRomePackageManager packageManager; if (rs is NormalizedRemoteSystem) { isDestinationAndroid = true; packageManager = MainPage.Current.AndroidPackageManager; var nrs = rs as NormalizedRemoteSystem; if ((!string.IsNullOrEmpty(nrs.AppVersion)) && (Version.TryParse(nrs.AppVersion, out Version remoteAppVersion)) && (remoteAppVersion < new Version("2.1.4"))) { MainPage.Current.AndroidPackageManager.Mode = AndroidRomePackageManager.AndroidPackageManagerMode.MessageCarrier; } else { PackageManagerHelper.InitAndroidPackageManagerMode(); } } else { isDestinationAndroid = false; packageManager = MainPage.Current.PackageManager; } string deviceName = (new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation()).FriendlyName; var mode = e.Parameter.ToString(); if ((mode == "file") && (!(await IsAllowedToSendAsync()))) { ViewModel.SendStatus = ""; await TrialHelper.AskForUpgradeWhileSending(); if (!(await IsAllowedToSendAsync())) { #if !DEBUG App.Tracker.Send(HitBuilder.CreateCustomEvent("Send", "AskedToUpgrade", "Rejected").Build()); #endif PersistentDisplay.ReleasePersistentDisplay(); Frame.GoBack(); return; } #if !DEBUG App.Tracker.Send(HitBuilder.CreateCustomEvent("Send", "AskedToUpgrade", "Accepted").Build()); #endif ViewModel.SendStatus = "Connecting..."; } bool succeed = true; FileTransferResult fileTransferResult = FileTransferResult.Successful; try { if (mode == "launchUri") { await LaunchUri(rs); } else if (mode == "text") { string text = SendDataTemporaryStorage.Text; bool fastSendResult = await TrySendFastClipboard(text, rs, deviceName); if (fastSendResult) { SendTextFinished(""); } else { ViewModel.ProgressPercentIndicatorVisibility = Visibility.Visible; RomeAppServiceConnectionStatus result = await Connect(rs); if (result != RomeAppServiceConnectionStatus.Success) { HideEverything(); succeed = false; string errorMessage; if ((result == RomeAppServiceConnectionStatus.RemoteSystemUnavailable) && (packageManager is AndroidRomePackageManager)) { errorMessage = "Can't connect to device. Open Roamit on your Android device and then try again."; } else { errorMessage = result.ToString(); } await(new MessageDialog(errorMessage, "Can't connect")).ShowAsync(); Frame.GoBack(); return; } ViewModel.UnlockNoticeVisibility = Visibility.Collapsed; await SendText(packageManager, deviceName, text); } } else if (mode == "file") { ViewModel.ProgressPercentIndicatorVisibility = Visibility.Visible; RomeAppServiceConnectionStatus result = await Connect(rs); if (result != RomeAppServiceConnectionStatus.Success) { HideEverything(); succeed = false; string errorMessage; if ((result == RomeAppServiceConnectionStatus.RemoteSystemUnavailable) && (packageManager is AndroidRomePackageManager)) { errorMessage = "Can't connect to device. Open Roamit on your Android device and then try again."; } else { errorMessage = result.ToString(); } await(new MessageDialog(errorMessage, "Can't connect")).ShowAsync(); Frame.GoBack(); return; } ViewModel.UnlockNoticeVisibility = Visibility.Collapsed; if (!isDestinationAndroid) { ViewModel.LeaveScreenOnNoticeVisibility = Visibility.Visible; } fileTransferResult = await SendFile(rs, packageManager, deviceName); if (fileTransferResult != FileTransferResult.Successful) { HideEverything(); succeed = false; Frame.GoBack(); return; } if (!isDestinationAndroid) { ViewModel.LeaveScreenOnNoticeVisibility = Visibility.Collapsed; } } else { succeed = false; await(new MessageDialog("MainSend::Invalid parameter.")).ShowAsync(); Frame.GoBack(); return; } } finally { PersistentDisplay.ReleasePersistentDisplay(); #if !DEBUG if (rs is NormalizedRemoteSystem) { App.Tracker.Send(HitBuilder.CreateCustomEvent("SendToAndroid", mode, succeed ? "Success" : ((mode == "file") ? fileTransferResult.ToString() : "Failed")).Build()); } else { App.Tracker.Send(HitBuilder.CreateCustomEvent("SendToWindows", mode, succeed ? "Success" : ((mode == "file") ? fileTransferResult.ToString() : "Failed")).Build()); } #endif sendingFile = false; } if (SendDataTemporaryStorage.IsSharingTarget) { if (App.ShareOperation == null) { #if !DEBUG App.Tracker.Send(HitBuilder.CreateCustomEvent("Send", "UriTarget").Build()); #endif await Task.Delay(TimeSpan.FromSeconds(1.5)); App.Current.Exit(); } else { #if !DEBUG App.Tracker.Send(HitBuilder.CreateCustomEvent("Send", "ShareTarget").Build()); #endif await Task.Delay(TimeSpan.FromSeconds(1.5)); App.ShareOperation.ReportCompleted(); } SendDataTemporaryStorage.IsSharingTarget = false; App.ShareOperation = null; } else { ViewModel.GoBackButtonVisibility = Visibility.Visible; GoBackButtonShowStoryboard.Begin(); if (succeed) { await AskForReviewIfNecessary(); } #if !DEBUG App.Tracker.Send(HitBuilder.CreateCustomEvent("Send", "WithinApp").Build()); #endif } }
public async Task <RomeAppServiceConnectionStatus> Connect(object _remoteSystem, bool keepAlive, Uri wakeUri) { var rs = _remoteSystem as RemoteSystem; if (rs == null) { throw new InvalidCastException(); } remoteSystem = rs; this.keepAlive = keepAlive; this.wakeUri = wakeUri; if (wakeUri != null) { if ((!rs.IsAvailableByProximity) && (rs.Kind.Value == RemoteSystemKinds.Phone.Value)) { //Wake device first var wakeResult = await LaunchUri(wakeUri, rs); if (wakeResult == RomeRemoteLaunchUriStatus.Success) { RemoteSystem rsNew = await RediscoverRemoteSystem(rs); System.Diagnostics.Debug.WriteLine(rsNew.IsAvailableByProximity); if (rsNew == null) { return(RomeAppServiceConnectionStatus.RemoteSystemUnavailable); } else { rs = rsNew; } } } else if (rs.Kind.Value != RemoteSystemKinds.Phone.Value) { await LaunchUri(wakeUri, rs).WithTimeout(ConnectLaunchUriTimeout); } } try { if (sendSemaphore.CurrentCount == 0) { sendSemaphore.Release(); } } catch { } if (appService != null) { CloseAppService(); await Task.Delay(300); } connectionRequest = new RemoteSystemConnectionRequest(rs); RomeAppServiceConnectionStatus finalResult = RomeAppServiceConnectionStatus.Unknown; foreach (var appServiceName in appServiceNames) { appService = new AppServiceConnection(appServiceName, appIdentifier, connectionRequest); var result = await appService.OpenRemoteAsync(); finalResult = result.ConvertToRomeAppServiceConnectionStatus(); if (finalResult != RomeAppServiceConnectionStatus.AppNotInstalled) { break; } } if (finalResult == RomeAppServiceConnectionStatus.AppNotInstalled) { await LaunchStoreForApp(_remoteSystem); } return(finalResult); }