/// <summary>
        /// Performs vibration animation
        /// </summary>
        /// <returns>Returns an instance of <see cref="OperationResult"/> that represents the outcome of the animation
        /// and stores a <c>finalValue</c> representing the completed state of the animation.</returns>
        public override Task <OperationResult <double> > PerformAnimation()
        {
            AnimationTaskCompletionSource = new TaskCompletionSource <OperationResult <double> >();

            _repeatCount = 0;

            Animation.Commit(Control, AnimationId, length: (uint)GetVibrateDuration(), finished: (finalValue, wasCancelled) =>
            {
                if (_repeatCount == RepeatCount)
                {
                    Control.TranslationX = 0;
                    AnimationTaskCompletionSource.SetResult(OperationResult <double> .AsSuccess(finalValue));
                }
                else
                {
                    Control.TranslationX = -GetVibrateXChange();
                }

                if (wasCancelled)
                {
                    Control.TranslationX = 0;
                    AnimationTaskCompletionSource.SetResult(OperationResult <double> .AsCancel());
                }
            }, repeat: () => ++ _repeatCount < RepeatCount);

            return(AnimationTaskCompletionSource.Task);
        }
        public Task <OperationResult <string> > PresentVideoEditor(string videoPath, double maxDuration)
        {
            var tcs = new TaskCompletionSource <OperationResult <string> >();

            var videoEditor = new UIVideoEditorController();

            videoEditor.VideoPath            = videoPath;
            videoEditor.VideoMaximumDuration = maxDuration;
            videoEditor.VideoQuality         = UIImagePickerControllerQualityType.High;
            videoEditor.Failed += (object sender, NSErrorEventArgs e) =>
            {
                videoEditor.DismissModalViewController(true);
                tcs.SetResult(OperationResult <string> .AsFailure(e.Error.LocalizedDescription));
            };
            videoEditor.UserCancelled += (object sender, EventArgs e) =>
            {
                videoEditor.DismissModalViewController(true);
                tcs.SetResult(OperationResult <string> .AsCancel());
            };
            videoEditor.Saved += (object sender, UIPathEventArgs e) =>
            {
                tcs.SetResult(OperationResult <string> .AsSuccess(e.Path));
                videoEditor.DismissModalViewController(true);
            };

            NavigationHelper.GetActiveViewController().PresentViewController(videoEditor, true, null);

            return(tcs.Task);
        }
