using System; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Threading.Tasks; using Aurora.Models.Media; using Xamarin.Forms; using Aurora.Design.Views.Main; namespace Aurora.Design.Views { public class BaseViewModel : INotifyPropertyChanged { public BaseViewModel() { } #region Player /// <summary> /// Command event handler for player play button /// </summary> public virtual void OnPlayButtonExecute() { } public virtual bool CanPlayButtonExecute() { return true; } /// <summary> /// Command event handler for player next button /// </summary> public virtual void OnNextButtonExecute() { } public virtual bool CanNextButtonExecute() { return true; } /// <summary> /// Command event handler for player previous button /// </summary> public virtual void OnPreviousButtonExecute() { } public virtual bool CanPreviousButtonExecute() { return true; } /// <summary> /// Delegate for interacting with main screen player control /// </summary> /// <value></value> public SetPlayerDelegate ChangePlayerState { get; set; } /// <summary> /// Delegate for checking if main screen player control is currently playing /// </summary> /// <value></value> public GetIsPlayingDelegate IsPlaying { get; set; } public ShowModalDelegate ShowModal { get; set; } public HideModalDelegate HideModal { get; set; } #endregion Player #region Lifecycle /// <summary> /// Called by main screen on view appearing /// </summary> /// <typeparam name="object"></typeparam> /// <returns></returns> public virtual Task OnActive() { return Task.FromResult<object>(null); } /// <summary> /// Called by main screen on view disappearing /// </summary> /// <typeparam name="object"></typeparam> /// <returns></returns> public virtual Task OnInactive() { return Task.FromResult<object>(null); } #endregion #region INotifyPropertyChanged Implementation public bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null) { if (Object.Equals(storage, value)) return false; storage = value; OnPropertyChanged(propertyName); return true; } public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged([CallerMemberName] string propertyName = "") { if (PropertyChanged == null) return; PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); } #endregion } }