Adding create mix option.

This commit is contained in:
Tristan Roux
2019-01-27 19:14:28 +01:00
parent 35e301705c
commit 1441d2cf12
7 changed files with 264 additions and 202 deletions

View File

@@ -1182,72 +1182,10 @@ namespace MusicApp
YtMix:
ProgressBar parseProgress = FindViewById<ProgressBar>(Resource.Id.ytProgress);
parseProgress.Visibility = ViewStates.Visible;
parseProgress.ScaleY = 6;
if (sender != null)
QuickPlay(this, e);
if (!await WaitForYoutube())
{
Snackbar snackBar = Snackbar.Make(FindViewById(Resource.Id.snackBar), "Error while loading. Check your internet connection and check if your logged in.", Snackbar.LengthLong);
snackBar.View.FindViewById<TextView>(Resource.Id.snackbar_text).SetTextColor(Color.White);
snackBar.Show();
return;
}
List<Song> tracks = new List<Song>();
try
{
YoutubeClient client = new YoutubeClient();
Video video = await client.GetVideoAsync(MusicPlayer.queue[MusicPlayer.CurrentID()].YoutubeID);
var ytPlaylistRequest = YoutubeEngine.youtubeService.PlaylistItems.List("snippet, contentDetails");
ytPlaylistRequest.PlaylistId = video.GetVideoMixPlaylistId();
ytPlaylistRequest.MaxResults = 50;
var ytPlaylist = await ytPlaylistRequest.ExecuteAsync();
foreach (var item in ytPlaylist.Items)
{
if (item.Snippet.Title != "[Deleted video]" && item.Snippet.Title != "Private video" && item.Snippet.Title != "Deleted video" && item.ContentDetails.VideoId != MusicPlayer.queue[MusicPlayer.CurrentID()].YoutubeID)
{
Song song = new Song(item.Snippet.Title, item.Snippet.ChannelTitle, item.Snippet.Thumbnails.High.Url, item.ContentDetails.VideoId, -1, -1, item.ContentDetails.VideoId, true, false);
tracks.Add(song);
}
}
}
catch (Exception ex)
{
if (ex is System.Net.Http.HttpRequestException)
instance.Timout();
else
instance.Unknow();
return;
}
Song current = MusicPlayer.queue[MusicPlayer.CurrentID()];
Random r = new Random();
tracks = tracks.OrderBy(x => r.Next()).ToList();
Intent intent = new Intent(this, typeof(MusicPlayer));
StartService(intent);
while (MusicPlayer.instance == null)
await Task.Delay(100);
MusicPlayer.instance.AddToQueue(tracks.ToArray());
ShowSmallPlayer();
ShowPlayer();
Player.instance?.UpdateNext();
Home.instance?.RefreshQueue();
Queue.instance?.Refresh();
parseProgress.Visibility = ViewStates.Gone;
YoutubeEngine.CreateMix((await MusicPlayer.GetItem()).YoutubeID);
}
public void YoutubeEndPointChanged()

View File

@@ -160,7 +160,7 @@ namespace MusicApp.Resources.Portable_Class
bottomView.FindViewById<TextView>(Resource.Id.bsArtist).Text = item.Artist;
if (item.Album == null)
{
var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart");
var songCover = Uri.Parse("content://media/external/audio/albumart");
var nextAlbumArtUri = ContentUris.WithAppendedId(songCover, item.AlbumArt);
Picasso.With(MainActivity.instance).Load(nextAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(bottomView.FindViewById<ImageView>(Resource.Id.bsArt));
@@ -180,11 +180,19 @@ namespace MusicApp.Resources.Portable_Class
if (item.IsYt)
{
actions.Add(new BottomSheetAction(Resource.Drawable.Download, MainActivity.instance.Resources.GetString(Resource.String.download), (sender, eventArg) =>
actions.AddRange(new BottomSheetAction[]
{
YoutubeEngine.Download(item.Title, item.YoutubeID);
bottomSheet.Dismiss();
}));
new BottomSheetAction(Resource.Drawable.PlayCircle, MainActivity.instance.Resources.GetString(Resource.String.create_mix_from_song), (sender, eventArg) =>
{
YoutubeEngine.CreateMix(item.YoutubeID);
bottomSheet.Dismiss();
}),
new BottomSheetAction(Resource.Drawable.Download, MainActivity.instance.Resources.GetString(Resource.String.download), (sender, eventArg) =>
{
YoutubeEngine.Download(item.Title, item.YoutubeID);
bottomSheet.Dismiss();
})
});
}
else
{
@@ -256,11 +264,19 @@ namespace MusicApp.Resources.Portable_Class
}
else
{
actions.Add(new BottomSheetAction(Resource.Drawable.Download, MainActivity.instance.Resources.GetString(Resource.String.download), (sender, eventArg) =>
actions.AddRange(new BottomSheetAction[]
{
YoutubeEngine.Download(item.Title, item.YoutubeID);
bottomSheet.Dismiss();
}));
new BottomSheetAction(Resource.Drawable.PlayCircle, MainActivity.instance.Resources.GetString(Resource.String.create_mix_from_song), (sender, eventArg) =>
{
YoutubeEngine.CreateMix(item.YoutubeID);
bottomSheet.Dismiss();
}),
new BottomSheetAction(Resource.Drawable.Download, MainActivity.instance.Resources.GetString(Resource.String.download), (sender, eventArg) =>
{
YoutubeEngine.Download(item.Title, item.YoutubeID);
bottomSheet.Dismiss();
})
});
}
bottomSheet.FindViewById<ListView>(Resource.Id.bsItems).Adapter = new BottomSheetAdapter(MainActivity.instance, Resource.Layout.BottomSheetText, actions);