Ejemplo n.º 3
0
        private Task <OperationResult> GetMediaItem(string destinationPath, MediaItemType mediaItemType, UIImagePickerControllerSourceType sourceType)
        {
            var tcs = new TaskCompletionSource <OperationResult>();

            var picker = new ExtendedUIImagePickerController();

            picker.PreferredOrientation = UIApplication.SharedApplication.StatusBarOrientation;
            if (mediaItemType == MediaItemType.Video)
            {
                picker.VideoQuality = UIImagePickerControllerQualityType.At1280x720;
            }
            picker.SourceType = sourceType;
            var typeString = mediaItemType == MediaItemType.Video ? "public.movie" : "public.image";

            picker.MediaTypes = new string[] { typeString };

            picker.Canceled += (object sender, EventArgs e) =>
            {
                tcs.SetResult(OperationResult.AsCancel());
                picker.DismissViewController(true, null);
            };
            picker.FinishedPickingMedia += (object sender, UIImagePickerMediaPickedEventArgs e) =>
            {
                picker.DismissViewController(true, () =>
                {
                    NSUrl mediaURl = null;

                    if (e.MediaUrl != null)
                    {
                        mediaURl = e.MediaUrl;
                        File.Copy(mediaURl.Path, destinationPath, true);
                        tcs.SetResult(OperationResult.AsSuccess());
                    }
                    else
                    {
                        var originalImage = e.OriginalImage;
                        var imageData     = originalImage.AsJPEG();

                        NSError err = null;

                        if (imageData.Save(destinationPath, false, out err))
                        {
                            tcs.SetResult(OperationResult.AsSuccess());
                        }
                        else
                        {
                            tcs.SetResult(OperationResult.AsFailure(err.LocalizedDescription));
                        }
                    }
                });
            };

            NavigationHelper.GetActiveViewController().PresentViewController(picker, true, null);

            return(tcs.Task);
        }
        public async Task <OperationResult <FacebookSession> > Login(List <string> fields, List <string> permissions = null)
        {
            var taskCompletionSource = new TaskCompletionSource <OperationResult <FacebookSession> >();

            try
            {
                var session = this.GetSession();

                if (session == null)
                {
                    if (permissions == null)
                    {
                        permissions = _readPermissions;
                    }

                    try
                    {
                        var result = await _manager.Value.LogInWithReadPermissionsAsync(permissions.ToArray(), null);

                        if (result.IsCancelled)
                        {
                            taskCompletionSource.SetResult(OperationResult <FacebookSession> .AsCancel());
                        }
                        else if (result.Token != null)
                        {
                            session = GetSessionToken(result.Token);
                        }
                        else
                        {
                            taskCompletionSource.SetResult(OperationResult <FacebookSession> .AsFailure("Token is not available"));
                        }
                    }
                    catch (Exception ex)
                    {
                        taskCompletionSource.SetResult(OperationResult <FacebookSession> .AsFailure(ex));
                    }
                }

                if (session != null)
                {
                    GetUserInfo(fields, session, taskCompletionSource);
                }
            }
            catch (AggregateException ex)
            {
                taskCompletionSource.SetResult(OperationResult <FacebookSession> .AsFailure(ex));
            }

            return(await taskCompletionSource.Task);
        }
        public void AsCancel_ShouldSetFieldsCorrectly()
        {
            var result = OperationResult.AsCancel();

            Assert.False(result.IsSuccessful);
            Assert.True(result.IsCancelled);
            Assert.Null(result.Exception);
            Assert.Null(result.Message);

            var genericResult = OperationResult <Dummy> .AsCancel();

            Assert.False(genericResult.IsSuccessful);
            Assert.True(genericResult.IsCancelled);
            Assert.Null(genericResult.Exception);
            Assert.Null(genericResult.Message);
            Assert.Null(genericResult.Result);
        }
 private void OnAnimationCompleted(double finalValue, bool wasCancelled)
 {
     if (wasCancelled)
     {
         _numberOfBouncesPerformed = 0;
         Control.TranslationY      = 0;
         AnimationTaskCompletionSource.SetResult(OperationResult <double> .AsCancel());
     }
     else if (_numberOfBouncesPerformed == NumberOfBounces)
     {
         _numberOfBouncesPerformed = 0;
         AnimationTaskCompletionSource.SetResult(OperationResult <double> .AsSuccess(finalValue));
     }
     else
     {
         CreateAndStartBounceAnimation();
     }
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Performs fade animation.
        /// </summary>
        /// <returns>Returns an instance of <see cref="OperationResult"/> that represents the outcome of the animation
        /// and stores a <c>finalValue</c> representing the completed state of the animation.</returns>
        public override Task <OperationResult <double> > PerformAnimation()
        {
            AnimationTaskCompletionSource = new TaskCompletionSource <OperationResult <double> >();

            Animation.Commit(Control, AnimationId, length: (uint)Duration, finished: (finalValue, wasCancelled) =>
            {
                if (ShouldReset)
                {
                    Control.Opacity = ResetValue;
                }
                if (wasCancelled)
                {
                    AnimationTaskCompletionSource.SetResult(OperationResult <double> .AsCancel());
                }
                else
                {
                    AnimationTaskCompletionSource.SetResult(OperationResult <double> .AsSuccess(finalValue));
                }
            }, repeat: () => ShouldRepeat);

            return(AnimationTaskCompletionSource.Task);
        }
        public async Task <OperationResult> TrimVideo(string sourcePath, string destinationPath, double startTime, double endTime)
        {
            if (string.IsNullOrEmpty(sourcePath) || !File.Exists(sourcePath))
            {
                return(OperationResult.AsFailure("Invalid video file path specified"));
            }

            var url   = NSUrl.CreateFileUrl(sourcePath, false, null);
            var asset = AVAsset.FromUrl(url);

            var session = new AVAssetExportSession(asset, AVAssetExportSession.PresetPassthrough);

            session.OutputUrl      = NSUrl.FromFilename(destinationPath);
            session.OutputFileType = AVFileType.Mpeg4;

            var cmStartTime = CMTime.FromSeconds(startTime, asset.Duration.TimeScale);
            var duration    = CMTime.FromSeconds(endTime - startTime, asset.Duration.TimeScale);

            var range = new CMTimeRange();

            range.Start       = cmStartTime;
            range.Duration    = duration;
            session.TimeRange = range;

            await session.ExportTaskAsync();

            if (session.Status == AVAssetExportSessionStatus.Cancelled)
            {
                return(OperationResult.AsCancel());
            }
            else if (session.Status == AVAssetExportSessionStatus.Failed)
            {
                return(OperationResult.AsFailure(session.Error.LocalizedDescription));
            }
            else
            {
                return(OperationResult.AsSuccess());
            }
        }