public void RegisterBackButtonHandler(IBackButtonHandler handler) { if (!this.backButtonHandlers.Contains(handler)) { this.backButtonHandlers.Add(handler); } }
public void UnregisterBackButtonHandler(IBackButtonHandler handler) { if (this.backButtonHandlers.Contains(handler)) { this.backButtonHandlers.Remove(handler); } }
/// <inheritdoc/> public void RemoveHandler(IBackButtonHandler handler) { handler = handler ?? throw new ArgumentNullException(nameof(handler)); var entry = _handlers.FirstOrDefault(e => e.Handler == handler); if (entry == null) { throw new KeyNotFoundException($"The specified handler named '{handler.Name}' was not found."); } _handlers.Remove(entry); }
public async override void OnBackPressed() { IBackButtonHandler backButtonHandler = null; ViewModelBase viewModel = null; foreach (var fragment in this.GetFragmentManager().Fragments) { var page = fragment.GetType().GetProperty("Page")?.GetValue(fragment); if (page is StartPageView) { viewModel = (ViewModelBase)(page as StartPageView).BindingContext; if (viewModel.NavigationService.PreviousPageViewModel is StartPageViewModel) { backButtonHandler = viewModel as IBackButtonHandler; } } if (page is LinkItemView) { viewModel = (ViewModelBase)(page as LinkItemView).BindingContext; if (viewModel.NavigationService.PreviousPageViewModel is LinkItemViewModel) { backButtonHandler = viewModel as IBackButtonHandler; } } if (page is OptionsView) { viewModel = (ViewModelBase)(page as OptionsView).BindingContext; if (viewModel.NavigationService.PreviousPageViewModel is OptionsViewModel) { backButtonHandler = viewModel as IBackButtonHandler; } } if (backButtonHandler != null) { break; } } var backButtonHandled = await backButtonHandler?.HandleBackButton(viewModel); if (!backButtonHandled) { base.OnBackPressed(); } }
/// <inheritdoc/> public void AddHandler(IBackButtonHandler handler, int?priority = null) { handler = handler ?? throw new ArgumentNullException(nameof(handler)); int entryPriority = priority ?? (_handlers.Any() ? _handlers.Max(e => e.Priority) + DefaultPriorityIncrement : DefaultPriorityIncrement); var entry = new BackButtonHandlerEntry(handler, entryPriority); _handlers.Add(entry); _handlers.Sort(comparison: CompareEntries); // Sorts by Priority, high to low. int CompareEntries(BackButtonHandlerEntry left, BackButtonHandlerEntry right) { return(right.Priority.CompareTo(left.Priority)); } }
/// <summary> /// Creates a new instance of <see cref="BackButtonHandlerEntry"/>. /// </summary> public BackButtonHandlerEntry(IBackButtonHandler handler, int priority) { Handler = handler; Priority = priority; }
public void UnregisterBackButtonHandler(IBackButtonHandler handler) { }
/// <summary> /// Adds a <see cref="IBackButtonHandler"/> and return an <see cref="IDisposable"/> to conveniently remove it later. /// </summary> /// <param name="backButtonManager"></param> /// <param name="handler">The handler to add.</param> /// <param name="priority">The optional priority.</param> /// <returns>A disposable that will remove the handler when <see cref="IDisposable.Dispose"/> is invoked.</returns> public static IDisposable RegisterHandler(this IBackButtonManager backButtonManager, IBackButtonHandler handler, int?priority = null) { backButtonManager.AddHandler(handler, priority); return(new ActionDisposable(RemoveHandler)); void RemoveHandler() { backButtonManager.RemoveHandler(handler); } }