From ca1d79137bb9012269469f1f2e77124b1a30f870 Mon Sep 17 00:00:00 2001 From: amazing-username Date: Sun, 9 Jun 2019 10:09:52 -0700 Subject: [PATCH] Continuing work on the Settings and color scheme aspects. Deciding on the default colors for the dark theme. $14 and #5 --- Mear/Mear.Android/Mear.Android.csproj | 4 +- Mear/Mear.Android/Resources/values/colors.xml | 8 +- Mear/Mear.iOS/Mear.iOS.csproj | 2 +- Mear/Mear/App.xaml | 46 ++++++++ Mear/Mear/App.xaml.cs | 3 +- Mear/Mear/Mear.csproj | 5 +- Mear/Mear/Models/Settings.cs | 18 +++ Mear/Mear/Playback/MearPlayer.cs | 46 +++++++- .../Repositories/Database/DBRepository.cs | 1 + .../Database/DBSettingsRepository.cs | 110 ++++++++++++++++++ Mear/Mear/Utilities/SongMetadataRetriever.cs | 2 - Mear/Mear/ViewModels/AlbumViewModel.cs | 2 + Mear/Mear/ViewModels/ArtistViewModel.cs | 2 + Mear/Mear/ViewModels/SettingsViewModel.cs | 7 +- Mear/Mear/Views/AlbumView.xaml | 1 + Mear/Mear/Views/AlbumView.xaml.cs | 1 + Mear/Mear/Views/ArtistView.xaml | 1 + Mear/Mear/Views/MearPlayerView.xaml.cs | 32 +++-- Mear/Mear/Views/SettingsPage.xaml | 3 +- Mear/Mear/Views/SettingsPage.xaml.cs | 3 + 20 files changed, 261 insertions(+), 36 deletions(-) create mode 100644 Mear/Mear/Models/Settings.cs create mode 100644 Mear/Mear/Repositories/Database/DBSettingsRepository.cs diff --git a/Mear/Mear.Android/Mear.Android.csproj b/Mear/Mear.Android/Mear.Android.csproj index 50f594f..256ecb1 100644 --- a/Mear/Mear.Android/Mear.Android.csproj +++ b/Mear/Mear.Android/Mear.Android.csproj @@ -56,7 +56,7 @@ - 0.6.1 + 0.6.7 106.6.9 @@ -64,7 +64,7 @@ 1.5.231 - + diff --git a/Mear/Mear.Android/Resources/values/colors.xml b/Mear/Mear.Android/Resources/values/colors.xml index d9f6e0b..4471e04 100644 --- a/Mear/Mear.Android/Resources/values/colors.xml +++ b/Mear/Mear.Android/Resources/values/colors.xml @@ -1,7 +1,7 @@ - #FFFFFF - #3F51B5 - #303F9F - #FF4081 + #000000 + #555555 + #000000 + #bbaa11 diff --git a/Mear/Mear.iOS/Mear.iOS.csproj b/Mear/Mear.iOS/Mear.iOS.csproj index 28002df..050047e 100644 --- a/Mear/Mear.iOS/Mear.iOS.csproj +++ b/Mear/Mear.iOS/Mear.iOS.csproj @@ -130,7 +130,7 @@ 1.5.231 - + diff --git a/Mear/Mear/App.xaml b/Mear/Mear/App.xaml index 9b7cb1b..61c53ec 100644 --- a/Mear/Mear/App.xaml +++ b/Mear/Mear/App.xaml @@ -3,6 +3,52 @@ xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Mear.App"> + #000010 + #ffffff + #000000 + + #ffffff + #000000 + #333333 + + #660066 + #ffccff + #ffe6ff + + #ffffee + #aaaaaa + + #ffffee + + + + + + + + + \ No newline at end of file diff --git a/Mear/Mear/App.xaml.cs b/Mear/Mear/App.xaml.cs index 46ee60b..44e29fa 100644 --- a/Mear/Mear/App.xaml.cs +++ b/Mear/Mear/App.xaml.cs @@ -13,7 +13,8 @@ namespace Mear InitializeComponent(); MainPage = new Landing(); - //MainPage = new MusicLibrary(); + MainPage.SetValue(NavigationPage.BarBackgroundColorProperty, Color.Black); + MainPage.SetValue(NavigationPage.BarTextColorProperty, Color.White); } protected override void OnStart() diff --git a/Mear/Mear/Mear.csproj b/Mear/Mear/Mear.csproj index 29bbc79..aa062d5 100644 --- a/Mear/Mear/Mear.csproj +++ b/Mear/Mear/Mear.csproj @@ -12,11 +12,10 @@ - + - - + diff --git a/Mear/Mear/Models/Settings.cs b/Mear/Mear/Models/Settings.cs new file mode 100644 index 0000000..b9c046c --- /dev/null +++ b/Mear/Mear/Models/Settings.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; +using System.Text; + +using SQLite; + +namespace Mear.Models +{ + [DataContract] + [Table("Settings")] + public class Settings + { + [PrimaryKey, Column("Id"), AutoIncrement] + public int Id { get; set; } + public bool DarkTheme { get; set; } = true; + } +} diff --git a/Mear/Mear/Playback/MearPlayer.cs b/Mear/Mear/Playback/MearPlayer.cs index f719d2e..be59961 100644 --- a/Mear/Mear/Playback/MearPlayer.cs +++ b/Mear/Mear/Playback/MearPlayer.cs @@ -15,6 +15,7 @@ using Mear.Models; using Mear.Models.Authentication; using Mear.Models.PlayerControls; using Mear.Repositories.Database; +using Mear.Repositories.Remote; using Mear.Utilities; namespace Mear.Playback @@ -87,10 +88,10 @@ namespace Mear.Playback InitializeRepeatMode(); break; case PlayControls.PAUSE: - await CrossMediaManager.Current.Pause(); + PauseSong(); break; case PlayControls.RESUME: - await CrossMediaManager.Current.Play(); + ResumeSong(); break; case PlayControls.STREAM: song = StreamSong(song); @@ -148,6 +149,13 @@ namespace Mear.Playback return null; } + public static async Task DownloadSongToFS() + { + var songRepo = new RemoteSongRepository(); + songRepo.DownloadSong(_song); + + _song.Downloaded = true; + } public static async Task PlaySong(Song song) { try @@ -161,6 +169,17 @@ namespace Mear.Playback var msg = ex.Message; } } + public static async Task RemoveSongFromFS() + { + var dbSongRepo = new DBSongRepository(); + var plyCount = new DBPlayCountRepository(); + dbSongRepo.DeleteSong(_song); + plyCount.DeletePlayCount(_song); + + File.Delete(_song.SongPath); + + _song.Downloaded = false; + } public static async Task SeekTo(double songProress) { double newPosition = (songProress / 100) * ((double)_song.Duration); @@ -184,6 +203,21 @@ namespace Mear.Playback return string.Empty; } + public static string RetrieveShuffleString() + { + var controlRepo = new DBMusicControlsRepository(); + var shuffleOn = controlRepo.IsShuffleOn(); + try + { + return shuffleOn ? "ShfOn" : "ShfOff"; + } + catch (Exception ex) + { + var msg = ex.Message; + } + + return string.Empty; + } public static bool IsPlaying() { @@ -258,6 +292,10 @@ namespace Mear.Playback CrossMediaManager.Current.RepeatMode = mode; } + private static async Task PauseSong() + { + await CrossMediaManager.Current.Pause(); + } private static async Task PlaySong(string songPath) { await CrossMediaManager.Current.Play(songPath); @@ -268,6 +306,10 @@ namespace Mear.Playback _initialized = true; } } + private static async Task ResumeSong() + { + await CrossMediaManager.Current.Play(); + } private static void ToggleRepeat() { diff --git a/Mear/Mear/Repositories/Database/DBRepository.cs b/Mear/Mear/Repositories/Database/DBRepository.cs index 8f48343..401b15e 100644 --- a/Mear/Mear/Repositories/Database/DBRepository.cs +++ b/Mear/Mear/Repositories/Database/DBRepository.cs @@ -14,6 +14,7 @@ namespace Mear.Repositories.Database #region Fields protected SQLiteConnection _Db; protected string _dbPath; + protected string _tableName; #endregion diff --git a/Mear/Mear/Repositories/Database/DBSettingsRepository.cs b/Mear/Mear/Repositories/Database/DBSettingsRepository.cs new file mode 100644 index 0000000..ace75a4 --- /dev/null +++ b/Mear/Mear/Repositories/Database/DBSettingsRepository.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Text; + +using Mear.Models; + +namespace Mear.Repositories.Database +{ + public class DBSettingsRepository : DBRepository + { + #region Fields + #endregion + + + #region Properties + #endregion + + + #region Constructors + public DBSettingsRepository() + { + _tableName = "Settings"; + Initialize(); + InitializeTable(); + } + #endregion + + + #region Methods + public bool IsDarkThemeOn() + { + try + { + if (DoesTableExist(_tableName)) + { + bool? darkTheme = RetrieveSettings().DarkTheme; + + if (darkTheme != null) + { + return darkTheme.Value; + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + } + + return true; + } + + public void UpdateDarkTheme() + { + try + { + if (DoesTableExist(_tableName)) + { + var settings = RetrieveSettings(); + settings.DarkTheme = !settings.DarkTheme; + + _Db.Update(settings); + } + } + catch (Exception ex) + { + var msg = ex.Message; + } + } + + private Settings RetrieveSettings() + { + try + { + var settings = _Db.Table().First(); + + return settings; + } + catch (Exception ex) + { + var msg = ex.Message; + } + + return null; + } + + private void InitializeTable() + { + try + { + if (!DoesTableExist(_tableName)) + { + _Db.CreateTable(); + } + + var settings = RetrieveSettings(); + + if (settings == null) + { + var initSettings = new Settings(); + _Db.Insert(initSettings); + } + } + catch (Exception ex) + { + var msg = ex.Message; + } + } + #endregion + } +} diff --git a/Mear/Mear/Utilities/SongMetadataRetriever.cs b/Mear/Mear/Utilities/SongMetadataRetriever.cs index b437330..45f912a 100644 --- a/Mear/Mear/Utilities/SongMetadataRetriever.cs +++ b/Mear/Mear/Utilities/SongMetadataRetriever.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Text; -using TagLib; - using Mear.Models; using IOFile = System.IO.File; diff --git a/Mear/Mear/ViewModels/AlbumViewModel.cs b/Mear/Mear/ViewModels/AlbumViewModel.cs index f1926b9..61bfc66 100644 --- a/Mear/Mear/ViewModels/AlbumViewModel.cs +++ b/Mear/Mear/ViewModels/AlbumViewModel.cs @@ -63,6 +63,8 @@ namespace Mear.ViewModels { var msg = ex.Message; } + + IsRefreshing = false; } #endregion } diff --git a/Mear/Mear/ViewModels/ArtistViewModel.cs b/Mear/Mear/ViewModels/ArtistViewModel.cs index 8d0c656..b1507c4 100644 --- a/Mear/Mear/ViewModels/ArtistViewModel.cs +++ b/Mear/Mear/ViewModels/ArtistViewModel.cs @@ -63,6 +63,8 @@ namespace Mear.ViewModels { var msg = ex.Message; } + + IsRefreshing = false; } #endregion } diff --git a/Mear/Mear/ViewModels/SettingsViewModel.cs b/Mear/Mear/ViewModels/SettingsViewModel.cs index bc9ba7e..d42ddb5 100644 --- a/Mear/Mear/ViewModels/SettingsViewModel.cs +++ b/Mear/Mear/ViewModels/SettingsViewModel.cs @@ -5,6 +5,8 @@ using System.Text; using Xamarin.Forms; +using Mear.Repositories.Database; + namespace Mear.ViewModels { public class SettingsViewModel : BaseViewModel @@ -36,10 +38,13 @@ namespace Mear.ViewModels #region Methods private SwitchItem RetrieveColorSchemeSwitch() { + var settingsRepo = new DBSettingsRepository(); + var darkTheme = settingsRepo.IsDarkThemeOn(); + var colorScheme = new SwitchItem { Title = "Dark Theme", - IsOn = true + IsOn = darkTheme }; return colorScheme; diff --git a/Mear/Mear/Views/AlbumView.xaml b/Mear/Mear/Views/AlbumView.xaml index a0187b3..07e3528 100644 --- a/Mear/Mear/Views/AlbumView.xaml +++ b/Mear/Mear/Views/AlbumView.xaml @@ -19,6 +19,7 @@ IsPullToRefreshEnabled="True" RowHeight="80" RefreshCommand="{Binding RefreshAlbums}" + IsRefreshing="{Binding IsRefreshing}" ItemSelected="AlbumListView_ItemSelected" > diff --git a/Mear/Mear/Views/AlbumView.xaml.cs b/Mear/Mear/Views/AlbumView.xaml.cs index 5b55712..a994271 100644 --- a/Mear/Mear/Views/AlbumView.xaml.cs +++ b/Mear/Mear/Views/AlbumView.xaml.cs @@ -32,6 +32,7 @@ namespace Mear.Views } #endregion + #region Methods #region Events private void AlbumListView_ItemSelected(object sender, SelectedItemChangedEventArgs e) diff --git a/Mear/Mear/Views/ArtistView.xaml b/Mear/Mear/Views/ArtistView.xaml index 39f8cac..c48ca69 100644 --- a/Mear/Mear/Views/ArtistView.xaml +++ b/Mear/Mear/Views/ArtistView.xaml @@ -20,6 +20,7 @@ IsPullToRefreshEnabled="True" RowHeight="80" RefreshCommand="{Binding RefreshArtists}" + IsRefreshing="{Binding IsRefreshing}" ItemSelected="ArtistListView_ItemSelected" > diff --git a/Mear/Mear/Views/MearPlayerView.xaml.cs b/Mear/Mear/Views/MearPlayerView.xaml.cs index e5c38d1..5821a0f 100644 --- a/Mear/Mear/Views/MearPlayerView.xaml.cs +++ b/Mear/Mear/Views/MearPlayerView.xaml.cs @@ -100,14 +100,16 @@ namespace Mear.Views var dur = _song.Duration; var endTime = songCnvrt.ConvertToSongTime(dur.Value); - var controlRepo = new DBMusicControlsRepository(); - var shuffleOn = controlRepo.IsShuffleOn(); - - Shuffle.Text = (shuffleOn) ? "ShfOn" : "ShfOff"; + Shuffle.Text = MearPlayer.RetrieveShuffleString(); Repeat.Text = MearPlayer.RetrieveRepeatString(); EndTime.Text = endTime; } + private void RemoveSyncToolbar() + { + var act = ToolbarItems.Where(tl => tl.Priority == 1).First(); + ToolbarItems.Remove(act); + } #region Background private async Task BackgroundSongElasping() @@ -212,10 +214,8 @@ namespace Mear.Views private void Shuffle_Clicked(object sender, EventArgs e) { var musicCtrl = new DBMusicControlsRepository(); - var control = musicCtrl.IsShuffleOn(); - Shuffle.Text = (!control) ? "ShfOn" : "ShfOff"; - musicCtrl.UpdateShuffle(); + Shuffle.Text = MearPlayer.RetrieveShuffleString(); } @@ -227,24 +227,20 @@ namespace Mear.Views private void Download_Clicked(object sender, EventArgs e) { - var act = ToolbarItems.Where(tl => tl.Priority == 1).First(); - ToolbarItems.Remove(act); - var songRepo = new RemoteSongRepository(); - songRepo.DownloadSong(_song); + RemoveSyncToolbar(); + MearPlayer.DownloadSongToFS(); + ToolbarItems.Add(RemoveOption()); + + _song.Downloaded = true; } private async void Remove_Clicked(object sender, EventArgs e) { - var act = ToolbarItems.Where(tl => tl.Priority == 1).First(); + RemoveSyncToolbar(); + MearPlayer.RemoveSongFromFS(); - ToolbarItems.Remove(act); - var dbSongRepo = new DBSongRepository(); - var plyCount = new DBPlayCountRepository(); - dbSongRepo.DeleteSong(_song); - plyCount.DeletePlayCount(_song); _song.Downloaded = false; - File.Delete(_song.SongPath); ToolbarItems.Add(DownloadOption()); } diff --git a/Mear/Mear/Views/SettingsPage.xaml b/Mear/Mear/Views/SettingsPage.xaml index 0046896..d4b8911 100644 --- a/Mear/Mear/Views/SettingsPage.xaml +++ b/Mear/Mear/Views/SettingsPage.xaml @@ -31,8 +31,7 @@ d:Text="{Binding .}" LineBreakMode="NoWrap" FontSize="14" /> - diff --git a/Mear/Mear/Views/SettingsPage.xaml.cs b/Mear/Mear/Views/SettingsPage.xaml.cs index f1c69a5..286afce 100644 --- a/Mear/Mear/Views/SettingsPage.xaml.cs +++ b/Mear/Mear/Views/SettingsPage.xaml.cs @@ -33,6 +33,9 @@ namespace Mear.Views #region Events private void Switch_Toggled(object sender, ToggledEventArgs e) { + var val = e; + var valOne = sender; + var yp = ""; } #endregion #endregion