View File

@@ -740,14 +740,22 @@ namespace MusicApp.Resources.Portable_Class
}
else
{
actions.Add(new BottomSheetAction(Resource.Drawable.Download, Resources.GetString(Resource.String.download), (sender, eventArg) =>
actions.AddRange(new BottomSheetAction[]
{
if (item.IsYt)
YoutubeEngine.Download(item.Title, item.YoutubeID);
else
Browse.EditMetadata(item);
bottomSheet.Dismiss();
}));
new BottomSheetAction(Resource.Drawable.PlayCircle, Resources.GetString(Resource.String.create_mix_from_song), (sender, eventArg) =>
{
YoutubeEngine.CreateMix(item.YoutubeID);
bottomSheet.Dismiss();
}),
new BottomSheetAction(Resource.Drawable.Download, Resources.GetString(Resource.String.download), (sender, eventArg) =>
{
if (item.IsYt)
YoutubeEngine.Download(item.Title, item.YoutubeID);
else
Browse.EditMetadata(item);
bottomSheet.Dismiss();
})
});
}
bottomSheet.FindViewById<ListView>(Resource.Id.bsItems).Adapter = new BottomSheetAdapter(MainActivity.instance, Resource.Layout.BottomSheetText, actions);

View File

@@ -218,11 +218,19 @@ namespace MusicApp.Resources.Portable_Class
if (item.IsYt)
{
actions.Add(new BottomSheetAction(Resource.Drawable.Download, Resources.GetString(Resource.String.download), (sender, eventArg) =>
actions.AddRange(new BottomSheetAction[]
{
YoutubeEngine.Download(item.Title, item.YoutubeID);
bottomSheet.Dismiss();
}));
new BottomSheetAction(Resource.Drawable.PlayCircle, Resources.GetString(Resource.String.create_mix_from_song), (sender, eventArg) =>
{
YoutubeEngine.CreateMix(item.YoutubeID);
bottomSheet.Dismiss();
}),
new BottomSheetAction(Resource.Drawable.Download, Resources.GetString(Resource.String.download), (sender, eventArg) =>
{
YoutubeEngine.Download(item.Title, item.YoutubeID);
bottomSheet.Dismiss();
})
});
}
else
{

View File

@@ -19,6 +19,8 @@ using System.IO;
using System.Linq;
using System.Threading.Tasks;
using TagLib;
using YoutubeExplode;
using YoutubeExplode.Models;
using CursorLoader = Android.Support.V4.Content.CursorLoader;
namespace MusicApp.Resources.Portable_Class
@@ -476,6 +478,11 @@ namespace MusicApp.Resources.Portable_Class
PlayLast(item.YoutubeID, item.Title, item.Artist, item.Album);
bottomSheet.Dismiss();
}),
new BottomSheetAction(Resource.Drawable.PlayCircle, Resources.GetString(Resource.String.create_mix_from_song), (sender, eventArg) =>
{
CreateMix(item.YoutubeID);
bottomSheet.Dismiss();
}),
new BottomSheetAction(Resource.Drawable.PlaylistAdd, Resources.GetString(Resource.String.add_to_playlist), (sender, eventArg) => { Browse.GetPlaylist(item); bottomSheet.Dismiss(); }),
new BottomSheetAction(Resource.Drawable.Download, Resources.GetString(Resource.String.download), (sender, eventArg) =>
{
@@ -547,6 +554,20 @@ namespace MusicApp.Resources.Portable_Class
ShowRecomandations(videoID);
}
public static void Play(string videoID)
{
MusicPlayer.queue?.Clear();
MusicPlayer.UpdateQueueDataBase();
MusicPlayer.currentID = -1;
Intent intent = new Intent(Android.App.Application.Context, typeof(MusicPlayer));
intent.SetAction("YoutubePlay");
intent.PutExtra("action", "Play");
intent.PutExtra("file", videoID);
Android.App.Application.Context.StartService(intent);
ShowRecomandations(videoID);
}
public static async void PlayFiles(Song[] files)
{
if (files.Length < 1)
@@ -965,6 +986,73 @@ namespace MusicApp.Resources.Portable_Class
MusicPlayer.instance.RandomPlay(songs, false);
}
public static async void CreateMix(string videoID)
{
if(MusicPlayer.queue.Count == 0)
{
Play(videoID);
}
ProgressBar parseProgress = MainActivity.instance.FindViewById<ProgressBar>(Resource.Id.ytProgress);
parseProgress.Visibility = ViewStates.Visible;
parseProgress.ScaleY = 6;
if (!await MainActivity.instance.WaitForYoutube())
{
Snackbar snackBar = Snackbar.Make(MainActivity.instance.FindViewById(Resource.Id.snackBar), "Error while loading. Check your internet connection and check if your logged in.", Snackbar.LengthLong);
snackBar.View.FindViewById<TextView>(Resource.Id.snackbar_text).SetTextColor(Color.White);
snackBar.Show();
return;
}
List<Song> tracks = new List<Song>();
try
{
YoutubeClient client = new YoutubeClient();
var video = await client.GetVideoAsync(MusicPlayer.queue[MusicPlayer.CurrentID()].YoutubeID);
var ytPlaylistRequest = youtubeService.PlaylistItems.List("snippet, contentDetails");
ytPlaylistRequest.PlaylistId = video.GetVideoMixPlaylistId();
ytPlaylistRequest.MaxResults = 50;
var ytPlaylist = await ytPlaylistRequest.ExecuteAsync();
foreach (var item in ytPlaylist.Items)
{
if (item.Snippet.Title != "[Deleted video]" && item.Snippet.Title != "Private video" && item.Snippet.Title != "Deleted video" && item.ContentDetails.VideoId != MusicPlayer.queue[MusicPlayer.CurrentID()].YoutubeID)
{
Song song = new Song(item.Snippet.Title, item.Snippet.ChannelTitle, item.Snippet.Thumbnails.High.Url, item.ContentDetails.VideoId, -1, -1, item.ContentDetails.VideoId, true, false);
tracks.Add(song);
}
}
}
catch (Exception ex)
{
if (ex is System.Net.Http.HttpRequestException)
MainActivity.instance.Timout();
else
MainActivity.instance.Unknow();
return;
}
Random r = new Random();
tracks = tracks.OrderBy(x => r.Next()).ToList();
Intent intent = new Intent(MainActivity.instance, typeof(MusicPlayer));
MainActivity.instance.StartService(intent);
while (MusicPlayer.instance == null)
await Task.Delay(100);
MusicPlayer.instance.AddToQueue(tracks.ToArray());
MainActivity.instance.ShowPlayer();
Player.instance?.UpdateNext();
Home.instance?.RefreshQueue();
Queue.instance?.Refresh();
parseProgress.Visibility = ViewStates.Gone;
}
public static async void DownloadPlaylist(string playlist, string playlistID, bool showToast = true)
{
if (!await MainActivity.instance.WaitForYoutube())

View File

@@ -7201,35 +7201,35 @@ namespace MusicApp
// aapt resource value: 0x7f0c0072
public const int abc_toolbar_collapse_description = 2131492978;
// aapt resource value: 0x7f0c00e1
public const int add_playlist = 2131493089;
// aapt resource value: 0x7f0c00e2
public const int add_playlist = 2131493090;
// aapt resource value: 0x7f0c00d0
public const int add_to_library = 2131493072;
// aapt resource value: 0x7f0c00d1
public const int add_to_library = 2131493073;
// aapt resource value: 0x7f0c00c2
public const int add_to_playlist = 2131493058;
// aapt resource value: 0x7f0c00c3
public const int add_to_playlist = 2131493059;
// aapt resource value: 0x7f0c00ca
public const int add_to_queue = 2131493066;
// aapt resource value: 0x7f0c00cb
public const int add_to_queue = 2131493067;
// aapt resource value: 0x7f0c00db
public const int all = 2131493083;
// aapt resource value: 0x7f0c00ea
public const int and = 2131493098;
// aapt resource value: 0x7f0c00dc
public const int all = 2131493084;
// aapt resource value: 0x7f0c00eb
public const int and_more = 2131493099;
public const int and = 2131493099;
// aapt resource value: 0x7f0c00ec
public const int and_more = 2131493100;
// aapt resource value: 0x7f0c0080
public const int appbar_scrolling_view_behavior = 2131492992;
// aapt resource value: 0x7f0c00f2
public const int appearances = 2131493106;
// aapt resource value: 0x7f0c00f3
public const int appearances = 2131493107;
// aapt resource value: 0x7f0c00e5
public const int apply = 2131493093;
// aapt resource value: 0x7f0c00e6
public const int apply = 2131493094;
// aapt resource value: 0x7f0c00bc
public const int autoplay = 2131493052;
@@ -7237,8 +7237,8 @@ namespace MusicApp
// aapt resource value: 0x7f0c00bd
public const int autoplay_desc = 2131493053;
// aapt resource value: 0x7f0c00e7
public const int behavior = 2131493095;
// aapt resource value: 0x7f0c00e8
public const int behavior = 2131493096;
// aapt resource value: 0x7f0c0081
public const int bottom_sheet_behavior = 2131492993;
@@ -7246,8 +7246,8 @@ namespace MusicApp
// aapt resource value: 0x7f0c00b1
public const int browse = 2131493041;
// aapt resource value: 0x7f0c00e6
public const int cancel = 2131493094;
// aapt resource value: 0x7f0c00e7
public const int cancel = 2131493095;
// aapt resource value: 0x7f0c00b6
public const int cast = 2131493046;
@@ -7378,8 +7378,8 @@ namespace MusicApp
// aapt resource value: 0x7f0c0025
public const int cast_unmute = 2131492901;
// aapt resource value: 0x7f0c00de
public const int channels = 2131493086;
// aapt resource value: 0x7f0c00df
public const int channels = 2131493087;
// aapt resource value: 0x7f0c0082
public const int character_counter_content_description = 2131492994;
@@ -7387,8 +7387,8 @@ namespace MusicApp
// aapt resource value: 0x7f0c0083
public const int character_counter_pattern = 2131492995;
// aapt resource value: 0x7f0c00f8
public const int check_updates = 2131493112;
// aapt resource value: 0x7f0c00f9
public const int check_updates = 2131493113;
// aapt resource value: 0x7f0c002b
public const int common_google_play_services_enable_button = 2131492907;
@@ -7447,20 +7447,23 @@ namespace MusicApp
// aapt resource value: 0x7f0c00be
public const int create_mix = 2131493054;
// aapt resource value: 0x7f0c00f6
public const int dark_theme = 2131493110;
// aapt resource value: 0x7f0c00c2
public const int create_mix_from_song = 2131493058;
// aapt resource value: 0x7f0c00cc
public const int delete = 2131493068;
// aapt resource value: 0x7f0c00f7
public const int dark_theme = 2131493111;
// aapt resource value: 0x7f0c00cd
public const int delete = 2131493069;
// aapt resource value: 0x7f0c00c5
public const int download = 2131493061;
// aapt resource value: 0x7f0c00ef
public const int download_directory = 2131493103;
// aapt resource value: 0x7f0c00c4
public const int download = 2131493060;
// aapt resource value: 0x7f0c00ee
public const int download_directory = 2131493102;
// aapt resource value: 0x7f0c00c3
public const int edit_metadata = 2131493059;
public const int edit_metadata = 2131493060;
// aapt resource value: 0x7f0c0090
public const int exo_controls_fastforward_description = 2131493008;
@@ -7567,17 +7570,17 @@ namespace MusicApp
// aapt resource value: 0x7f0c0085
public const int fab_transformation_sheet_behavior = 2131492997;
// aapt resource value: 0x7f0c00d6
public const int featured = 2131493078;
// aapt resource value: 0x7f0c00d7
public const int featured = 2131493079;
// aapt resource value: 0x7f0c00b5
public const int filter = 2131493045;
// aapt resource value: 0x7f0c00da
public const int folders = 2131493082;
// aapt resource value: 0x7f0c00db
public const int folders = 2131493083;
// aapt resource value: 0x7f0c00e9
public const int genre_nothing = 2131493097;
// aapt resource value: 0x7f0c00ea
public const int genre_nothing = 2131493098;
// aapt resource value: 0x7f0c0086
public const int hide_bottom_view_on_scroll_behavior = 2131492998;
@@ -7585,38 +7588,38 @@ namespace MusicApp
// aapt resource value: 0x7f0c00b0
public const int home = 2131493040;
// aapt resource value: 0x7f0c00c7
public const int list_songs = 2131493063;
// aapt resource value: 0x7f0c00c8
public const int list_songs = 2131493064;
// aapt resource value: 0x7f0c00dd
public const int lives = 2131493085;
// aapt resource value: 0x7f0c00de
public const int lives = 2131493086;
// aapt resource value: 0x7f0c00ec
public const int local_play = 2131493100;
// aapt resource value: 0x7f0c00ed
public const int local_play = 2131493101;
// aapt resource value: 0x7f0c00e3
public const int local_playlist_empty = 2131493091;
// aapt resource value: 0x7f0c00e4
public const int local_playlist_empty = 2131493092;
// aapt resource value: 0x7f0c00df
public const int local_playlists = 2131493087;
// aapt resource value: 0x7f0c00fc
public const int log_in = 2131493116;
// aapt resource value: 0x7f0c00e0
public const int local_playlists = 2131493088;
// aapt resource value: 0x7f0c00fd
public const int log_out = 2131493117;
public const int log_in = 2131493117;
// aapt resource value: 0x7f0c00fb
public const int logged_in = 2131493115;
// aapt resource value: 0x7f0c00fe
public const int log_out = 2131493118;
// aapt resource value: 0x7f0c00ef
public const int max_download = 2131493103;
// aapt resource value: 0x7f0c00fc
public const int logged_in = 2131493116;
// aapt resource value: 0x7f0c00f0
public const int max_download_dialog = 2131493104;
public const int max_download = 2131493104;
// aapt resource value: 0x7f0c00d4
public const int more = 2131493076;
// aapt resource value: 0x7f0c00f1
public const int max_download_dialog = 2131493105;
// aapt resource value: 0x7f0c00d5
public const int more = 2131493077;
// aapt resource value: 0x7f0c0040
public const int mr_button_content_description = 2131492928;
@@ -7693,23 +7696,23 @@ namespace MusicApp
// aapt resource value: 0x7f0c0087
public const int mtrl_chip_close_icon_content_description = 2131492999;
// aapt resource value: 0x7f0c00e8
public const int music_genre = 2131493096;
// aapt resource value: 0x7f0c00e9
public const int music_genre = 2131493097;
// aapt resource value: 0x7f0c00d7
public const int music_genres = 2131493079;
// aapt resource value: 0x7f0c00d8
public const int music_genres = 2131493080;
// aapt resource value: 0x7f0c00bb
public const int next_loading = 2131493051;
// aapt resource value: 0x7f0c00fa
public const int not_log = 2131493114;
// aapt resource value: 0x7f0c00fb
public const int not_log = 2131493115;
// aapt resource value: 0x7f0c00ba
public const int nothing = 2131493050;
// aapt resource value: 0x7f0c00f7
public const int others = 2131493111;
// aapt resource value: 0x7f0c00f8
public const int others = 2131493112;
// aapt resource value: 0x7f0c0088
public const int password_toggle_content_description = 2131493000;
@@ -7729,8 +7732,8 @@ namespace MusicApp
// aapt resource value: 0x7f0c00bf
public const int play = 2131493055;
// aapt resource value: 0x7f0c00c8
public const int play_in_order = 2131493064;
// aapt resource value: 0x7f0c00c9
public const int play_in_order = 2131493065;
// aapt resource value: 0x7f0c00c1
public const int play_last = 2131493057;
@@ -7741,23 +7744,23 @@ namespace MusicApp
// aapt resource value: 0x7f0c00b2
public const int playlists = 2131493042;
// aapt resource value: 0x7f0c00d5
public const int queue = 2131493077;
// aapt resource value: 0x7f0c00d6
public const int queue = 2131493078;
// aapt resource value: 0x7f0c00c9
public const int random_play = 2131493065;
// aapt resource value: 0x7f0c00ca
public const int random_play = 2131493066;
// aapt resource value: 0x7f0c00d8
public const int recommendation_explanation = 2131493080;
// aapt resource value: 0x7f0c00d9
public const int recommendation_explanation = 2131493081;
// aapt resource value: 0x7f0c00c7
public const int remove_from_playlist = 2131493063;
// aapt resource value: 0x7f0c00c6
public const int remove_from_playlist = 2131493062;
public const int remove_from_queue = 2131493062;
// aapt resource value: 0x7f0c00c5
public const int remove_from_queue = 2131493061;
// aapt resource value: 0x7f0c00cb
public const int rename = 2131493067;
// aapt resource value: 0x7f0c00cc
public const int rename = 2131493068;
// aapt resource value: 0x7f0c00b3
public const int repeat = 2131493043;
@@ -7771,44 +7774,44 @@ namespace MusicApp
// aapt resource value: 0x7f0c00b8
public const int show_queue = 2131493048;
// aapt resource value: 0x7f0c00d4
public const int shuffle = 2131493076;
// aapt resource value: 0x7f0c00d3
public const int shuffle = 2131493075;
public const int shuffle_all = 2131493075;
// aapt resource value: 0x7f0c00d2
public const int shuffle_all = 2131493074;
// aapt resource value: 0x7f0c00d9
public const int songs = 2131493081;
// aapt resource value: 0x7f0c00da
public const int songs = 2131493082;
// aapt resource value: 0x7f0c008d
public const int status_bar_notification_info_overflow = 2131493005;
// aapt resource value: 0x7f0c00cf
public const int stop_sync = 2131493071;
// aapt resource value: 0x7f0c00d0
public const int stop_sync = 2131493072;
// aapt resource value: 0x7f0c003d
public const int summary_collapsed_preference_list = 2131492925;
// aapt resource value: 0x7f0c00cd
public const int sync = 2131493069;
// aapt resource value: 0x7f0c00ce
public const int sync_now = 2131493070;
public const int sync = 2131493070;
// aapt resource value: 0x7f0c00f1
public const int sync_remove = 2131493105;
// aapt resource value: 0x7f0c00cf
public const int sync_now = 2131493071;
// aapt resource value: 0x7f0c00f3
public const int theme = 2131493107;
// aapt resource value: 0x7f0c00f2
public const int sync_remove = 2131493106;
// aapt resource value: 0x7f0c00f4
public const int theme_dialog = 2131493108;
public const int theme = 2131493108;
// aapt resource value: 0x7f0c00dc
public const int tracks = 2131493084;
// aapt resource value: 0x7f0c00f5
public const int theme_dialog = 2131493109;
// aapt resource value: 0x7f0c00d1
public const int unfork = 2131493073;
// aapt resource value: 0x7f0c00dd
public const int tracks = 2131493085;
// aapt resource value: 0x7f0c00d2
public const int unfork = 2131493074;
// aapt resource value: 0x7f0c00b9
public const int up_next = 2131493049;
@@ -7819,23 +7822,23 @@ namespace MusicApp
// aapt resource value: 0x7f0c003f
public const int v7_preference_on = 2131492927;
// aapt resource value: 0x7f0c00f9
public const int version = 2131493113;
// aapt resource value: 0x7f0c00fa
public const int version = 2131493114;
// aapt resource value: 0x7f0c00ed
public const int volume = 2131493101;
// aapt resource value: 0x7f0c00ee
public const int volume = 2131493102;
// aapt resource value: 0x7f0c00f5
public const int white_theme = 2131493109;
// aapt resource value: 0x7f0c00f6
public const int white_theme = 2131493110;
// aapt resource value: 0x7f0c00e2
public const int youtube_loading_error = 2131493090;
// aapt resource value: 0x7f0c00e3
public const int youtube_loading_error = 2131493091;
// aapt resource value: 0x7f0c00e4
public const int youtube_playlist_empty = 2131493092;
// aapt resource value: 0x7f0c00e5
public const int youtube_playlist_empty = 2131493093;
// aapt resource value: 0x7f0c00e0
public const int youtube_playlists = 2131493088;
// aapt resource value: 0x7f0c00e1
public const int youtube_playlists = 2131493089;
// aapt resource value: 0x7f0c00b4
public const int youtube_search = 2131493044;

View File

@@ -27,6 +27,7 @@
<string name="play">Play</string>
<string name="play_next">Play next</string>
<string name="play_last">Play last</string>
<string name="create_mix_from_song">Create mix</string>
<string name="add_to_playlist">Add to playlist</string>
<string name="edit_metadata">Edit metadata</string>
<string name="download">Download</string>