Ejemplo n.º 1
0
        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);
                }
            }

            bool preserveFolderStructure = (Frame.BackStackDepth <= 0 || Frame.BackStack[Frame.BackStackDepth - 1].SourcePageType != typeof(PicturePicker));

            var rs = MainPage.Current.GetSelectedSystem();

            bool isDestinationAndroid;

            IRomePackageManager packageManager;
            if (rs is NormalizedRemoteSystem)
            {
                isDestinationAndroid = true;

                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;
            }

            string deviceName;

            var localDeviceInfo = NetworkInformation.GetHostNames().FirstOrDefault(name => name.DisplayName.EndsWith(".local"));
            if (localDeviceInfo != null)
            {
                deviceName = localDeviceInfo.DisplayName.Substring(0, localDeviceInfo.DisplayName.Length - ".local".Length);
            }
            else
            {
                deviceName = (new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation()).FriendlyName;
            }

            var mode = e.Parameter.ToString();

            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
                    {
                        SendTextFinished("Send failed. Text is too long.");
#if !DEBUG
                        App.Tracker.Send(HitBuilder.CreateCustomEvent("SendTextFailed", "TooLong").Build());
#endif
                        //ViewModel.ProgressPercentIndicatorVisibility = Visibility.Visible;
                        //var result = await Connect(rs);
                        //var connectResult = result.Item1;
                        //packageManager = result.Item2;

                        //if (connectResult != RomeAppServiceConnectionStatus.Success)
                        //{
                        //    HideEverything();

                        //    succeed = false;
                        //    string errorMessage;

                        //    if ((connectResult == RomeAppServiceConnectionStatus.RemoteSystemUnavailable) && (packageManager is AndroidRomePackageManager))
                        //    {
                        //        errorMessage = "Can't connect to device. Open Roamit on your Android device and then try again.";
                        //    }
                        //    else
                        //    {
                        //        errorMessage = connectResult.ToString();
                        //    }

                        //    Frame.Navigate(typeof(MainSendFailed), JsonConvert.SerializeObject(new SendFailedViewModel
                        //    {
                        //        ErrorTitle = "Can't connect",
                        //        ErrorDescription = errorMessage,
                        //    }));
                        //    return;
                        //}

                        //ViewModel.UnlockNoticeVisibility = Visibility.Collapsed;

                        //await SendText(packageManager, deviceName, text);
                    }
                }
                else if (mode == "file")
                {
                    ViewModel.ProgressPercentIndicatorVisibility = Visibility.Visible;
                    var result = await Connect(rs, openReceiveFileDialogIfOverCloud : true);

                    var connectResult = result.Item1;
                    packageManager = result.Item2;


                    if (connectResult != RomeAppServiceConnectionStatus.Success)
                    {
                        HideEverything();

                        succeed = false;
                        string errorMessage;

                        if ((connectResult == RomeAppServiceConnectionStatus.RemoteSystemUnavailable) && (packageManager is AndroidRomePackageManager))
                        {
                            errorMessage = "Can't connect to device. Open Roamit on your Android device and then try again.";
                        }
                        else
                        {
                            errorMessage = connectResult.ToString();
                        }

                        Frame.Navigate(typeof(MainSendFailed), JsonConvert.SerializeObject(new SendFailedViewModel
                        {
                            ErrorTitle       = "Can't connect",
                            ErrorDescription = errorMessage,
                        }));
                        return;
                    }

                    ViewModel.UnlockNoticeVisibility = Visibility.Collapsed;
                    if (!isDestinationAndroid)
                    {
                        ViewModel.LeaveScreenOnNoticeVisibility = Visibility.Visible;
                    }

                    fileTransferResult = await SendFile(rs, packageManager, deviceName, preserveFolderStructure);

                    if (fileTransferResult != FileTransferResult.Successful)
                    {
                        succeed = false;
                        return;
                    }

                    if (!isDestinationAndroid)
                    {
                        ViewModel.LeaveScreenOnNoticeVisibility = Visibility.Collapsed;
                    }
                }
                else
                {
                    succeed = false;
                    Frame.Navigate(typeof(MainSendFailed), JsonConvert.SerializeObject(new SendFailedViewModel
                    {
                        ErrorTitle       = "Invalid parameter",
                        ErrorDescription = "[MainSend]",
                    }));
                    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
            }
        }
