//
        // This method is invoked when the application has loaded and is ready to run. In this
        // method you should instantiate the window, load the UI into it and then make the window
        // visible.
        //
        // You have 17 seconds to return from this method, or iOS will terminate your application.
        //
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            global::Xamarin.Forms.Forms.Init();
            FFImageLoading.Forms.Platform.CachedImageRenderer.Init();
            var mediaService = new PhotoPickerService();

            LoadApplication(new App(mediaService));

            return(base.FinishedLaunching(app, options));
        }
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
        {
            switch (requestCode)
            {
            case PickImageRequestCode:
                var iPickImageService = DependencyService.Get <IPhotoPickerService>();
                PhotoPickerService pickImageService = iPickImageService as PhotoPickerService;

                if ((grantResults.Length == 1) && (grantResults[0] == Permission.Granted))
                {
                    // Location permission has been granted, okay to retrieve the location of the device.
                    pickImageService.PickPhoto();
                }
                else
                {
                    pickImageService.RaisePhotoPickedFailed();
                }
                break;

            case CameraStorageRequestCode:
                var iCameraStorageService = DependencyService.Get <IRequestPermissionService>();
                RequestPermissionService cameraStorageService = iCameraStorageService as RequestPermissionService;

                if (grantResults.Length == 2 &&
                    grantResults[0] == Permission.Granted)
                {
                    cameraStorageService.RaiseCameraPermissionSucceded();
                }
                else
                {
                    cameraStorageService.RaiseCameraPermissionFailed();
                }

                if (grantResults.Length == 2 &&
                    grantResults[1] == Permission.Granted)
                {
                    cameraStorageService.RaiseWriteExternalStoragePermissionSucceded();
                }
                else
                {
                    cameraStorageService.RaiseWriteExternalStoragePermissionFailed();
                }
                break;

            default:
                base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
                break;
            }
        }
        protected override void OnActivityResult(int requestCode, Result resultCode, Intent intent)
        {
            base.OnActivityResult(requestCode, resultCode, intent);

            if (requestCode == PickImageId)
            {
                var iService = DependencyService.Get <IPhotoPickerService>();
                PhotoPickerService service = iService as PhotoPickerService;

                if ((resultCode == Result.Ok) && (intent != null))
                {
                    Android.Net.Uri uri      = intent.Data;
                    var             filename = Path.GetFileName(uri.Path);
                    Stream          stream   = ContentResolver.OpenInputStream(uri);

                    service.RaisePhotoPickedSucceeded(stream, filename);
                }
                else
                {
                    service.RaisePhotoPickedSucceeded();
                }
            }
        }