From 2a5a89dea2d2786b0e0ecc58e9621dab3fdd7369 Mon Sep 17 00:00:00 2001
From: Tristan Roux
Date: Wed, 13 Mar 2019 17:04:48 +0100
Subject: [PATCH] Solving bugs and reworking download/edit metadata image
downloading.
---
Opus/Resources/Portable Class/Browse.cs | 1 -
Opus/Resources/Portable Class/Downloader.cs | 49 +-----
Opus/Resources/Portable Class/EditMetaData.cs | 103 ++++--------
Opus/Resources/Portable Class/MusicPlayer.cs | 39 +----
Opus/Resources/Portable Class/Player.cs | 20 ++-
Opus/Resources/Portable Class/Playlist.cs | 58 ++++++-
.../Resources/Portable Class/YoutubeEngine.cs | 11 +-
Opus/Resources/Resource.Designer.cs | 156 ++++++++----------
Opus/Resources/values-es/strings.xml | 2 +-
Opus/Resources/values/strings.xml | 4 -
10 files changed, 195 insertions(+), 248 deletions(-)
diff --git a/Opus/Resources/Portable Class/Browse.cs b/Opus/Resources/Portable Class/Browse.cs
index 071b556..ba022ea 100644
--- a/Opus/Resources/Portable Class/Browse.cs
+++ b/Opus/Resources/Portable Class/Browse.cs
@@ -285,7 +285,6 @@ namespace Opus.Resources.Portable_Class
intent.PutExtra("file", item.Path);
context.StartService(intent);
- MainActivity.instance.ShowSmallPlayer();
MainActivity.instance.ShowPlayer();
MusicPlayer.UpdateQueueDataBase();
}
diff --git a/Opus/Resources/Portable Class/Downloader.cs b/Opus/Resources/Portable Class/Downloader.cs
index b3183b9..c14507e 100644
--- a/Opus/Resources/Portable Class/Downloader.cs
+++ b/Opus/Resources/Portable Class/Downloader.cs
@@ -211,48 +211,17 @@ namespace Opus.Resources.Portable_Class
meta.Tag.Performers = new string[] { artist };
meta.Tag.Album = title + " - " + artist;
meta.Tag.Comment = youtubeID;
-
- for (int i = 0; i < 3; i++)
+ IPicture[] pictures = new IPicture[1];
+ Bitmap bitmap = Picasso.With(Application.Context).Load(await MainActivity.GetBestThumb(thumbnails)).Transform(new RemoveBlackBorder(true)).Get();
+ byte[] data;
+ using (var MemoryStream = new MemoryStream())
{
- bool? canContinue = false;
- WebClient webClient = new WebClient();
- webClient.DownloadDataCompleted += (sender, e) =>
- {
- System.Console.WriteLine("&Error with thumb " + i + ": " + e.Error);
- if (e.Error == null)
- {
- IPicture[] pictures = new IPicture[1];
- Bitmap bitmap = Picasso.With(Application.Context).Load(thumbnails[i]).Transform(new RemoveBlackBorder(true)).Get();
- byte[] data;
- using (var MemoryStream = new MemoryStream())
- {
- bitmap.Compress(Bitmap.CompressFormat.Png, 0, MemoryStream);
- data = MemoryStream.ToArray();
- }
- bitmap.Recycle();
- pictures[0] = new Picture(data);
- meta.Tag.Pictures = pictures;
- canContinue = null;
- }
- else
- canContinue = true;
- };
- try
- {
- await webClient.DownloadDataTaskAsync(new System.Uri(thumbnails[i]));
- }
- catch { } //catch 404 errors
-
- while (canContinue == false)
- await Task.Delay(10);
-
- if (canContinue == null)
- {
- meta.Save();
- stream.Dispose();
- return;
- }
+ bitmap.Compress(Bitmap.CompressFormat.Png, 0, MemoryStream);
+ data = MemoryStream.ToArray();
}
+ bitmap.Recycle();
+ pictures[0] = new Picture(data);
+ meta.Tag.Pictures = pictures;
meta.Save();
stream.Dispose();
diff --git a/Opus/Resources/Portable Class/EditMetaData.cs b/Opus/Resources/Portable Class/EditMetaData.cs
index 70acf2c..412c812 100644
--- a/Opus/Resources/Portable Class/EditMetaData.cs
+++ b/Opus/Resources/Portable Class/EditMetaData.cs
@@ -2,6 +2,7 @@
using Android.App;
using Android.Content;
using Android.Content.PM;
+using Android.Graphics;
using Android.OS;
using Android.Preferences;
using Android.Provider;
@@ -19,6 +20,7 @@ using System.Threading.Tasks;
using TagLib;
using YoutubeExplode;
using YoutubeExplode.Models;
+using Picture = TagLib.Picture;
namespace Opus.Resources.Portable_Class
{
@@ -31,6 +33,7 @@ namespace Opus.Resources.Portable_Class
private TextView title, artist, album, youtubeID;
private ImageView albumArt;
private Android.Net.Uri artURI;
+ private string ytThumbUri;
private bool tempFile = false;
private bool hasPermission = false;
private const int RequestCode = 8539;
@@ -81,18 +84,10 @@ namespace Opus.Resources.Portable_Class
youtubeID.Text = song.YoutubeID;
albumArt.Click += AlbumArt_Click;
- if (song.AlbumArt == -1 || song.IsYt)
- {
- var songAlbumArtUri = Android.Net.Uri.Parse(song.Album);
- Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).Into(albumArt);
- }
- else
- {
- var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart");
- var songAlbumArtUri = ContentUris.WithAppendedId(songCover, song.AlbumArt);
+ var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart");
+ var songAlbumArtUri = ContentUris.WithAppendedId(songCover, song.AlbumArt);
- Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(albumArt);
- }
+ Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Into(albumArt);
}
private void AlbumArt_Click(object sender, System.EventArgs e)
@@ -198,11 +193,30 @@ namespace Opus.Resources.Portable_Class
meta.Tag.Album = album.Text;
meta.Tag.Comment = youtubeID.Text;
- if (artURI != null)
+ if (ytThumbUri != null)
+ {
+ await Task.Run(() =>
+ {
+ IPicture[] pictures = new IPicture[1];
+ Bitmap bitmap = Picasso.With(Application.Context).Load(ytThumbUri).Transform(new RemoveBlackBorder(true)).Get();
+ byte[] data;
+ using (var MemoryStream = new MemoryStream())
+ {
+ bitmap.Compress(Bitmap.CompressFormat.Png, 0, MemoryStream);
+ data = MemoryStream.ToArray();
+ }
+ bitmap.Recycle();
+ pictures[0] = new Picture(data);
+ meta.Tag.Pictures = pictures;
+
+ ytThumbUri = null;
+ });
+ }
+ else if (artURI != null)
{
IPicture[] pictures = new IPicture[1];
- Android.Graphics.Bitmap bitmap = null;
+ Bitmap bitmap = null;
if (tempFile)
{
await Task.Run(() =>
@@ -219,7 +233,7 @@ namespace Opus.Resources.Portable_Class
}
MemoryStream memoryStream = new MemoryStream();
- bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Jpeg, 100, memoryStream);
+ bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, memoryStream);
byte[] data = memoryStream.ToArray();
pictures[0] = new Picture(data);
meta.Tag.Pictures = pictures;
@@ -288,48 +302,8 @@ namespace Opus.Resources.Portable_Class
album.Text = video.Title + " - " + video.Author;
}
- string[] thumbnails = new string[] { video.Thumbnails.MaxResUrl, video.Thumbnails.StandardResUrl, video.Thumbnails.HighResUrl };
-
- for (int i = 0; i < 3; i++)
- {
- ISharedPreferences prefManager = PreferenceManager.GetDefaultSharedPreferences(this);
- string tempArt = Path.Combine(prefManager.GetString("downloadPath", Environment.GetExternalStoragePublicDirectory(Environment.DirectoryMusic).ToString()), "albumArt" + Path.GetExtension(thumbnails[i]));
- if (System.IO.File.Exists(tempArt))
- {
- await Task.Run(() => { System.IO.File.Delete(tempArt); });
- }
-
- bool? canContinue = false;
- WebClient webClient = new WebClient();
- webClient.DownloadDataCompleted += (sender, e) =>
- {
- System.Console.WriteLine("&Error with thumb " + i + ": " + e.Error);
- if (e.Error == null)
- {
- System.Console.WriteLine("&Error = null");
- System.IO.File.WriteAllBytes(tempArt, e.Result);
-
- Android.Net.Uri uri = Android.Net.Uri.FromFile(new Java.IO.File(tempArt));
- Picasso.With(this).Load(uri).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).MemoryPolicy(MemoryPolicy.NoCache, MemoryPolicy.NoStore).Into(albumArt);
- artURI = uri;
- tempFile = true;
- canContinue = null;
- }
- else
- canContinue = true;
- };
- try
- {
- await webClient.DownloadDataTaskAsync(new System.Uri(thumbnails[i]));
- }
- catch { } //catch 404 errors
-
- while (canContinue == false)
- await Task.Delay(10);
-
- if (canContinue == null)
- return;
- }
+ ytThumbUri = await MainActivity.GetBestThumb(new string[] { video.Thumbnails.MaxResUrl, video.Thumbnails.StandardResUrl, video.Thumbnails.HighResUrl });
+ Picasso.With(this).Load(ytThumbUri).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).MemoryPolicy(MemoryPolicy.NoCache, MemoryPolicy.NoStore).Into(albumArt);
}
void UndoChange()
@@ -339,20 +313,13 @@ namespace Opus.Resources.Portable_Class
album.Text = song.Album;
youtubeID.Text = song.YoutubeID;
- if (song.AlbumArt == -1 || song.IsYt)
- {
- var songAlbumArtUri = Android.Net.Uri.Parse(song.Album);
- Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(albumArt);
- }
- else
- {
- var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart");
- var songAlbumArtUri = ContentUris.WithAppendedId(songCover, song.AlbumArt);
+ var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart");
+ var songAlbumArtUri = ContentUris.WithAppendedId(songCover, song.AlbumArt);
- Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(albumArt);
- }
+ Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Into(albumArt);
- albumArt = null;
+ artURI = null;
+ ytThumbUri = null;
tempFile = false;
}
diff --git a/Opus/Resources/Portable Class/MusicPlayer.cs b/Opus/Resources/Portable Class/MusicPlayer.cs
index c5d0d56..d7e64ce 100644
--- a/Opus/Resources/Portable Class/MusicPlayer.cs
+++ b/Opus/Resources/Portable Class/MusicPlayer.cs
@@ -1052,45 +1052,12 @@ namespace Opus.Resources.Portable_Class
return currentID;
}
- public static void SetSeekBar(SeekBar bar)
+ public static void SeekTo(long positionMS)
{
if (!UseCastPlayer)
- {
- bar.Max = (int)player.Duration;
- bar.Progress = (int)player.CurrentPosition;
- bar.ProgressChanged += (sender, e) =>
- {
- int Progress = e.Progress;
-
- if (player != null && player.Duration - Progress <= 1500 && player.Duration - Progress > 0)
- ParseNextSong();
- };
- bar.StartTrackingTouch += (sender, e) =>
- {
- autoUpdateSeekBar = false;
- };
- bar.StopTrackingTouch += (sender, e) =>
- {
- autoUpdateSeekBar = true;
- if (!queue[CurrentID()].IsLiveStream)
- player.SeekTo(e.SeekBar.Progress);
- };
- }
+ player.SeekTo(positionMS);
else
- {
- bar.Max = (int)RemotePlayer.StreamDuration;
- bar.Progress = (int)RemotePlayer.ApproximateStreamPosition;
- bar.StartTrackingTouch += (sender, e) =>
- {
- autoUpdateSeekBar = false;
- };
- bar.StopTrackingTouch += (sender, e) =>
- {
- autoUpdateSeekBar = true;
- if (!queue[CurrentID()].IsLiveStream)
- RemotePlayer.Seek(e.SeekBar.Progress);
- };
- }
+ RemotePlayer.Seek(positionMS);
}
void AddSongToDataBase(Song item)
diff --git a/Opus/Resources/Portable Class/Player.cs b/Opus/Resources/Portable Class/Player.cs
index 403f096..53f6bb5 100644
--- a/Opus/Resources/Portable Class/Player.cs
+++ b/Opus/Resources/Portable Class/Player.cs
@@ -49,7 +49,6 @@ namespace Opus
{
instance = this;
View view = inflater.Inflate(Resource.Layout.player, container, false);
- Console.WriteLine("&Play button: " + view.FindViewById(Resource.Id.playButton));
if (!view.FindViewById(Resource.Id.playButton).HasOnClickListeners)
{
view.FindViewById(Resource.Id.downButton).Click += Down_Click;
@@ -68,6 +67,16 @@ namespace Opus
if (!MusicPlayer.isLiveStream)
timer.Text = string.Format("{0} | {1}", DurationToTimer(e.Progress), DurationToTimer((int)MusicPlayer.Duration));
};
+ bar.StartTrackingTouch += (sender, e) =>
+ {
+ MusicPlayer.autoUpdateSeekBar = false;
+ };
+ bar.StopTrackingTouch += async (sender, e) =>
+ {
+ MusicPlayer.autoUpdateSeekBar = true;
+ if (!(await MusicPlayer.GetItem()).IsLiveStream)
+ MusicPlayer.SeekTo(e.SeekBar.Progress);
+ };
DrawerLayout = view.FindViewById(Resource.Id.queueDrawer);
DrawerLayout.AddDrawerListener(new QueueListener(view.FindViewById(Resource.Id.queueBackground)));
@@ -91,7 +100,7 @@ namespace Opus
Song current = await MusicPlayer.GetItem();
- if (current.IsYt && current.Album == null)
+ if (current == null || (current.IsYt && current.Album == null))
return;
FrameLayout smallPlayer = MainActivity.instance.FindViewById(Resource.Id.smallPlayer);
@@ -196,6 +205,9 @@ namespace Opus
while (MusicPlayer.Duration < 2)
await Task.Delay(100);
+ if(spBar == null)
+ spBar = Activity.FindViewById(Resource.Id.spProgress);
+
if (current.IsLiveStream)
{
bar.Max = 1;
@@ -206,8 +218,8 @@ namespace Opus
}
else
{
+ Console.WriteLine("&Bar: " + bar + " timer: " + timer + " spBar: " + spBar);
bar.Max = (int)MusicPlayer.Duration;
- MusicPlayer.SetSeekBar(bar);
timer.Text = string.Format("{0} | {1}", DurationToTimer((int)MusicPlayer.CurrentPosition), DurationToTimer((int)MusicPlayer.Duration));
spBar.Max = (int)MusicPlayer.Duration;
spBar.Progress = (int)MusicPlayer.CurrentPosition;
@@ -287,7 +299,7 @@ namespace Opus
timer.Text = string.Format("{0} | {1}", DurationToTimer((int)MusicPlayer.CurrentPosition), DurationToTimer((int)MusicPlayer.Duration));
}
spBar.Progress = (int)MusicPlayer.CurrentPosition;
- handler.PostDelayed(UpdateSeekBar, 1000);
+ handler.PostDelayed(UpdateSeekBar, 100);
}
private string DurationToTimer(int duration)
diff --git a/Opus/Resources/Portable Class/Playlist.cs b/Opus/Resources/Portable Class/Playlist.cs
index e627fc8..e3ae1ff 100644
--- a/Opus/Resources/Portable Class/Playlist.cs
+++ b/Opus/Resources/Portable Class/Playlist.cs
@@ -533,10 +533,56 @@ namespace Opus.Resources.Portable_Class
}),
new BottomSheetAction(Resource.Drawable.Delete, Resources.GetString(Resource.String.delete), (sender, eventArg) =>
{
- if (local)
- RemovePlaylist(Position, item.LocalID);
+ if(item.SyncState == SyncState.True || item.SyncState == SyncState.Loading)
+ {
+ AlertDialog dialog = new AlertDialog.Builder(MainActivity.instance, MainActivity.dialogTheme)
+ .SetTitle(GetString(Resource.String.delete_playlist, item.Name))
+ .SetPositiveButton(Resource.String.yes, async (s, e) =>
+ {
+ try
+ {
+ PlaylistsResource.DeleteRequest deleteRequest = YoutubeEngine.youtubeService.Playlists.Delete(item.YoutubeID);
+ await deleteRequest.ExecuteAsync();
+
+ YoutubePlaylists.RemoveAt(Position - LocalPlaylists.Count);
+ adapter.NotifyItemRemoved(Position);
+
+ if (YoutubePlaylists.Count == 1)
+ {
+ YoutubePlaylists.Add(new PlaylistItem("EMPTY", null) { Owner = Resources.GetString(Resource.String.youtube_playlist_empty) });
+ adapter.NotifyItemInserted(LocalPlaylists.Count + YoutubePlaylists.Count);
+ }
+ }
+ catch (System.Net.Http.HttpRequestException)
+ {
+ MainActivity.instance.Timout();
+ return;
+ }
+
+ await Task.Run(() =>
+ {
+ SQLiteConnection db = new SQLiteConnection(System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "SyncedPlaylists.sqlite"));
+ db.CreateTable();
+
+ db.Delete(db.Table().ToList().Find(x => x.LocalID == item.LocalID));
+ });
+
+ ContentResolver resolver = Activity.ContentResolver;
+ Android.Net.Uri uri = Playlists.ExternalContentUri;
+ resolver.Delete(Playlists.ExternalContentUri, Playlists.InterfaceConsts.Id + "=?", new string[] { item.LocalID.ToString() });
+ })
+ .SetNegativeButton(Resource.String.no, (s, e) => { })
+ .Create();
+ dialog.Show();
+ }
else
- DeleteYoutubePlaylist(Position, item.YoutubeID);
+ {
+ if (local)
+ RemovePlaylist(Position, item.LocalID);
+ else
+ DeleteYoutubePlaylist(Position, item.YoutubeID);
+ }
+
bottomSheet.Dismiss();
})});
}
@@ -624,8 +670,7 @@ namespace Opus.Resources.Portable_Class
while (MusicPlayer.instance == null)
await Task.Delay(10);
- foreach (Song song in songs)
- MusicPlayer.instance.AddToQueue(song);
+ MusicPlayer.instance.AddToQueue(songs.ToArray());
}
}
@@ -987,9 +1032,6 @@ namespace Opus.Resources.Portable_Class
YoutubePlaylists.RemoveAt(position - LocalPlaylists.Count);
adapter.NotifyItemRemoved(position);
- foreach (PlaylistItem item in YoutubePlaylists)
- System.Console.WriteLine(item.Name);
-
if (YoutubePlaylists.Count == 1)
{
YoutubePlaylists.Add(new PlaylistItem("EMPTY", null) { Owner = Resources.GetString(Resource.String.youtube_playlist_empty) });
diff --git a/Opus/Resources/Portable Class/YoutubeEngine.cs b/Opus/Resources/Portable Class/YoutubeEngine.cs
index b12413d..36f50b7 100644
--- a/Opus/Resources/Portable Class/YoutubeEngine.cs
+++ b/Opus/Resources/Portable Class/YoutubeEngine.cs
@@ -613,7 +613,8 @@ namespace Opus.Resources.Portable_Class
public static async void DownloadFiles(string[] names, string[] videoIDs, string playlist)
{
ISharedPreferences prefManager = PreferenceManager.GetDefaultSharedPreferences(Android.App.Application.Context);
- if (prefManager.GetString("downloadPath", null) == null)
+ string downloadPath = prefManager.GetString("downloadPath", null);
+ if (downloadPath == null)
{
Snackbar snackBar = Snackbar.Make(MainActivity.instance.FindViewById(Resource.Id.snackBar), Resource.String.download_path_not_set, Snackbar.LengthLong).SetAction(Resource.String.set_path, (v) =>
{
@@ -622,6 +623,12 @@ namespace Opus.Resources.Portable_Class
});
snackBar.View.FindViewById(Resource.Id.snackbar_text).SetTextColor(Color.White);
snackBar.Show();
+
+ ISharedPreferencesEditor editor = prefManager.Edit();
+ editor.PutString("downloadPath", Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMusic).ToString());
+ editor.Commit();
+
+ downloadPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMusic).ToString();
}
Context context = Android.App.Application.Context;
@@ -638,7 +645,7 @@ namespace Opus.Resources.Portable_Class
files.Add(new DownloadFile(names[i], videoIDs[i], playlist));
}
- Downloader.instance.downloadPath = prefManager.GetString("downloadPath", Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMusic).ToString());
+ Downloader.instance.downloadPath = downloadPath;
Downloader.instance.maxDownload = prefManager.GetInt("maxDownload", 4);
Downloader.queue.AddRange(files);
diff --git a/Opus/Resources/Resource.Designer.cs b/Opus/Resources/Resource.Designer.cs
index 57c93fe..45b00ee 100644
--- a/Opus/Resources/Resource.Designer.cs
+++ b/Opus/Resources/Resource.Designer.cs
@@ -7198,17 +7198,11 @@ namespace Opus
// aapt resource value: 0x7f0d00eb
public const int all = 2131558635;
- // aapt resource value: 0x7f0d0133
- public const int and = 2131558707;
-
- // aapt resource value: 0x7f0d0134
- public const int and_more = 2131558708;
-
// aapt resource value: 0x7f0d0080
public const int appbar_scrolling_view_behavior = 2131558528;
- // aapt resource value: 0x7f0d013a
- public const int appearances = 2131558714;
+ // aapt resource value: 0x7f0d0136
+ public const int appearances = 2131558710;
// aapt resource value: 0x7f0d0129
public const int apply = 2131558697;
@@ -7225,8 +7219,8 @@ namespace Opus
// aapt resource value: 0x7f0d0130
public const int behavior = 2131558704;
- // aapt resource value: 0x7f0d0151
- public const int beta_available = 2131558737;
+ // aapt resource value: 0x7f0d014d
+ public const int beta_available = 2131558733;
// aapt resource value: 0x7f0d0081
public const int bottom_sheet_behavior = 2131558529;
@@ -7237,14 +7231,14 @@ namespace Opus
// aapt resource value: 0x7f0d012a
public const int cancel = 2131558698;
- // aapt resource value: 0x7f0d0157
- public const int cancelling = 2131558743;
+ // aapt resource value: 0x7f0d0153
+ public const int cancelling = 2131558739;
// aapt resource value: 0x7f0d00f3
public const int cant_delete = 2131558643;
- // aapt resource value: 0x7f0d0154
- public const int cant_play_non_youtube = 2131558740;
+ // aapt resource value: 0x7f0d0150
+ public const int cant_play_non_youtube = 2131558736;
// aapt resource value: 0x7f0d00b8
public const int cast = 2131558584;
@@ -7396,8 +7390,8 @@ namespace Opus
// aapt resource value: 0x7f0d0083
public const int character_counter_pattern = 2131558531;
- // aapt resource value: 0x7f0d0140
- public const int check_updates = 2131558720;
+ // aapt resource value: 0x7f0d013c
+ public const int check_updates = 2131558716;
// aapt resource value: 0x7f0d00b0
public const int clientID = 2131558576;
@@ -7480,8 +7474,8 @@ namespace Opus
// aapt resource value: 0x7f0d0113
public const int create_youtube = 2131558675;
- // aapt resource value: 0x7f0d013e
- public const int dark_theme = 2131558718;
+ // aapt resource value: 0x7f0d013a
+ public const int dark_theme = 2131558714;
// aapt resource value: 0x7f0d00db
public const int delete = 2131558619;
@@ -7498,8 +7492,8 @@ namespace Opus
// aapt resource value: 0x7f0d011b
public const int download_albumart = 2131558683;
- // aapt resource value: 0x7f0d0136
- public const int download_directory = 2131558710;
+ // aapt resource value: 0x7f0d0132
+ public const int download_directory = 2131558706;
// aapt resource value: 0x7f0d011c
public const int download_meta = 2131558684;
@@ -7516,14 +7510,14 @@ namespace Opus
// aapt resource value: 0x7f0d00f1
public const int downloading = 2131558641;
- // aapt resource value: 0x7f0d0155
- public const int downloading_notification = 2131558741;
+ // aapt resource value: 0x7f0d0151
+ public const int downloading_notification = 2131558737;
// aapt resource value: 0x7f0d0124
public const int downloading_status = 2131558692;
- // aapt resource value: 0x7f0d0152
- public const int downloading_update = 2131558738;
+ // aapt resource value: 0x7f0d014e
+ public const int downloading_update = 2131558734;
// aapt resource value: 0x7f0d00d2
public const int edit_metadata = 2131558610;
@@ -7648,9 +7642,6 @@ namespace Opus
// aapt resource value: 0x7f0d00e9
public const int folders = 2131558633;
- // aapt resource value: 0x7f0d0132
- public const int genre_nothing = 2131558706;
-
// aapt resource value: 0x7f0d0086
public const int hide_bottom_view_on_scroll_behavior = 2131558534;
@@ -7681,20 +7672,20 @@ namespace Opus
// aapt resource value: 0x7f0d00fb
public const int local_playlists = 2131558651;
- // aapt resource value: 0x7f0d0144
- public const int log_in = 2131558724;
+ // aapt resource value: 0x7f0d0140
+ public const int log_in = 2131558720;
- // aapt resource value: 0x7f0d0145
- public const int log_out = 2131558725;
+ // aapt resource value: 0x7f0d0141
+ public const int log_out = 2131558721;
- // aapt resource value: 0x7f0d0143
- public const int logged_in = 2131558723;
+ // aapt resource value: 0x7f0d013f
+ public const int logged_in = 2131558719;
- // aapt resource value: 0x7f0d0137
- public const int max_download = 2131558711;
+ // aapt resource value: 0x7f0d0133
+ public const int max_download = 2131558707;
- // aapt resource value: 0x7f0d0138
- public const int max_download_dialog = 2131558712;
+ // aapt resource value: 0x7f0d0134
+ public const int max_download_dialog = 2131558708;
// aapt resource value: 0x7f0d0123
public const int metadata = 2131558691;
@@ -7786,9 +7777,6 @@ namespace Opus
// aapt resource value: 0x7f0d0087
public const int mtrl_chip_close_icon_content_description = 2131558535;
- // aapt resource value: 0x7f0d0131
- public const int music_genre = 2131558705;
-
// aapt resource value: 0x7f0d00e6
public const int music_genres = 2131558630;
@@ -7807,8 +7795,8 @@ namespace Opus
// aapt resource value: 0x7f0d00f7
public const int no_lives = 2131558647;
- // aapt resource value: 0x7f0d0147
- public const int no_permission = 2131558727;
+ // aapt resource value: 0x7f0d0143
+ public const int no_permission = 2131558723;
// aapt resource value: 0x7f0d00f6
public const int no_playlist = 2131558646;
@@ -7819,17 +7807,17 @@ namespace Opus
// aapt resource value: 0x7f0d00ea
public const int no_song = 2131558634;
- // aapt resource value: 0x7f0d0148
- public const int no_song_mix = 2131558728;
+ // aapt resource value: 0x7f0d0144
+ public const int no_song_mix = 2131558724;
// aapt resource value: 0x7f0d00f5
public const int no_track = 2131558645;
- // aapt resource value: 0x7f0d0142
- public const int not_log = 2131558722;
+ // aapt resource value: 0x7f0d013e
+ public const int not_log = 2131558718;
- // aapt resource value: 0x7f0d014c
- public const int not_streamable = 2131558732;
+ // aapt resource value: 0x7f0d0148
+ public const int not_streamable = 2131558728;
// aapt resource value: 0x7f0d00bc
public const int nothing = 2131558588;
@@ -7843,8 +7831,8 @@ namespace Opus
// aapt resource value: 0x7f0d00c5
public const int open_youtube = 2131558597;
- // aapt resource value: 0x7f0d013f
- public const int others = 2131558719;
+ // aapt resource value: 0x7f0d013b
+ public const int others = 2131558715;
// aapt resource value: 0x7f0d0088
public const int password_toggle_content_description = 2131558536;
@@ -7987,32 +7975,32 @@ namespace Opus
// aapt resource value: 0x7f0d00dd
public const int sync_now = 2131558621;
- // aapt resource value: 0x7f0d0139
- public const int sync_remove = 2131558713;
+ // aapt resource value: 0x7f0d0135
+ public const int sync_remove = 2131558709;
// aapt resource value: 0x7f0d00f2
public const int syncing = 2131558642;
- // aapt resource value: 0x7f0d0156
- public const int tap_details = 2131558742;
+ // aapt resource value: 0x7f0d0152
+ public const int tap_details = 2131558738;
- // aapt resource value: 0x7f0d013b
- public const int theme = 2131558715;
+ // aapt resource value: 0x7f0d0137
+ public const int theme = 2131558711;
- // aapt resource value: 0x7f0d013c
- public const int theme_dialog = 2131558716;
+ // aapt resource value: 0x7f0d0138
+ public const int theme_dialog = 2131558712;
// aapt resource value: 0x7f0d00c4
public const int timer = 2131558596;
- // aapt resource value: 0x7f0d014a
- public const int timout = 2131558730;
+ // aapt resource value: 0x7f0d0146
+ public const int timout = 2131558726;
// aapt resource value: 0x7f0d0115
public const int title = 2131558677;
- // aapt resource value: 0x7f0d0146
- public const int undo = 2131558726;
+ // aapt resource value: 0x7f0d0142
+ public const int undo = 2131558722;
// aapt resource value: 0x7f0d011d
public const int undo_change = 2131558685;
@@ -8023,29 +8011,29 @@ namespace Opus
// aapt resource value: 0x7f0d010c
public const int unfork_playlist = 2131558668;
- // aapt resource value: 0x7f0d014b
- public const int unknow = 2131558731;
+ // aapt resource value: 0x7f0d0147
+ public const int unknow = 2131558727;
// aapt resource value: 0x7f0d00bb
public const int up_next = 2131558587;
- // aapt resource value: 0x7f0d0150
- public const int up_to_date = 2131558736;
+ // aapt resource value: 0x7f0d014c
+ public const int up_to_date = 2131558732;
// aapt resource value: 0x7f0d0125
public const int up_to_date_status = 2131558693;
- // aapt resource value: 0x7f0d014e
- public const int update = 2131558734;
+ // aapt resource value: 0x7f0d014a
+ public const int update = 2131558730;
+
+ // aapt resource value: 0x7f0d014b
+ public const int update_message = 2131558731;
+
+ // aapt resource value: 0x7f0d0149
+ public const int update_no_internet = 2131558729;
// aapt resource value: 0x7f0d014f
- public const int update_message = 2131558735;
-
- // aapt resource value: 0x7f0d014d
- public const int update_no_internet = 2131558733;
-
- // aapt resource value: 0x7f0d0153
- public const int updating = 2131558739;
+ public const int updating = 2131558735;
// aapt resource value: 0x7f0d003e
public const int v7_preference_off = 2131558462;
@@ -8053,20 +8041,20 @@ namespace Opus
// aapt resource value: 0x7f0d003f
public const int v7_preference_on = 2131558463;
- // aapt resource value: 0x7f0d0141
- public const int version = 2131558721;
-
- // aapt resource value: 0x7f0d0135
- public const int volume = 2131558709;
-
// aapt resource value: 0x7f0d013d
- public const int white_theme = 2131558717;
+ public const int version = 2131558717;
+
+ // aapt resource value: 0x7f0d0131
+ public const int volume = 2131558705;
+
+ // aapt resource value: 0x7f0d0139
+ public const int white_theme = 2131558713;
// aapt resource value: 0x7f0d012e
public const int yes = 2131558702;
- // aapt resource value: 0x7f0d0149
- public const int youtube_endpoint = 2131558729;
+ // aapt resource value: 0x7f0d0145
+ public const int youtube_endpoint = 2131558725;
// aapt resource value: 0x7f0d00fe
public const int youtube_loading_error = 2131558654;
diff --git a/Opus/Resources/values-es/strings.xml b/Opus/Resources/values-es/strings.xml
index 948012b..7dc0cfa 100644
--- a/Opus/Resources/values-es/strings.xml
+++ b/Opus/Resources/values-es/strings.xml
@@ -201,4 +201,4 @@
Descargando :
toque para mas detalles
Anulando...
-
+
\ No newline at end of file
diff --git a/Opus/Resources/values/strings.xml b/Opus/Resources/values/strings.xml
index 7058238..2b23759 100644
--- a/Opus/Resources/values/strings.xml
+++ b/Opus/Resources/values/strings.xml
@@ -159,10 +159,6 @@
No
Behavior
- Music genres your interested in
- Actually nothing
- and
- and more.
Volume
Download
Download directory