Ejemplo n.º 2
0
        private async Task <FileTransferResult> SendFile(object rs, IRomePackageManager packageManager, string deviceName, bool preserveFolderStructure)
        {
            string sendingText = ((SendDataTemporaryStorage.Files.Count == 1) && (SendDataTemporaryStorage.Files[0] is StorageFile)) ? "Sending file..." : "Sending files...";

            string             message = "";
            FileTransferResult result  = FileTransferResult.Successful;

            if (await DownloadNecessaryFiles() == false)
            {
                return(FileTransferResult.Cancelled);
            }

            sendingFile = true;

            ViewModel.SendStatus = "Preparing...";
            using (FileSender2 fs = new FileSender2(rs,
                                                    new QuickShare.UWP.WebServerGenerator(),
                                                    packageManager,
                                                    FindMyIPAddresses(),
                                                    deviceName))
            {
                ViewModel.ProgressMaximum = 1;

                fs.FileTransferProgress += async(ss, ee) =>
                {
                    if (ee.State == FileTransferState.Error)
                    {
                        result  = FileTransferResult.FailedOnSend;
                        message = result.ToString(); // TODO
                    }
                    else if (ee.State == FileTransferState.Reconnecting)
                    {
                        ViewModel.SendStatus = "Reconnecting...";
                        ViewModel.ProgressIsIndeterminate = true;
                    }
                    else if (ee.State == FileTransferState.Reconnected)
                    {
                        ViewModel.SendStatus = "Waiting for response...";
                    }
                    else
                    {
                        await DispatcherEx.RunOnCoreDispatcherIfPossible(() =>
                        {
                            ViewModel.SendStatus              = sendingText;
                            ViewModel.ProgressMaximum         = 1.0;
                            ViewModel.ProgressValue           = ee.Progress;
                            ViewModel.ProgressIsIndeterminate = false;

                            if (ee.TotalTransferredBytes > 0)
                            {
                                ViewModel.ProgressCaption = StringFunctions.GetSizeString(ee.TotalTransferredBytes);
                            }
                        }, false);
                    }
                };

                if (SendDataTemporaryStorage.Files.Count == 0)
                {
                    ViewModel.SendStatus = "No files.";
                    ViewModel.ProgressIsIndeterminate = false;
                    return(FileTransferResult.NoFiles);
                }

                await Task.Run(async() =>
                {
                    result = await fs.Send(preserveFolderStructure ? await GetFiles(SendDataTemporaryStorage.Files) : await GetFilesWithoutFolderStructure(SendDataTemporaryStorage.Files),
                                           sendFileCancellationTokenSource.Token);
                });

                ViewModel.ProgressValue = ViewModel.ProgressMaximum;
            }

            sendingFile = false;

            if (result != FileTransferResult.Successful)
            {
                HideEverything();

                if (result != FileTransferResult.Cancelled)
                {
                    string title = "Send failed.";
                    string text  = message;
                    if (result == FileTransferResult.FailedOnHandshake)
                    {
                        title = "Couldn't reach remote device.";
                        text  = "Make sure both devices are connected to the same Wi-Fi or LAN network.";
                    }

                    Frame.Navigate(typeof(MainSendFailed), JsonConvert.SerializeObject(new SendFailedViewModel
                    {
                        ErrorTitle       = title,
                        ErrorDescription = text,
                    }));
                }
            }
            else
            {
                await SendFinishService(packageManager);

                ViewModel.SendStatus = "Done.";
            }

            return(result);
        }
 public FileTransferResultInfo(FileTransferResult in_state, byte in_file_id, string in_full_path)
 {
     State    = in_state;
     FileID   = in_file_id;
     FullPath = in_full_path;
 }
 public FileTransferResultInfo(FileTransferResult in_state)
 {
     State = in_state;
 }
