From 65cb0d2def613eeb7e4b3736675d65264e7216c9 Mon Sep 17 00:00:00 2001 From: Lukasz Stanislawski Date: Mon, 21 Dec 2020 14:36:57 +0100 Subject: [PATCH] Add Appearing/Disappearing events Handle Disappearing in ExercisePreviewView to stop player. --- Fitness/Controls/NavigationStack.cs | 4 +++ Fitness/Controls/Page.cs | 47 ++++++++++++++++++++++++++++++------ Fitness/Views/ExercisePreviewView.cs | 20 +++++---------- 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/Fitness/Controls/NavigationStack.cs b/Fitness/Controls/NavigationStack.cs index 41b0724..9126ab3 100644 --- a/Fitness/Controls/NavigationStack.cs +++ b/Fitness/Controls/NavigationStack.cs @@ -27,11 +27,13 @@ namespace Fitness.Controls if (pages.TryPeek(out Page last)) { last.ConnectedPage = page; + last.InvokeDisappearing(); } page.ConnectedPage = last; Add(page); pages.Push(page); + page.InvokeAppearing(); } public void Pop() @@ -54,6 +56,7 @@ namespace Fitness.Controls { if (pages.TryPeek(out Page last)) { + last.InvokeDisappearing(); Remove(last); pages.Pop(); } @@ -63,6 +66,7 @@ namespace Fitness.Controls { if (pages.TryPeek(out Page current)) { + current.InvokeAppearing(); current.Show(); } } diff --git a/Fitness/Controls/Page.cs b/Fitness/Controls/Page.cs index fea2ced..02385d6 100644 --- a/Fitness/Controls/Page.cs +++ b/Fitness/Controls/Page.cs @@ -18,6 +18,17 @@ namespace Fitness.Controls HeightResizePolicy = ResizePolicyType.FillToParent; } + /// + /// An event triggered when page is brought to foreground. + /// + public event EventHandler Appearing; + + /// + /// An event triggered when page is being hidden - eg. removed from + /// stack or covered with another page. + /// + public event EventHandler Disappearing; + public PageTransitionCollection PageTransitions { get; set; } internal Page ConnectedPage { get; set; } @@ -27,14 +38,6 @@ namespace Fitness.Controls return ConnectedPage?.BuildConnectedAnimationContext(); } - public virtual void OnTransitionStarted() - { - } - - public virtual void OnTransitionEnded() - { - } - internal ConnectedAnimationsContext BuildConnectedAnimationContext() { var context = new ConnectedAnimationsContext(); @@ -67,6 +70,34 @@ namespace Fitness.Controls } } + internal void InvokeAppearing() + { + OnAppearing(); + Appearing?.Invoke(this, null); + } + + internal void InvokeDisappearing() + { + OnDisappearing(); + Disappearing?.Invoke(this, null); + } + + protected virtual void OnTransitionStarted() + { + } + + protected virtual void OnTransitionEnded() + { + } + + protected virtual void OnAppearing() + { + } + + protected virtual void OnDisappearing() + { + } + private void TransitionsFinished(object o, EventArgs args) { PageTransitions.TransitionFinished -= TransitionsFinished; diff --git a/Fitness/Views/ExercisePreviewView.cs b/Fitness/Views/ExercisePreviewView.cs index 424c6f8..9cdd297 100644 --- a/Fitness/Views/ExercisePreviewView.cs +++ b/Fitness/Views/ExercisePreviewView.cs @@ -18,7 +18,7 @@ namespace Fitness.Views InitializeCallbacks(); } - public override void OnTransitionEnded() + protected override void OnTransitionEnded() { CreateVideoUrlBinding(); @@ -27,9 +27,13 @@ namespace Fitness.Views this.temp.Hide(); } + protected override void OnDisappearing() + { + this.player.Stop(); + } + private void InitializeCallbacks() { - this.VisibilityChanged += PageVisibilityChanged; this.reviewButton.Clicked += ReplyVideo; this.nextButton.Clicked += ReplyVideo; this.previousButton.Clicked += ReplyVideo; @@ -54,18 +58,6 @@ namespace Fitness.Views this.player.SetBinding(VideoView.ResourceUrlProperty, binding); } - private void PageVisibilityChanged(object sender, VisibilityChangedEventArgs args) - { - if (args.Visibility == true) - { - this.player.Play(); - } - else - { - this.player.Stop(); - } - } - private void ReplyVideo(object sender, EventArgs args) { this.player.Stop(); -- 2.7.4