Beispiel #1
0
        /// <summary>
        /// returned async task function:
        ///   throws exception if there was error (f.e. android camera permissions)
        ///   OR returns not null scanned code
        ///   OR returns null if scanning was cancelled by user
        /// </summary>
        public static async Task <string> RequestScanQrNonValidatable(LayoutStrategy layout, CancellationToken canc)
        {
            var    hndl   = RequestScanQr(false, layout);
            string result = null;

            canc.Register(() => {
                Logger.Debug(typeof(IawAppApi), "RequestScanQrNonValidatable() requesting cancellation");
                hndl.CancelScanning();
            });

            while (true)
            {
                Logger.Debug(typeof(IawAppApi), "RequestScanQrNonValidatable() requesting next");
                var v = await hndl.GetNext();

                Logger.Debug(typeof(IawAppApi), "RequestScanQrNonValidatable() got ({0}; {1})", v.Item1, v.Item2);

                if (v.Item1 == ScanResultType.Paused)
                {
                    throw new Exception("unexpected pause");
                }

                if (v.Item1 == ScanResultType.Scanned)
                {
                    result = v.Item2;
                    Logger.Debug(typeof(IawAppApi), "RequestScanQrNonValidatable() deferring result {0}", result);
                }

                if (v.Item1 == ScanResultType.Disposed)
                {
                    Logger.Debug(typeof(IawAppApi), "RequestScanQrNonValidatable() returning deferred result {0}", result);
                    return(result);
                }
            }
        }
Beispiel #2
0
        public void requestScanQr(string webRequestId, bool askJsForValidation, LayoutStrategy layout)
        {
            var layoutAsJson = JsonConvert.SerializeObject(layout);

            BridgeObjectUtil.CallMethodPlain(_impl, nameof(requestScanQr),
                                             webRequestId,
                                             askJsForValidation ? BridgeObjectUtil.True : BridgeObjectUtil.False,
                                             layoutAsJson);
        }
Beispiel #3
0
        public static IScanResult RequestScanQr(bool pauseAfterBarcode, LayoutStrategy layout)
        {
            var impl = GetImpl();

            if (impl == null)
            {
                Logger.Debug(typeof(IawAppApi), "has no proper IAWApp API");
                return(new WindowPromptBasedScanResult(pauseAfterBarcode, layout));
            }

            return(new ScanResult(impl, pauseAfterBarcode, layout));
        }
Beispiel #4
0
 public WindowPromptBasedScanResult(bool pauseAfterBarcode, LayoutStrategy layout)
 {
     _pauseAfterBarcode = pauseAfterBarcode;
     _layout            = layout;
 }
Beispiel #5
0
 public ScanResult(IAWAppHostApi impl, bool pauseAfterBarcode, LayoutStrategy layout)
 {
     _impl              = impl;
     _layout            = layout;
     _pauseAfterBarcode = pauseAfterBarcode;
 }