Ejemplo n.º 5
0
        private async Task SendFiles(string[] files)
        {
            if (TrialHelper.UserTrialStatus == QuickShare.Common.Service.UpgradeDetails.VersionStatus.TrialVersion)
            {
                double totalSize = 0;
                foreach (var item in files)
                {
                    var info = new System.IO.FileInfo(item);
                    totalSize += info.Length;
                }
                totalSize /= 1024.0 * 1024.0;

                if (totalSize > Constants.MaxSizeForTrialVersion)
                {
                    var intent = new Intent(this, typeof(MessageShowActivity));
                    intent.PutExtra("message", "trialNotice");
                    StartActivity(intent);
                    Finish();
                    return;
                }
            }

            sendStatus.Text = "Connecting...";

            var result = await Common.PackageManager.Connect(Common.GetCurrentRemoteSystem(), false);

            if (result != QuickShare.Common.Rome.RomeAppServiceConnectionStatus.Success)
            {
                Analytics.TrackEvent("SendToWindows", "file", "Failed");
                sendStatus.Text = $"Connect failed. ({result.ToString()})";
                return;
            }

            //Fix Rome Android bug (receiver app service closes after 5 seconds in first connection)
            Common.PackageManager.CloseAppService();
            result = await Common.PackageManager.Connect(Common.GetCurrentRemoteSystem(), false);

            if (result != QuickShare.Common.Rome.RomeAppServiceConnectionStatus.Success)
            {
                Analytics.TrackEvent("SendToWindows", "file", "Failed");
                sendStatus.Text = $"Connect failed. ({result.ToString()})";
                return;
            }

            string sendingText = (files.Length == 1) ? "Sending file..." : "Sending files...";

            sendStatus.Text = "Preparing...";

            string             message        = "";
            FileTransferResult transferResult = FileTransferResult.Successful;

            using (FileSender fs = new FileSender(Common.GetCurrentRemoteSystem(),
                                                  new WebServerComponent.WebServerGenerator(),
                                                  Common.PackageManager,
                                                  FindMyIPAddresses(),
                                                  CrossDeviceInfo.Current.Model))
            {
                sendProgress.Max         = 1;
                fs.FileTransferProgress += (ss, ee) =>
                {
                    if (ee.State == FileTransferState.Error)
                    {
                        transferResult = FileTransferResult.FailedOnSend;
                        message        = ee.Message;
                    }
                    else
                    {
                        RunOnUiThread(() =>
                        {
                            sendStatus.Text = sendingText;

                            SetProgressBarValue((int)ee.CurrentPart, (int)ee.Total + 1);
                        });
                    }
                };

                if (files.Length == 0)
                {
                    sendStatus.Text = "No files.";
                    //ViewModel.ProgressIsIndeterminate = false;
                    return;
                }
                else if (files.Length == 1)
                {
                    await Task.Run(async() =>
                    {
                        sendingFile    = true;
                        transferResult = await fs.SendFile(sendFileCancellationTokenSource.Token, new PCLStorage.FileSystemFile(files[0]));
                        sendingFile    = false;
                    });
                }
                else
                {
                    await Task.Run(async() =>
                    {
                        sendingFile    = true;
                        transferResult = await fs.SendFiles(sendFileCancellationTokenSource.Token,
                                                            from x in files
                                                            select new PCLStorage.FileSystemFile(x), DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "\\");
                        sendingFile = false;
                    });
                }

                sendProgress.Progress = sendProgress.Max;
            }

            Dictionary <string, object> vs = new Dictionary <string, object>
            {
                { "Receiver", "System" },
                { "FinishService", "FinishService" },
            };
            await Common.PackageManager.Send(vs);

            Common.PackageManager.CloseAppService();

            SetProgressBarValueToMax();

            if (transferResult != FileTransferResult.Successful)
            {
                Analytics.TrackEvent("SendToWindows", "file", transferResult.ToString());

                if (transferResult != FileTransferResult.Cancelled)
                {
                    sendStatus.Text = "Failed.";
                    System.Diagnostics.Debug.WriteLine("Send failed.\r\n\r\n" + message);

                    if (transferResult == FileTransferResult.FailedOnHandshake)
                    {
                        message = "Couldn't reach remote device.\r\n\r\n" +
                                  "Make sure both devices are connected to the same Wi-Fi or LAN network.";
                    }

                    AlertDialog.Builder alert = new AlertDialog.Builder(this);
                    alert.SetTitle(message);
                    alert.SetPositiveButton("OK", (senderAlert, args) => { });
                    RunOnUiThread(() =>
                    {
                        alert.Show();
                    });
                }
            }
            else
            {
                sendStatus.Text = "Finished.";
                Analytics.TrackEvent("SendToWindows", "file", "Success");
            }
        }
