コード例 #1
0
        protected override async void OnAppearing()
        {
            if (IsBusy)
            {
                return;
            }
            try
            {
                IsBusy = true;
                if (!_adjusted)
                {
                    await Device.InvokeOnMainThreadAsync(() => UniformFormattingHelpers.UniversalAdjustments(this.Content));

                    _adjusted = false;
                }
                ScrollDownPrompt.IsVisible = false;
                await Task.Delay(10);

                _ = Task.Run(async() =>
                {
                    await Task.Delay(10);
                    using (UserDialogs.Instance.Loading("Loading Photos..."))
                    {
                        await MakeGrid();
                        _adjusted = true;
                    }
                });
                while (!_adjusted)
                {
                    await Task.Delay(200);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
            }
            IsBusy = false;
        }
コード例 #2
0
        protected override async void OnAppearing()
        {
            if (IsBusy)
            {
                base.OnAppearing();
                return;
            }
            try
            {
                IsBusy = true;
                if (!_adjusted)
                {
                    await Device.InvokeOnMainThreadAsync(() =>
                    {
                        UniformFormattingHelpers.UniversalAdjustments(this.Content);
                        _adjusted = true;
                    });
                }
                base.OnAppearing();
                var         noimageyet = "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";
                ImageSource noImg      = ImageSource.FromStream(() => new MemoryStream(Convert.FromBase64String(noimageyet)));

                if (_nShippingOrderFileID > 0)
                {
                    Device.BeginInvokeOnMainThread(() => CameraButton.Text = "Retake Photo");
                    using (UserDialogs.Instance.Loading("Showing existing image...."))
                    {
                        await Task.Delay(100);

                        var existingPic = App.soapService.GetShippingOrderFiles(_nShippingOrderID, _picType).SingleOrDefault(x => x.ShippingOrderFileID == _nShippingOrderFileID);
                        if (existingPic != null)
                        {
                            await Task.Run(async() =>
                            {
                                var str       = await App.soapService.DownloadPicture(existingPic.FileName);
                                var imagedata = Convert.FromBase64String(str);
                                var image     = ImageSource.FromStream(() => new MemoryStream(imagedata));
                                Device.BeginInvokeOnMainThread(() =>
                                {
                                    PhotoImage.Source = image;
                                });
                                await Task.Delay(3000);
                            });
                        }
                        else
                        {
                            Device.BeginInvokeOnMainThread(() =>
                            {
                                PhotoImage.Source = noImg;
                            });
                        }
                    }
                }
                else
                {
                    Device.BeginInvokeOnMainThread(async() =>
                    {
                        PhotoImage.Source = noImg;
                        await Task.Delay(10);
                    });
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
            }
            IsBusy = false;
        }
コード例 #3
0
        private async Task MakeGrid()
        {
            string[] docTypes =
            {
                "Document",
                "Pickup",
                "Delivery",
                "Other"
            };
            var files = App.soapService.GetShippingOrderFiles(_nShippingOrderID, "").OrderByDescending(f => f.UploadedTimeStamp);

            await Device.InvokeOnMainThreadAsync(() =>
            {
                if (grid.RowDefinitions != null && grid.RowDefinitions.Count > 0)
                {
                    grid.RowDefinitions.Clear();
                }
                if (grid.Children != null && grid.Children.Count > 0)
                {
                    grid.Children.Clear();
                }
                foreach (var col in grid.ColumnDefinitions)
                {
                    col.Width = Xamarin.Essentials.DeviceDisplay.MainDisplayInfo.Width / Xamarin.Essentials.DeviceDisplay.MainDisplayInfo.Density / 5;
                }
            });

            var colDef = grid.ColumnDefinitions.FirstOrDefault();

            double colWidth = 60.0;

            if (colDef != null)
            {
                colWidth = colDef.Width.Value;
            }

            int columnCount = 0;
            int rowCount    = 0;

            await Device.InvokeOnMainThreadAsync(() =>
            {
                mainHeader.Text              = "Photos for Order #" + _nOrderNumber.ToString();
                mainHeader.FontSize          = 18;
                mainHeader.FontAttributes    = FontAttributes.Bold;
                mainHeader.HorizontalOptions = LayoutOptions.CenterAndExpand;
                mainHeader.HeightRequest     = 40;
                UniformFormattingHelpers.SetLabelFontAttributes(mainHeader);
            });

            foreach (var type in docTypes)
            {
                var header = new Label()
                {
                    Text = type + " Photos", HeightRequest = 34, VerticalOptions = LayoutOptions.Center, HorizontalOptions = LayoutOptions.Start, VerticalTextAlignment = TextAlignment.Center
                };
                var addButton =
                    new Button()
                {
                    Text              = "Add " + type + " Photo",
                    FontSize          = 13,
                    HeightRequest     = 32,
                    WidthRequest      = 160,
                    VerticalOptions   = LayoutOptions.Center,
                    HorizontalOptions = LayoutOptions.End,
                    Command           = new Command(async() =>
                    {
                        if (IsBusy)
                        {
                            return;
                        }
                        IsBusy = true;
                        ScrollDownPrompt.IsVisible = false;
                        await new PageService().PushModalAsync(new TakePhoto(_userSignIn, _nShippingOrderID, type, 0));
                        await Task.Delay(1000);
                        IsBusy = false;
                    })
                };
                UniformFormattingHelpers.SetLabelFontAttributes(header);
                await Device.InvokeOnMainThreadAsync(async() =>
                {
                    UniformFormattingHelpers.SetButtonAttributes(addButton);
                    grid.RowDefinitions.Add(new RowDefinition()
                    {
                        Height = header.HeightRequest
                    });
                    double spaceAvailableForScrolling = scrollView.ContentSize.Height - scrollView.Height;
                    if (spaceAvailableForScrolling > 0)
                    {
                        await scrollView.ScrollToAsync(0, spaceAvailableForScrolling, false);
                        await Task.Delay(10);
                    }
                    grid.Children.Add(header, 0, rowCount);
                    grid.Children.Add(addButton, 2, rowCount++);
                    Grid.SetColumnSpan(header, 2);
                    Grid.SetColumnSpan(addButton, 2);
                });

                foreach (var item in files.Where(f => f.DocumentType == type))
                {
                    bool fileExists = await App.soapService.PictureExists(item.FileName);

                    if (fileExists)
                    {
                        string thumbFileName   = item.FileName.Replace(".png", "_thumb.png");
                        bool   thumbnailExists = await App.soapService.PictureExists(thumbFileName);

                        if (!thumbnailExists)
                        {
                            string bigImageStr = await App.soapService.DownloadPicture(item.FileName);

                            byte[] newthumbnail = null;
                            var    bigimagedata = Convert.FromBase64String(bigImageStr);
                            try
                            {
                                newthumbnail = App.imageService.GenerateThumbnail(bigimagedata, 200);
                                await App.soapService.UploadPicture(newthumbnail, thumbFileName);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
                            }
                        }
                        string str = await App.soapService.DownloadPicture(thumbFileName);

                        var imagedata        = Convert.FromBase64String(str);
                        var resizedThumbnail = imagedata;
                        try
                        {
                            resizedThumbnail = App.imageService.GenerateThumbnail(imagedata, (int)colWidth);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
                        }
                        var size  = App.imageService.GetSize(resizedThumbnail);
                        var image = new Image()
                        {
                            Source             = ImageSource.FromStream(() => new MemoryStream(resizedThumbnail)),
                            GestureRecognizers =
                            {
                                new TapGestureRecognizer()
                                {
                                    Command = new Command(async() =>
                                    {
                                        if (IsBusy)
                                        {
                                            return;
                                        }
                                        IsBusy = true;
                                        ScrollDownPrompt.IsVisible = false;
                                        await new PageService().PushModalAsync(new TakePhoto(_userSignIn, _nShippingOrderID, type, item.ShippingOrderFileID));
                                        await Task.Delay(1000);
                                        IsBusy = false;
                                    })
                                }
                            },
                            WidthRequest  = size.Width,
                            HeightRequest = size.Height
                        };

                        await Device.InvokeOnMainThreadAsync(async() =>
                        {
                            if (columnCount == 0)
                            {
                                grid.RowDefinitions.Add(new RowDefinition()
                                {
                                    Height = colWidth
                                });
                                grid.Children.Add(image, columnCount++, rowCount);
                                await Task.Delay(10);
                                double spaceAvailableForScrolling = scrollView.ContentSize.Height - scrollView.Height;
                                if (spaceAvailableForScrolling > 0)
                                {
                                    await scrollView.ScrollToAsync(0, spaceAvailableForScrolling, false);
                                    await Task.Delay(10);
                                }
                            }
                            else
                            {
                                grid.Children.Add(image, columnCount++, rowCount);
                            }
                            if (columnCount > 3)
                            {
                                columnCount = 0;
                                rowCount++;
                            }
                        });
                    }
                    else
                    {
                        Console.WriteLine(item.FileName + " doesn't exist as a blob on Azure");
                    }
                }

                if (files.Where(f => f.DocumentType == type).Count() <= 0)
                {
                    var noPhotos = new Label()
                    {
                        Text = "No " + type + " Photos yet", FontSize = 12, HeightRequest = 60, VerticalTextAlignment = TextAlignment.Center, TextColor = Color.FromHex("#666666"), HorizontalTextAlignment = TextAlignment.Center
                    };
                    await Device.InvokeOnMainThreadAsync(async() =>
                    {
                        UniformFormattingHelpers.SetLabelFontAttributes(noPhotos);
                        grid.RowDefinitions.Add(new RowDefinition()
                        {
                            Height = UniformFormattingHelpers.SizeByFontRatio(60)
                        });
                        grid.Children.Add(noPhotos, 0, rowCount);
                        Grid.SetColumnSpan(noPhotos, 4);
                        double spaceAvailableForScrolling = scrollView.ContentSize.Height - scrollView.Height;
                        if (spaceAvailableForScrolling > 0)
                        {
                            await scrollView.ScrollToAsync(0, spaceAvailableForScrolling, false);
                            await Task.Delay(10);
                        }
                    });
                }
                if (columnCount > 0)
                {
                    columnCount = 0;
                    rowCount++;
                }
            }
            var lastRow = new Label()
            {
                Text = ""
            };

            lastRow.VerticalOptions = LayoutOptions.EndAndExpand;
            Grid.SetColumnSpan(lastRow, 4);
            await Device.InvokeOnMainThreadAsync(async() => {
                grid.Children.Add(lastRow, 0, rowCount);
                await scrollView.ScrollToAsync(0, 0, false);
                await Task.Delay(10);
            });
        }