public MediaPickerController GetPickPhotoUI() { if (!PhotosSupported) throw new NotSupportedException(); var d = new MediaPickerDelegate (null, UIImagePickerControllerSourceType.PhotoLibrary, null); return SetupController (d, UIImagePickerControllerSourceType.PhotoLibrary, TypeImage); }
public MediaPickerController GetTakePhotoUI (StoreCameraMediaOptions options) { if (!PhotosSupported) throw new NotSupportedException(); if (!IsCameraAvailable) throw new NotSupportedException(); VerifyCameraOptions (options); var d = new MediaPickerDelegate (null, UIImagePickerControllerSourceType.PhotoLibrary, options); return SetupController (d, UIImagePickerControllerSourceType.Camera, TypeImage, options); }
private Task<MediaFile> GetMediaAsync (UIImagePickerControllerSourceType sourceType, string mediaType, StoreCameraMediaOptions options = null) { UIWindow window = UIApplication.SharedApplication.KeyWindow; if (window == null) throw new InvalidOperationException ("There's no current active window"); UIViewController viewController = window.RootViewController; if (viewController == null) { window = UIApplication.SharedApplication.Windows.OrderByDescending (w => w.WindowLevel).FirstOrDefault (w => w.RootViewController != null); if (window == null) throw new InvalidOperationException ("Could not find current view controller"); else viewController = window.RootViewController; } while (viewController.PresentedViewController != null) viewController = viewController.PresentedViewController; MediaPickerDelegate ndelegate = new MediaPickerDelegate (viewController, sourceType, options); var od = Interlocked.CompareExchange (ref this.pickerDelegate, ndelegate, null); if (od != null) throw new InvalidOperationException ("Only one operation can be active at at time"); var picker = SetupController (ndelegate, sourceType, mediaType, options); if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad && sourceType == UIImagePickerControllerSourceType.PhotoLibrary) { ndelegate.Popover = new UIPopoverController (picker); ndelegate.Popover.Delegate = new MediaPickerPopoverDelegate (ndelegate, picker); ndelegate.DisplayPopover(); } else viewController.PresentViewController (picker, true, null); return ndelegate.Task.ContinueWith (t => { if (this.popover != null) { this.popover.Dispose(); this.popover = null; } Interlocked.Exchange (ref this.pickerDelegate, null); return t; }).Unwrap(); }
public MediaPickerController GetTakeVideoUI (StoreVideoOptions options) { if (!VideosSupported) throw new NotSupportedException(); if (!IsCameraAvailable) throw new NotSupportedException(); VerifyCameraOptions (options); var d = new MediaPickerDelegate (null, UIImagePickerControllerSourceType.Camera, options); return SetupController (d, UIImagePickerControllerSourceType.Camera, TypeMovie, options); }
private static MediaPickerController SetupController (MediaPickerDelegate mpDelegate, UIImagePickerControllerSourceType sourceType, string mediaType, StoreCameraMediaOptions options = null) { var picker = new MediaPickerController (mpDelegate); picker.MediaTypes = new[] { mediaType }; picker.SourceType = sourceType; if (sourceType == UIImagePickerControllerSourceType.Camera) { picker.CameraDevice = GetUICameraDevice (options.DefaultCamera); if (mediaType == TypeImage) picker.CameraCaptureMode = UIImagePickerControllerCameraCaptureMode.Photo; else if (mediaType == TypeMovie) { StoreVideoOptions voptions = (StoreVideoOptions)options; picker.CameraCaptureMode = UIImagePickerControllerCameraCaptureMode.Video; picker.VideoQuality = GetQuailty (voptions.Quality); picker.VideoMaximumDuration = voptions.DesiredLength.TotalSeconds; } } return picker; }
private Task <MediaFile> TakeMedia(UIImagePickerControllerSourceType sourceType, string mediaType, StoreCameraMediaOptions options = null) { UIWindow window = UIApplication.SharedApplication.KeyWindow; if (window == null) { throw new InvalidOperationException("There's no current active window"); } UIViewController viewController = window.RootViewController; if (viewController == null) { window = UIApplication.SharedApplication.Windows.OrderByDescending(w => w.WindowLevel).FirstOrDefault(w => w.RootViewController != null); if (window == null) { throw new InvalidOperationException("Could not find current view controller"); } else { viewController = window.RootViewController; } } while (viewController.PresentedViewController != null) { viewController = viewController.PresentedViewController; } MediaPickerDelegate ndelegate = new MediaPickerDelegate(viewController, sourceType, options); var od = Interlocked.CompareExchange(ref this.pickerDelegate, ndelegate, null); if (od != null) { throw new InvalidOperationException("Only one operation can be active at at time"); } var picker = SetupController(ndelegate, sourceType, mediaType, options); if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad) { ndelegate.Popover = new UIPopoverController(picker); ndelegate.Popover.Delegate = new MediaPickerPopoverDelegate(ndelegate, picker); ndelegate.DisplayPopover(); } else { viewController.PresentModalViewController(picker, true); } return(ndelegate.Task.ContinueWith(t => { if (this.popover != null) { this.popover.Dispose(); this.popover = null; } Interlocked.Exchange(ref this.pickerDelegate, null); return t; }).Unwrap()); }
internal MediaPickerController(MediaPickerDelegate mpDelegate) { base.Delegate = mpDelegate; }
internal MediaPickerPopoverDelegate (MediaPickerDelegate pickerDelegate, UIImagePickerController picker) { this.pickerDelegate = pickerDelegate; this.picker = picker; }
internal MediaPickerPopoverDelegate(MediaPickerDelegate pickerDelegate, UIImagePickerController picker) { this.pickerDelegate = pickerDelegate; this.picker = picker; }
internal MediaPickerController (MediaPickerDelegate mpDelegate) { base.Delegate = mpDelegate; }