Ejemplo n.º 6
0
        private async Task <FileTransferResult> SendFile(object rs, IRomePackageManager packageManager, string deviceName)
        {
            string sendingText = ((SendDataTemporaryStorage.Files.Count == 1) && (SendDataTemporaryStorage.Files[0] is StorageFile)) ? "Sending file..." : "Sending files...";

            ViewModel.SendStatus = "Preparing...";

            string             message = "";
            FileTransferResult result  = FileTransferResult.Successful;

            sendingFile = true;

            using (FileSender fs = new FileSender(rs,
                                                  new QuickShare.UWP.WebServerGenerator(),
                                                  packageManager,
                                                  FindMyIPAddresses(),
                                                  deviceName))
            {
                ViewModel.ProgressMaximum = 1;
                fs.FileTransferProgress  += async(ss, ee) =>
                {
                    if (ee.State == FileTransferState.Error)
                    {
                        result  = FileTransferResult.FailedOnSend;
                        message = ee.Message;
                    }
                    else
                    {
                        await DispatcherEx.RunOnCoreDispatcherIfPossible(() =>
                        {
                            ViewModel.SendStatus              = sendingText;
                            ViewModel.ProgressMaximum         = (int)ee.Total + 1;
                            ViewModel.ProgressValue           = (int)ee.CurrentPart;
                            ViewModel.ProgressIsIndeterminate = false;
                        }, false);
                    }
                };

                if (SendDataTemporaryStorage.Files.Count == 0)
                {
                    ViewModel.SendStatus = "No files.";
                    ViewModel.ProgressIsIndeterminate = false;
                    return(FileTransferResult.NoFiles);
                }
                else if ((SendDataTemporaryStorage.Files.Count == 1) && (SendDataTemporaryStorage.Files[0] is StorageFile))
                {
                    await Task.Run(async() =>
                    {
                        result = await fs.SendFile(sendFileCancellationTokenSource.Token, new PCLStorage.WinRTFile(SendDataTemporaryStorage.Files[0] as StorageFile));
                    });
                }
                else if ((SendDataTemporaryStorage.Files.Count == 1) && (SendDataTemporaryStorage.Files[0] is StorageFolder))
                {
                    var folder = SendDataTemporaryStorage.Files[0] as StorageFolder;

                    await Task.Run(async() =>
                    {
                        result = await fs.SendQueue(sendFileCancellationTokenSource.Token, await GetFilesOfFolder(folder), folder.DisplayName);
                    });
                }
                else
                {
                    await Task.Run(async() =>
                    {
                        result = await fs.SendFiles(sendFileCancellationTokenSource.Token,
                                                    from x in SendDataTemporaryStorage.Files
                                                    where x is StorageFile
                                                    select new PCLStorage.WinRTFile(x as StorageFile), DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "\\");
                    });
                }

                ViewModel.ProgressValue = ViewModel.ProgressMaximum;
            }

            sendingFile = false;

            if (result != FileTransferResult.Successful)
            {
                HideEverything();

                if (result != FileTransferResult.Cancelled)
                {
                    string title = "Send failed.";
                    string text  = message;
                    if (result == FileTransferResult.FailedOnHandshake)
                    {
                        title = "Couldn't reach remote device.";
                        text  = "Make sure both devices are connected to the same Wi-Fi or LAN network.";
                    }

                    var dlg = new MessageDialog(text, title);
                    await dlg.ShowAsync();
                }
            }
            else
            {
                await SendFinishService(packageManager);

                ViewModel.SendStatus = "Finished.";
            }

            return(result);
        }
Ejemplo n.º 7
0
        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
            }
        }