/**
             * Update the position/characteristics of the face within the overlay.
             * 바코드 Result부분
             */
            public override void OnUpdate(Detector.Detections detections, Java.Lang.Object item)
            {
                //2개이상 바코드를 스캔해서 경고창이 발생할 경우 화면이 Freeze된다.
                //if (detections.DetectedItems.Size() != 1)
                //{
                //    return;
                //}

                Rect  rect = ((BarcodeScannerActivity)_activity).mPreview.mSurfaceView._clipBounds;
                float left;
                float right;
                float top;
                float bottom;

                //IList<Point> point = (item as Barcode).CornerPoints;
                if (!Settings.ScanMode.Equals("FULL"))
                {
                    left  = (rect.Left * (float)((BarcodeScannerActivity)_activity).mCameraSource.PreviewSize.Height) / (float)((BarcodeScannerActivity)_activity).mPreview.mSurfaceView.scaleNominatorX;
                    right = (rect.Right * (float)((BarcodeScannerActivity)_activity).mCameraSource.PreviewSize.Height) / (float)((BarcodeScannerActivity)_activity).mPreview.mSurfaceView.scaleNominatorX;

                    top    = (rect.Top * (float)((BarcodeScannerActivity)_activity).mCameraSource.PreviewSize.Width) / (float)((BarcodeScannerActivity)_activity).mPreview.mSurfaceView.scaleNominatorY;
                    bottom = (rect.Bottom * (float)((BarcodeScannerActivity)_activity).mCameraSource.PreviewSize.Width) / (float)((BarcodeScannerActivity)_activity).mPreview.mSurfaceView.scaleNominatorY;

                    //관심영여과 스캔한 바코드가 교차영역이 없으면 skip한다.
                    //카메라와 PreView 좌표가 넘어온다. Layout 크기와 Preview 카메라 크기가 다르면 아래 코드는 작동하지 않는다.
                    //if (!(item as Barcode).BoundingBox.Intersect(((BarcodeScannerActivity)_activity).mPreview.mSurfaceView.GetAreaOfInterestCamera()))

                    if (!(item as Barcode).BoundingBox.Intersect(new Rect((int)left, (int)top, (int)right, (int)bottom)))
                    {
                        return;
                    }
                }

                //화면 표시
                mOverlay.Add(mBarcodeGraphic);

                //1. 단일/연속 구분
                //연속 스캔
                if (((BarcodeScannerActivity)_activity).IsContinue)
                {
                    //고정(스캔 해야할 대상이 정해져 있음)
                    if (((BarcodeScannerActivity)_activity).IsFixed)
                    {
                        if (((BarcodeScannerActivity)_activity).AllScanBarcode.Contains(item.JavaCast <Barcode>().DisplayValue))
                        {
                            //1. 저장 했는지?
                            if (((BarcodeScannerActivity)_activity).SaveCompletedBarcode.Contains(item.JavaCast <Barcode>().DisplayValue))
                            {
                                //CameraStop();
                                mBarcodeGraphic.UpdateBarcode(item.JavaCast <Barcode>(), "저장 완료", 3);
                                //long[] pattern = { 0, 100, 1000 };
                                Warning();

                                //Task.Run(() =>
                                //{
                                //    ((BarcodeScannerActivity)_activity).StartCameraSource();
                                //});
                            }
                            //2. Scan완료 했는지?
                            else if (((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Contains(item.JavaCast <Barcode>().DisplayValue))
                            {
                                //CameraStop();
                                mBarcodeGraphic.UpdateBarcode(item.JavaCast <Barcode>(), "스캔 완료", 1);
                                //long[] pattern = { 0, 100, 1000 };
                                Warning();

                                //Task.Run(() =>
                                //{
                                //    ((BarcodeScannerActivity)_activity).StartCameraSource();
                                //});
                            }
                            else
                            {
                                //------------
                                //정상처리 작업
                                //------------
                                mBarcodeGraphic.UpdateBarcode(item.JavaCast <Barcode>(), string.Empty, 0);
                                OnScanCompleted?.Invoke(item.JavaCast <Barcode>());

                                ((BarcodeScannerActivity)_activity)._playerBeep.Start();

                                if (((BarcodeScannerActivity)_activity).vibrator != null)
                                {
                                    try
                                    {
                                        ((BarcodeScannerActivity)_activity).vibrator.Vibrate(300);
                                    }
                                    catch (Exception e)
                                    {
                                        Console.WriteLine(e.Message);
                                    }
                                }

                                if (!((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Contains(item.JavaCast <Barcode>().DisplayValue))
                                {
                                    ((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Add(item.JavaCast <Barcode>().DisplayValue);
                                }

                                if
                                (
                                    ((BarcodeScannerActivity)_activity).AllScanBarcode.Count ==
                                    ((BarcodeScannerActivity)_activity).SaveCompletedBarcode.Count +
                                    ((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Count
                                )
                                {
                                    CameraStop();
                                    Barcode barcode = new Barcode
                                    {
                                        DisplayValue = "EXIT"
                                    };
                                    OnScanCompleted?.Invoke(barcode);

                                    //Task.Delay(200).Wait();
                                    Thread.Sleep(300);
                                    ((BarcodeScannerActivity)_activity).Finish(); //Finsh해야 스캔 화면 종료됨.
                                }
                                else
                                {
                                    //연속스캔 사이의 간격 지정
                                    //Task.Delay(1000).Wait();
                                    Thread.Sleep(1000);
                                }
                            }
                        }
                        else
                        {
                            mBarcodeGraphic.UpdateBarcode(item.JavaCast <Barcode>(), "스캔 대상X", 2);
                            Warning();
                        }
                    }
                    //비고정(스캔 대상이 없음)
                    else
                    {
                        //현재로서는 biz로직이 없음
                        //mBarcodeGraphic.UpdateBarcode(item.JavaCast<Barcode>(), 0, ((BarcodeScannerActivity)_activity).rowPosition++);
                        //OnScanCompleted(item.JavaCast<Barcode>());
                        //if (!((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Contains(item.JavaCast<Barcode>().DisplayValue))
                        //{
                        //    ((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Add(item.JavaCast<Barcode>().DisplayValue);
                        //}

                        //Task.Delay(700).Wait();
                    }
                }
                //단일 스캔
                else
                {
                    CameraStop();
                    mBarcodeGraphic.UpdateBarcode(item.JavaCast <Barcode>(), string.Empty, 1);
                    OnScanCompleted?.Invoke(item.JavaCast <Barcode>());

                    ((BarcodeScannerActivity)_activity)._playerBeep.Start();

                    if (((BarcodeScannerActivity)_activity).vibrator != null)
                    {
                        try
                        {
#pragma warning disable CS0618 // Type or member is obsolete
                            ((BarcodeScannerActivity)_activity).vibrator.Vibrate(300);
#pragma warning restore CS0618 // Type or member is obsolete
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                        }
                    }

                    //Task.Delay(200).Wait();
                    Thread.Sleep(300);
                    ((BarcodeScannerActivity)_activity).Finish(); //Finsh해야 스캔 화면 종료됨.
                }

                if (mBarcodeGraphic != null)
                {
                    mOverlay.Remove(mBarcodeGraphic);
                }
            }