async private void BtnEmailClicked(object sender, EventArgs e)
        {
            UpdateUI(true);
            LicenseService service = new LicenseService(ProgramVars.LicURL);
            LicenseRequest request = new LicenseRequest()
            {
                Method     = "Request",
                ClientID   = "",
                DeviceID   = "",
                languageID = App.appSettings.languageID,
                ServerID   = "",
                Email      = tbEmail.Text
            };

            try {
                LicenseResult result = await service.ExecuteAsync(request);

                if (result.statusCode != 0)
                {
                    throw new Exception(result.status);
                }

                tbEmail.Text = "";
                UpdateUI(false);
                licensePanel.IsVisible = true;
                emailPanel.IsVisible   = false;

                await DisplayAlert(AppResources.Info, AppResources.LicenseRequested, AppResources.OK);
            }
            catch (Exception ex) {
                UpdateUI(false);
                await DisplayAlert(AppResources.Error, ex.Message, AppResources.OK);
            }
        }
        async private void BtnActivateClicked(object sender, EventArgs e)
        {
            UpdateUI(true);
            LicenseService service = new LicenseService(ProgramVars.LicURL);
            LicenseRequest request = new LicenseRequest()
            {
                Method     = "Register",
                ClientID   = tbLicenseKey.Text,
                DeviceID   = App.appSettings.deviceID,
                languageID = App.appSettings.languageID,
                ServerID   = "",
                Email      = ""
            };

            try {
                LicenseResult result = await service.ExecuteAsync(request);

                if (result.statusCode != 0)
                {
                    throw new Exception(result.status);
                }
                App.appSettings.clientID       = request.ClientID;
                App.appSettings.serverID       = result.ServerID;
                App.appSettings.installationID = result.InstallationID;
                App.appSettings.isDemo         = result.IsDemo;
                App.appSettings.serviceURL     = result.URLs[0];
                App.appSettings.imageURL       = result.URLs[2];

                ProgramVars.URL             = App.appSettings.serviceURL;
                ProgramVars.ImageHandlerUrl = App.appSettings.imageURL;

                UpdateUI(false);
                await App.SaveAllPropertiesAsync();

                await App.Current.MainPage.Navigation.PopAsync(true);
            }
            catch (Exception ex) {
                UpdateUI(false);
                tbLicenseKey.Text = "";
                await DisplayAlert(AppResources.Error, ex.Message, AppResources.OK);
            }
        }
        async private void BtnLoginClicked(object sender, EventArgs e)
        {
            //0. Check if network available
            //
            if (Connectivity.NetworkAccess != NetworkAccess.Internet)
            {
                await DisplayAlert(AppResources.Warning, AppResources.NoNetwork, AppResources.OK);

                return;
            }

            await SetWaitStatus(true);

            // 1. Check license
            //
            LicenseService service = new LicenseService(ProgramVars.LicURL);
            LicenseRequest request = new LicenseRequest()
            {
                Method     = "Validate",
                ClientID   = App.appSettings.clientID,
                DeviceID   = App.appSettings.deviceID,
                languageID = App.appSettings.languageID,
                ServerID   = App.appSettings.serverID
            };

            try
            {
                LicenseResult result = await service.ExecuteAsync(request);

                if (result.statusCode != 0)
                {
                    App.appSettings.serverID = result.ServerID;
                    await App.SaveAllPropertiesAsync();

                    throw new Exception(result.status);
                }
                // Check if license is about to expire
                //
                int nrDaysValid = result.ExpirationDate.Subtract(DateTime.Now).Days;
                if (nrDaysValid < 30)
                {
                    await DisplayAlert(AppResources.Warning, $"License is about to expire in {nrDaysValid} days. Renew license !!!", AppResources.OK);
                }
                //

                App.appSettings.serverID       = result.ServerID;
                App.appSettings.installationID = result.InstallationID;
                App.appSettings.isDemo         = result.IsDemo;
                App.appSettings.serviceURL     = result.URLs[0];
                App.appSettings.imageURL       = result.URLs[2];

                ProgramVars.URL             = App.appSettings.serviceURL;
                ProgramVars.ImageHandlerUrl = App.appSettings.imageURL;

                //await App.SaveAllPropertiesAsync();
                await SetWaitStatus(false);
            }
            catch (Exception ex)
            {
                await SetWaitStatus(false);
                await DisplayAlert(AppResources.Error, ex.Message, AppResources.OK);

                //lbDemo.IsVisible = true;
                //lbDemo.Text = $"Error:{ex.Message}";
                return;
            }

            // 2. Goto login page
            //
            await App.Current.MainPage.Navigation.PushAsync(new LoginPage(), true);
        }