using System; using System.Collections.Generic; using System.Threading.Tasks; using Comal.Classes; using InABox.Core; using Rb.Forms.Barcode.Pcl; using Xamarin.Forms; namespace comal.timesheets { public partial class BarcodeForm : ContentPage { public Guid JobID { get; set; } public double Latitude { get; set; } public double Longitude { get; set; } private DataTable Jobs = null; public BarcodeForm(DataTable jobs) { InitializeComponent(); Jobs = jobs; MessagingCenter.Subscribe(this, App.MessageOnSleep, disableScanner); MessagingCenter.Subscribe(this, App.MessageOnResume, enableScanner); barcodeScanner.BarcodeChanged += animateFlash; } protected override void OnAppearing() { base.OnAppearing(); enableScanner(this); } protected override void OnDisappearing() { disableScanner(this); base.OnDisappearing(); } //public void DisableScanner() //{ // disableScanner(null); //} private void disableScanner(object sender) { barcodeScanner.IsEnabled = false; } private void enableScanner(object sender) { barcodeScanner.IsEnabled = true; } private async Task ProcessBarcode(String barcode) { disableScanner(this); JobID = Guid.Empty; foreach (DataRow row in Jobs.Rows) { Guid jobid = row.Get(X => X.ID); if (jobid.ToString().Equals(barcode)) { JobID = jobid; Latitude = row.Get(X => X.SiteAddress.Location.Latitude); Longitude = row.Get(X => X.SiteAddress.Location.Longitude); break; } } if (JobID != Guid.Empty) Navigation.PopAsync(); else enableScanner(this); } private async void animateFlash(object sender, BarcodeEventArgs e) { Device.BeginInvokeOnMainThread(async () => { await flash.FadeTo(1, 150, Easing.CubicInOut); flash.Opacity = 0; await ProcessBarcode(e.Barcode.Result); }); } ~BarcodeForm() { disableScanner(this); MessagingCenter.Unsubscribe(this, App.MessageOnSleep); MessagingCenter.Unsubscribe(this, App.MessageOnResume); barcodeScanner.BarcodeChanged -= animateFlash; } } }