using System; using System.Threading.Tasks; using Comal.Classes; using InABox.Clients; using InABox.Configuration; using InABox.Core; using InABox.Mobile; using Xamarin.Forms; using Xamarin.Forms.Xaml; using XF.Material.Forms; using XF.Material.Forms.Resources; using XF.Material.Forms.Resources.Typography; using XF.Material.Forms.UI; using Xamarin.Essentials; using SkiaSharp; //[assembly: XamlCompilation(XamlCompilationOptions.Compile)] namespace comal.timesheets { public partial class App : Application { string deviceString = ""; public static bool IsUserLoggedIn => ClientFactory.UserGuid != Guid.Empty; public static void LogoutUser() { ClientFactory.InvalidateUser(); } public static LocationServices GPS { get; } = new LocationServices() { ScanDelay = new TimeSpan(0, 1, 0) }; public static Bluetooth Bluetooth { get; } = new Bluetooth() { ScanDelay = new TimeSpan(0, 1, 0) }; public static DataModel Data { get; } = new DataModel(); public static bool IsInForeground { get; set; } = false; public const string MessageOnStart = "OnStart"; public const string MessageOnSleep = "OnSleep"; public const string MessageOnResume = "OnResume"; public static ConnectionSettings Settings = null; public App() { try { Material.Init(this); InitializeComponent(); Material.Use("Material.Configuration"); MobileUtils.Init(); CoreUtils.RegisterClasses(); ComalUtils.RegisterClasses(); FindDeviceInfo(); Settings = new LocalConfiguration().Load(); Settings.URL = "https://remote.com-al.com.au"; Settings.Port = 8005; Settings.UserID = "NICK"; Settings.Password = "nick"; if (String.IsNullOrWhiteSpace(Settings.URL) || Settings.URL == "http://demo.prsdigital.com.au") { TryLoadFromSecureCache(); if (String.IsNullOrWhiteSpace(Settings.URL)) MobileUtils.LoadDemoSettings(Settings); } else MobileUtils.SaveToSecureStorage(); if (!string.IsNullOrWhiteSpace(GlobalVariables.LoadFromLinkString)) { MobileUtils.LoadFromLink(); } ClientFactory.SetClientType(typeof(JsonClient<>), "TimeBench", MobileUtils.AppVersion.InstalledVersionNumber + deviceString, new object[] { Settings.URL, Settings.Port, true }); GlobalVariables.InternalOnAppearing = true; GlobalVariables.ChangeUser = false; GPS.GetLocation(); Bluetooth.ScanForDevices(); Device.StartTimer(new TimeSpan(0, 0, 30), () => { if (App.IsInForeground) { GPS.GetLocation(); } return true; }); Device.StartTimer(new TimeSpan(0, 0, 30), () => { if (App.IsInForeground) { Bluetooth.ScanForDevices(); } return true; }); MainPage = new MaterialNavigationPage(new comal.timesheets.PINLoginPage()); } catch { MainPage = new MaterialNavigationPage(new comal.timesheets.PINLoginPage()); } } private async void TryLoadFromSecureCache() { try { Settings.URL = await SecureStorage.GetAsync(GlobalVariables.CacheURLString); Settings.Port = int.Parse(await SecureStorage.GetAsync(GlobalVariables.CachePortString)); Settings.UserID = await SecureStorage.GetAsync(GlobalVariables.CacheUserIDString); Settings.Password = await SecureStorage.GetAsync(GlobalVariables.CachePasswordString); } catch { } } private void FindDeviceInfo() { var idiom = DeviceInfo.Idiom; if (Device.RuntimePlatform.Equals(Device.iOS)) { if (idiom.Equals(DeviceIdiom.Phone)) { deviceString = "i"; } else if (idiom.Equals(DeviceIdiom.Tablet)) { deviceString = "I"; } } else if (Device.RuntimePlatform.Equals(Device.Android)) { if (idiom.Equals(DeviceIdiom.Phone)) { deviceString = "a"; } else if (idiom.Equals(DeviceIdiom.Tablet)) { deviceString = "A"; } } GlobalVariables.DeviceString = deviceString; } protected override void OnStart() { MessagingCenter.Send(this, MessageOnStart); IsInForeground = true; } protected override void OnSleep() { MessagingCenter.Send(this, MessageOnSleep); IsInForeground = false; } protected override void OnResume() { MessagingCenter.Send(this, MessageOnResume); IsInForeground = true; } } }