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 { private BaseMedia _baseMedia; public BaseViewModel() { } #region Player /// /// Command event handler for player play button /// public virtual void OnPlayExecute() { } public virtual bool CanPlayExecute() { return true; } /// /// Command event handler for player next button /// public virtual void OnNextExecute() { } public virtual bool CanNextExecute() { return true; } /// /// Command event handler for player previous button /// public virtual void OnPreviousExecute() { } public virtual bool CanPreviousExecute() { return true; } /// /// Model for the currently playing music. /// /// public BaseMedia Media { get { return this._baseMedia; } set { if (value != _baseMedia) { _baseMedia = value; if (this.SetPlayerMetadata != null) { SetPlayerMetadata.Invoke(value); } } } } public SetPlayerMetadataDelegate SetPlayerMetadata { get; set; } #endregion Player #region Lifecycle public virtual void OnActive() { } public virtual void OnInactive() { } #endregion #region INotifyPropertyChanged Implementation public bool SetProperty(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 } }