From: aman.jeph Date: Tue, 9 Nov 2021 04:40:28 +0000 (+0530) Subject: Adding rive animation for track without thumbnail X-Git-Tag: submit/tizen/20211109.094344^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d374a4b18d91a686d9abfdba96afab50fc96b946;p=profile%2Fiot%2Fapps%2Fdotnet%2Fmusic-player.git Adding rive animation for track without thumbnail Change-Id: Idc5bf355c2465da0424b1e1fdc5a0d94b646d8c3 Signed-off-by: aman.jeph --- diff --git a/music-player/Common/UIColors.cs b/music-player/Common/UIColors.cs index 2562765..44bb8e8 100755 --- a/music-player/Common/UIColors.cs +++ b/music-player/Common/UIColors.cs @@ -12,6 +12,7 @@ namespace MusicPlayer.Common public static readonly Color HEXEEEFF1 = new Color(0.9333f, 0.9373f, 0.9450f, 1.0f); public static readonly Color HEX000C2B = new Color(0.0f, 0.0471f, 0.1686f, 1.0f); public static readonly Color HEXC3CAD2 = new Color(0.7647f, 0.7922f, 0.8235f, 1.0f); + public static readonly Color HEX1473E6 = new Color(0.0784f, 0.4510f, 0.9020f, 1.0f); public static readonly Color LyricsBackground = new Color(0.0f, 0.0f, 0.0f, 0.85f); public static readonly Color ItemSeperator = new Color(0.75f, 0.79f, 0.82f, 1.0f); diff --git a/music-player/Models/Track.cs b/music-player/Models/Track.cs index d611cb3..bf15a36 100755 --- a/music-player/Models/Track.cs +++ b/music-player/Models/Track.cs @@ -23,6 +23,8 @@ namespace MusicPlayer.Models IsSelected = false; } + public bool IsThumbPathExists { get; private set; } + private string trackTitle; public string TrackTitle @@ -86,7 +88,13 @@ namespace MusicPlayer.Models get => thumbnailPath; set { - string thumb = string.IsNullOrEmpty(value) ? Resources.GetImagePath() + "thumbnail.png" : value; + string thumb = value; + IsThumbPathExists = true; + if (string.IsNullOrEmpty(value)) + { + thumb = Resources.GetImagePath() + "thumbnail.png"; + IsThumbPathExists = false; + } SetProperty(ref thumbnailPath, thumb); } } diff --git a/music-player/ViewModels/LyricsViewModel.cs b/music-player/ViewModels/LyricsViewModel.cs index b9db5a3..77ea5c9 100755 --- a/music-player/ViewModels/LyricsViewModel.cs +++ b/music-player/ViewModels/LyricsViewModel.cs @@ -1,14 +1,32 @@ -using Tizen.Multimedia; +using System; +using Tizen.NUI; +using Tizen.Multimedia; using MusicPlayer.Models; using MusicPlayer.Common; -using Tizen.NUI; namespace MusicPlayer.ViewModels { + public enum AnimationState + { + Animation, + NoAnimation, + AnimationPlay, + AnimationPause, + } + class TrackThumbStateEventArgs : EventArgs + { + public TrackThumbStateEventArgs(AnimationState animationState) + { + CurrentAnimationState = animationState; + } + public AnimationState CurrentAnimationState { get; private set; } + } + class LyricsViewModel : PropertyNotifier { internal LyricsModel lyricsModel; - + private AnimationState trackState; + public event EventHandler TrackThumbState; public LyricsViewModel() { lyricsModel = new LyricsModel(); @@ -30,6 +48,8 @@ namespace MusicPlayer.ViewModels set { currentTrack = value; + AnimationState state = currentTrack.IsThumbPathExists ? AnimationState.NoAnimation : AnimationState.Animation; + UpdateTrackThumbState(state); FilePath = currentTrack.FilePath; lyricsModel.ThumbPath = currentTrack.ThumbnailPath; lyricsModel.Lyrics = GetLyrics(FilePath); @@ -44,6 +64,12 @@ namespace MusicPlayer.ViewModels set => SetProperty(ref lyricsBackgroundColor, value); } + public void UpdateTrackThumbState(AnimationState state) + { + trackState = state; + TrackThumbState?.Invoke(this, new TrackThumbStateEventArgs(trackState)); + } + private string GetLyrics(string path) { string lyrics = string.Empty; diff --git a/music-player/ViewModels/PlayerViewModel.cs b/music-player/ViewModels/PlayerViewModel.cs index 4eb4cf3..a07a247 100755 --- a/music-player/ViewModels/PlayerViewModel.cs +++ b/music-player/ViewModels/PlayerViewModel.cs @@ -324,11 +324,13 @@ namespace MusicPlayer.ViewModels { case PlayingStatus.Playing: PlayButtonState = PauseState; + lyricsViewModel.UpdateTrackThumbState(AnimationState.AnimationPlay); break; case PlayingStatus.Paused: // Fall Through case PlayingStatus.Stopped: // Fall Through case PlayingStatus.None: PlayButtonState = PlayState; + lyricsViewModel.UpdateTrackThumbState(AnimationState.AnimationPause); break; } } diff --git a/music-player/Views/LyricsView.cs b/music-player/Views/LyricsView.cs index 63c55fc..7ecf43a 100755 --- a/music-player/Views/LyricsView.cs +++ b/music-player/Views/LyricsView.cs @@ -1,4 +1,5 @@ using Tizen.NUI; +using Tizen.NUI.Extension; using Tizen.NUI.Binding; using Tizen.NUI.BaseComponents; using Tizen.NUI.Components; @@ -18,15 +19,77 @@ namespace MusicPlayer.Views private ImageView thumbView; private ScrollableBase scrollView; private TextLabel lyricsLabel; + private RiveAnimationView albumRiveAnimation; + private bool isAnimating; public LyricsView(LyricsViewModel lyricsViewModel) : base() { this.lyricsViewModel = lyricsViewModel; BindingContext = lyricsViewModel.lyricsModel; Size2D = new Size2D(ViewSize, ViewSize); - + isAnimating = false; AddThumbnail(); AddLyricsView(); + AddRiveAnimation(); + lyricsViewModel.TrackThumbState += OnTrackStateChanged; + } + + protected override void Dispose(DisposeTypes type) + { + if(Disposed) + { + return; + } + if(type == DisposeTypes.Explicit) + { + albumRiveAnimation.Stop(); + base.Remove(albumRiveAnimation); + albumRiveAnimation.Dispose(); + albumRiveAnimation = null; + + base.Remove(lyricsLabel); + lyricsLabel.Dispose(); + lyricsLabel = null; + + base.Remove(scrollView); + scrollView.Dispose(); + scrollView = null; + + base.Remove(thumbView); + thumbView.Dispose(); + thumbView = null; + lyricsViewModel.TrackThumbState -= OnTrackStateChanged; + } + base.Dispose(type); + } + + private void OnTrackStateChanged(object sender, TrackThumbStateEventArgs e) + { + if(e.CurrentAnimationState == AnimationState.Animation) + { + thumbView.Hide(); + scrollView.Hide(); + albumRiveAnimation.Show(); + isAnimating = true; + } + else if(e.CurrentAnimationState == AnimationState.NoAnimation) + { + UnSetAnimationPlayingState(); + albumRiveAnimation.Stop(); + albumRiveAnimation.Hide(); + thumbView.Show(); + scrollView.Show(); + isAnimating = false; + } + else if(e.CurrentAnimationState == AnimationState.AnimationPlay) + { + SetAnimationPlayingState(); + albumRiveAnimation.Play(); + } + else if(e.CurrentAnimationState == AnimationState.AnimationPause) + { + UnSetAnimationPlayingState(); + } } private void AddThumbnail() @@ -67,5 +130,36 @@ namespace MusicPlayer.Views lyricsLabel.SetBinding(TextLabel.TextProperty, "Lyrics"); scrollView.Add(lyricsLabel); } + + private void AddRiveAnimation() + { + albumRiveAnimation = new RiveAnimationView(Resources.GetImagePath() + "music.riv") + { + HeightResizePolicy = ResizePolicyType.FillToParent, + WidthResizePolicy = ResizePolicyType.FillToParent, + }; + base.Add(albumRiveAnimation); + albumRiveAnimation.Hide(); + } + + private void SetAnimationPlayingState() + { + if(albumRiveAnimation != null && isAnimating) + { + albumRiveAnimation.EnableAnimation("Loop", true); + albumRiveAnimation.EnableAnimation("Start", true); + albumRiveAnimation.EnableAnimation("Stop", false); + } + } + + private void UnSetAnimationPlayingState() + { + if (albumRiveAnimation != null && isAnimating) + { + albumRiveAnimation.EnableAnimation("Loop", false); + albumRiveAnimation.EnableAnimation("Start", false); + albumRiveAnimation.EnableAnimation("Stop", true); + } + } } } diff --git a/music-player/res/images/music.riv b/music-player/res/images/music.riv new file mode 100755 index 0000000..dbac0a9 Binary files /dev/null and b/music-player/res/images/music.riv differ diff --git a/packaging/org.tizen.MusicPlayer-1.0.0.tpk b/packaging/org.tizen.MusicPlayer-1.0.0.tpk index e542fbc..3fe6e47 100755 Binary files a/packaging/org.tizen.MusicPlayer-1.0.0.tpk and b/packaging/org.tizen.MusicPlayer-1.0.0.tpk differ