MobilePage.xaml.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using Syncfusion.XForms.Core;
  5. using Syncfusion.XForms.PopupLayout;
  6. using Xamarin.Forms;
  7. using Xamarin.Forms.Xaml;
  8. using XF.Material.Forms.UI.Dialogs;
  9. namespace InABox.Mobile
  10. {
  11. // public class BackButtonClickedEventArgs : CancelEventArgs
  12. // {
  13. //
  14. // }
  15. //
  16. // public delegate void BackButtonClickedEvent(object sender, BackButtonClickedEventArgs args);
  17. [XamlCompilation(XamlCompilationOptions.Compile)]
  18. public partial class MobilePage
  19. {
  20. public static IModelHost Host { get; set; }
  21. public IList<View> AlternateMenu => _alternateMenu.Children;
  22. public IList<View> PrimaryMenu => _primaryMenu.Children;
  23. public IList<View> PageContent => _content.Children;
  24. public bool BackButtonEnabled
  25. {
  26. get => _backButton.IsVisible;
  27. set => _backButton.IsVisible = value;
  28. }
  29. //public event BackButtonClickedEvent BackButtonClicked;
  30. private SfPopupLayout _popup = new SfPopupLayout();
  31. public MobilePage()
  32. {
  33. InitializeComponent();
  34. _titleBar.BackgroundColor = XF.Material.Forms.Material.Color.Primary;
  35. _titleLabel.TextColor = XF.Material.Forms.Material.Color.OnPrimary;
  36. BackgroundColor = Color.WhiteSmoke;
  37. }
  38. protected override void OnAppearing()
  39. {
  40. XF.Material.Forms.Material.PlatformConfiguration.ChangeStatusBarColor(XF.Material.Forms.Material.Color.PrimaryVariant);
  41. Host.TransportConnected += TransportConnected;
  42. Host.TransportDisconnected += TransportDisconnected;
  43. UpdateTransportStatus();
  44. base.OnAppearing();
  45. }
  46. protected override void OnDisappearing()
  47. {
  48. Host.TransportConnected -= TransportConnected;
  49. Host.TransportDisconnected -= TransportDisconnected;
  50. base.OnDisappearing();
  51. }
  52. private void TransportDisconnected(TransportDisconnectedEventArgs args) => UpdateConnectionStatus();
  53. private void TransportConnected(TransportConnectedEventArgs args) => UpdateConnectionStatus();
  54. private void UpdateConnectionStatus()
  55. {
  56. Device.BeginInvokeOnMainThread(UpdateTransportStatus);
  57. }
  58. //private static Task<IMaterialModalPage> _snackbar = null;
  59. protected virtual void UpdateTransportStatus()
  60. {
  61. // ConnectionIndicator.Image = App.Data.IsConnected()
  62. // ? ImageSource.FromFile("transparent.png")
  63. // : ImageSource.FromFile("disconnected.png"); //ImageSource.FromFile("Images/nodata.png");
  64. _connectionIndicator.IsVisible = !Host.IsConnected();
  65. // if (!App.Data.IsConnected() && (_snackbar == null))
  66. // _snackbar = MaterialDialog.Instance.LoadingSnackbarAsync(message: "No Connection Available!");
  67. //
  68. // else if (App.Data.IsConnected() && (_snackbar != null) && (_snackbar.Result != null))
  69. // {
  70. // _snackbar.Result.DismissAsync();
  71. // _snackbar = null;
  72. // }
  73. }
  74. private async void _backButton_OnClicked(object sender, EventArgs e)
  75. {
  76. if (await OnBackButtonClicked())
  77. Navigation.PopAsync();
  78. // if (OnBackButtonPressed())
  79. // {
  80. // if (await ConfirmChanges())
  81. // var args = new BackButtonClickedEventArgs() { Cancel = false };
  82. // BackButtonClicked?.Invoke(this, args);
  83. // if (!args.Cancel)
  84. //
  85. // }
  86. }
  87. protected virtual async Task<bool> OnBackButtonClicked()
  88. {
  89. return true;
  90. }
  91. protected async Task<bool> ConfirmChanges(IShell item)
  92. {
  93. if (item.IsChanged())
  94. {
  95. var choice = await MaterialDialog.Instance.SelectActionAsync("Confirm Cancel?",
  96. new string[] { "Yes, Cancel", "Keep Editing", "Save Changes" });
  97. if (choice == 0)
  98. item.Cancel();
  99. else if (choice == 1)
  100. return false;
  101. else if (choice == 2)
  102. item.Save("Saved on Mobile Device");
  103. Dispatcher.BeginInvokeOnMainThread(() => Navigation.PopAsync());
  104. return false;
  105. }
  106. return true;
  107. }
  108. protected void ShowPopup(Func<View> view, int height = 500, int width = 300, int padding = 10)
  109. {
  110. _popup.PopupView.HeightRequest = height;
  111. _popup.PopupView.WidthRequest = width;
  112. _popup.PopupView.ShowHeader = false;
  113. _popup.PopupView.ShowFooter = false;
  114. _popup.PopupView.ContentTemplate = new DataTemplate(() =>
  115. {
  116. Grid grid = new Grid() { Margin = padding, Padding = padding};
  117. grid.Children.Add(view());
  118. return grid;
  119. });
  120. _popup.Show();
  121. }
  122. protected void DismissPopup()
  123. {
  124. _popup.Dismiss();
  125. }
  126. public bool ProgressVisible
  127. {
  128. get => activity_indicator.IsRunning;
  129. set => activity_indicator.IsRunning = value;
  130. }
  131. }
  132. }