using System; using System.Collections.Generic; using System.Threading.Tasks; using Syncfusion.XForms.Core; using Syncfusion.XForms.PopupLayout; using Xamarin.Forms; using Xamarin.Forms.Xaml; using XF.Material.Forms.UI.Dialogs; namespace InABox.Mobile { // public class BackButtonClickedEventArgs : CancelEventArgs // { // // } // // public delegate void BackButtonClickedEvent(object sender, BackButtonClickedEventArgs args); [XamlCompilation(XamlCompilationOptions.Compile)] public partial class MobilePage { public static IModelHost Host { get; set; } public IList AlternateMenu => _alternateMenu.Children; public IList PrimaryMenu => _primaryMenu.Children; public IList PageContent => _content.Children; public bool BackButtonEnabled { get => _backButton.IsVisible; set => _backButton.IsVisible = value; } //public event BackButtonClickedEvent BackButtonClicked; private SfPopupLayout _popup = new SfPopupLayout(); public MobilePage() { InitializeComponent(); _titleBar.BackgroundColor = XF.Material.Forms.Material.Color.Primary; _titleLabel.TextColor = XF.Material.Forms.Material.Color.OnPrimary; BackgroundColor = Color.WhiteSmoke; } protected override void OnAppearing() { XF.Material.Forms.Material.PlatformConfiguration.ChangeStatusBarColor(XF.Material.Forms.Material.Color.PrimaryVariant); Host.TransportConnected += TransportConnected; Host.TransportDisconnected += TransportDisconnected; UpdateTransportStatus(); base.OnAppearing(); } protected override void OnDisappearing() { Host.TransportConnected -= TransportConnected; Host.TransportDisconnected -= TransportDisconnected; base.OnDisappearing(); } private void TransportDisconnected(TransportDisconnectedEventArgs args) => UpdateConnectionStatus(); private void TransportConnected(TransportConnectedEventArgs args) => UpdateConnectionStatus(); private void UpdateConnectionStatus() { Device.BeginInvokeOnMainThread(UpdateTransportStatus); } //private static Task _snackbar = null; protected virtual void UpdateTransportStatus() { // ConnectionIndicator.Image = App.Data.IsConnected() // ? ImageSource.FromFile("transparent.png") // : ImageSource.FromFile("disconnected.png"); //ImageSource.FromFile("Images/nodata.png"); _connectionIndicator.IsVisible = !Host.IsConnected(); // if (!App.Data.IsConnected() && (_snackbar == null)) // _snackbar = MaterialDialog.Instance.LoadingSnackbarAsync(message: "No Connection Available!"); // // else if (App.Data.IsConnected() && (_snackbar != null) && (_snackbar.Result != null)) // { // _snackbar.Result.DismissAsync(); // _snackbar = null; // } } private async void _backButton_OnClicked(object sender, EventArgs e) { if (await OnBackButtonClicked()) Navigation.PopAsync(); // if (OnBackButtonPressed()) // { // if (await ConfirmChanges()) // var args = new BackButtonClickedEventArgs() { Cancel = false }; // BackButtonClicked?.Invoke(this, args); // if (!args.Cancel) // // } } protected virtual async Task OnBackButtonClicked() { return true; } protected async Task ConfirmChanges(IShell item) { if (item.IsChanged()) { var choice = await MaterialDialog.Instance.SelectActionAsync("Confirm Cancel?", new string[] { "Yes, Cancel", "Keep Editing", "Save Changes" }); if (choice == 0) item.Cancel(); else if (choice == 1) return false; else if (choice == 2) item.Save("Saved on Mobile Device"); Dispatcher.BeginInvokeOnMainThread(() => Navigation.PopAsync()); return false; } return true; } protected void ShowPopup(Func view, int height = 500, int width = 300, int padding = 10) { _popup.PopupView.HeightRequest = height; _popup.PopupView.WidthRequest = width; _popup.PopupView.ShowHeader = false; _popup.PopupView.ShowFooter = false; _popup.PopupView.ContentTemplate = new DataTemplate(() => { Grid grid = new Grid() { Margin = padding, Padding = padding}; grid.Children.Add(view()); return grid; }); _popup.Show(); } protected void DismissPopup() { _popup.Dismiss(); } public bool ProgressVisible { get => activity_indicator.IsRunning; set => activity_indicator.IsRunning = value; } } }