| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 | using System;using System.Collections.Generic;using System.Threading.Tasks;using InABox.Mobile.Shared;using Syncfusion.XForms.Core;using Syncfusion.XForms.PopupLayout;using Xamarin.CommunityToolkit.UI.Views;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<View> AlternateMenu => _alternateMenu.Children;                public IList<View> PrimaryMenu => _primaryMenu.Children;                public IList<View> PageContent => _content.Children;        public bool BackButtonEnabled        {            get => _backButton.IsVisible;            set => _backButton.IsVisible = value;        }                public MobilePage()        {            InitializeComponent();            activity_indicator.BackgroundColor = XF.Material.Forms.Material.Color.Primary;            activity_indicator.TextColor = XF.Material.Forms.Material.Color.OnPrimary;            _titleBar.BackgroundColor = XF.Material.Forms.Material.Color.Primary;            _titleLabel.TextColor = XF.Material.Forms.Material.Color.OnPrimary;            BackgroundColor = Color.WhiteSmoke;        }                protected override void OnAppearing()        {            ProgressVisible = false;                        XF.Material.Forms.Material.PlatformConfiguration.ChangeStatusBarColor(XF.Material.Forms.Material.Color.PrimaryVariant);                        UpdateBackgroundUpdateStatus();            Host.BackgroundUpdateStatusChanged += BackgroundUpdateStatusChanged;            UpdateTransportStatus();            Host.TransportConnected += TransportConnected;            Host.TransportDisconnected += TransportDisconnected;                         base.OnAppearing();                    }                protected override void OnDisappearing()        {            ProgressVisible = false;            Host.BackgroundUpdateStatusChanged -= BackgroundUpdateStatusChanged;            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);        }                protected virtual void UpdateTransportStatus()        {            _connectionIndicator.IsVisible = !Host.IsConnected();        }                private void BackgroundUpdateStatusChanged(object sender, EventArgs args)        {            Device.BeginInvokeOnMainThread(UpdateBackgroundUpdateStatus);        }        private void UpdateBackgroundUpdateStatus()        {            _updateIndicator.IsVisible = Host.IsBackgroundUpdateStatusActive;        }        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<bool> OnBackButtonClicked()        {            return true;        }                protected async Task<bool> 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 == 2)                    item.Save("Saved on Mobile Device");                else // Cancel (choice==1) or Tap outside box                    return false;                Dispatcher.BeginInvokeOnMainThread(() => Navigation.PopAsync());                return false;            }            return true;        }                protected void ShowPopup(Func<View> view, PopupManagerConfiguration config = null)             => PopupManager.ShowPopup(this, view, config);                protected void DismissPopup()             => PopupManager.DismissPopup();        public bool ProgressVisible        {            get => activity_indicator.IsBusy;            set            {                activity_frame.IsVisible = value;                activity_indicator.IsBusy = value;            }        }    }}
 |