mirror of
https://github.com/zoriya/Opus.git
synced 2025-12-06 06:26:15 +00:00
Reworking the player.
This commit is contained in:
@@ -137,7 +137,7 @@ namespace MusicApp
|
||||
if (intent.Action == "Sleep")
|
||||
{
|
||||
ShowPlayer();
|
||||
Player.instance.SleepButton_Click("", null);
|
||||
Player.instance.SleepDialog();
|
||||
}
|
||||
else if (intent.Action == "Player")
|
||||
{
|
||||
@@ -188,18 +188,22 @@ namespace MusicApp
|
||||
}
|
||||
|
||||
|
||||
public void Login(bool canAsk = true, bool skipSilentLog = false)
|
||||
public void Login(bool canAsk = true, bool skipSilentLog = false, bool skipLastSigned = false)
|
||||
{
|
||||
waitingForYoutube = true;
|
||||
|
||||
if(account == null)
|
||||
account = GoogleSignIn.GetLastSignedInAccount(this);
|
||||
|
||||
|
||||
if (account != null)
|
||||
if (!skipLastSigned)
|
||||
{
|
||||
CreateYoutube();
|
||||
return;
|
||||
Console.WriteLine("&Checking for last signed in account");
|
||||
if (account == null)
|
||||
account = GoogleSignIn.GetLastSignedInAccount(this);
|
||||
|
||||
|
||||
if (account != null)
|
||||
{
|
||||
CreateYoutube();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn)
|
||||
@@ -294,7 +298,7 @@ namespace MusicApp
|
||||
|
||||
if(account.ServerAuthCode == null)
|
||||
{
|
||||
Login(true);
|
||||
Login(true, false, true);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -587,9 +587,6 @@
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\GradientShape.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\OpenInYoutube.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\layout\PlaylistHeader.xml" />
|
||||
</ItemGroup>
|
||||
@@ -866,6 +863,12 @@
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\values-es\strings.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\darkCircle.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\darkLinear.xml" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
|
||||
<Import Project="..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.25.4.0.2\build\MonoAndroid70\Xamarin.Android.Support.Animated.Vector.Drawable.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.25.4.0.2\build\MonoAndroid70\Xamarin.Android.Support.Animated.Vector.Drawable.targets')" />
|
||||
<Import Project="..\packages\Xamarin.Android.Support.v7.Preference.25.4.0.2\build\MonoAndroid70\Xamarin.Android.Support.v7.Preference.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.Preference.25.4.0.2\build\MonoAndroid70\Xamarin.Android.Support.v7.Preference.targets')" />
|
||||
|
||||
@@ -3,6 +3,7 @@ using Android.App;
|
||||
using Android.Content;
|
||||
using Android.Content.PM;
|
||||
using Android.Content.Res;
|
||||
using Android.Gms.Cast.Framework;
|
||||
using Android.Graphics;
|
||||
using Android.Graphics.Drawables;
|
||||
using Android.OS;
|
||||
@@ -10,6 +11,8 @@ using Android.Runtime;
|
||||
using Android.Support.Design.Widget;
|
||||
using Android.Support.V4.Widget;
|
||||
using Android.Support.V7.Graphics;
|
||||
using Android.Text;
|
||||
using Android.Text.Style;
|
||||
using Android.Util;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
@@ -20,6 +23,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using MediaRouteButton = Android.Support.V7.App.MediaRouteButton;
|
||||
|
||||
namespace MusicApp
|
||||
{
|
||||
@@ -34,7 +38,7 @@ namespace MusicApp
|
||||
|
||||
private SeekBar bar;
|
||||
private ProgressBar spBar;
|
||||
private TextView timerStart;
|
||||
private TextView timer;
|
||||
private ImageView imgView;
|
||||
private bool prepared = false;
|
||||
private readonly int[] timers = new int[] { 0, 2, 10, 30, 60, 120 };
|
||||
@@ -58,27 +62,20 @@ namespace MusicApp
|
||||
|
||||
await Task.Delay(700);
|
||||
|
||||
CastButtonFactory.SetUpMediaRouteButton(MainActivity.instance, MainActivity.instance.FindViewById<MediaRouteButton>(Resource.Id.castButton));
|
||||
MainActivity.instance.PrepareSmallPlayer();
|
||||
TextView title = MainActivity.instance.FindViewById<TextView>(Resource.Id.playerTitle);
|
||||
TextView artist = MainActivity.instance.FindViewById<TextView>(Resource.Id.playerArtist);
|
||||
imgView = MainActivity.instance.FindViewById<ImageView>(Resource.Id.playerAlbum);
|
||||
TextView NextTitle = MainActivity.instance.FindViewById<TextView>(Resource.Id.nextTitle);
|
||||
TextView NextAlbum = MainActivity.instance.FindViewById<TextView>(Resource.Id.nextArtist);
|
||||
Button ShowQueue = MainActivity.instance.FindViewById<Button>(Resource.Id.showQueue);
|
||||
ImageButton smallQueue = MainActivity.instance.FindViewById<ImageButton>(Resource.Id.smallQueue);
|
||||
|
||||
if (!MainActivity.instance.FindViewById<ImageButton>(Resource.Id.playButton).HasOnClickListeners)
|
||||
{
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.downButton).Click += Down_Click;
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.showQueue).Click += ShowQueue_Click;
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.lastButton).Click += Last_Click;
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.playButton).Click += Play_Click;
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.nextButton).Click += Next_Click;
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.playerSleep).Click += SleepButton_Click;
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.playerPlaylistAdd).Click += AddToPlaylist_Click;
|
||||
MainActivity.instance.FindViewById<FloatingActionButton>(Resource.Id.downFAB).Click += Fab_Click;
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.playerDownload).Click += Download_Click;
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.playerYoutube).Click += Youtube_Click;
|
||||
ShowQueue.Click += ShowQueue_Click;
|
||||
smallQueue.Click += ShowQueue_Click;
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.moreButton).Click += More;
|
||||
}
|
||||
|
||||
title.Selected = true;
|
||||
@@ -86,36 +83,13 @@ namespace MusicApp
|
||||
artist.Selected = true;
|
||||
artist.SetMarqueeRepeatLimit(3);
|
||||
|
||||
((GradientDrawable)ShowQueue.Background).SetStroke(5, ColorStateList.ValueOf(Color.Argb(255, 21, 183, 237)));
|
||||
ShowQueue.SetTextColor(Color.Argb(255, 21, 183, 237));
|
||||
|
||||
((GradientDrawable)smallQueue.Background).SetStroke(5, ColorStateList.ValueOf(Color.Argb(255, 21, 183, 237)));
|
||||
|
||||
if (MainActivity.Theme == 1)
|
||||
{
|
||||
NextTitle.SetTextColor(Color.White);
|
||||
NextAlbum.SetTextColor(Color.White);
|
||||
NextAlbum.Alpha = 0.7f;
|
||||
smallQueue.ImageTintList = ColorStateList.ValueOf(Color.Argb(255, 255, 255, 255));
|
||||
}
|
||||
else
|
||||
{
|
||||
smallQueue.ImageTintList = ColorStateList.ValueOf(Color.Argb(255, 0, 0, 0));
|
||||
}
|
||||
|
||||
if (ShowQueue.Height < 100)
|
||||
{
|
||||
smallQueue.Visibility = ViewStates.Visible;
|
||||
ShowQueue.Visibility = ViewStates.Gone;
|
||||
}
|
||||
|
||||
timer = MainActivity.instance.FindViewById<TextView>(Resource.Id.timer);
|
||||
bar = MainActivity.instance.FindViewById<SeekBar>(Resource.Id.songTimer);
|
||||
bar.ProgressChanged += (sender, e) =>
|
||||
{
|
||||
if(!MusicPlayer.isLiveStream)
|
||||
timerStart.Text = DurationToTimer(e.Progress);
|
||||
timer.Text = string.Format("{0} | {1}", DurationToTimer(e.Progress), DurationToTimer((int)MusicPlayer.Duration));
|
||||
};
|
||||
timerStart = MainActivity.instance.FindViewById<TextView>(Resource.Id.timerStart);
|
||||
|
||||
spBar = MainActivity.instance.FindViewById<ProgressBar>(Resource.Id.spProgress);
|
||||
}
|
||||
@@ -126,7 +100,7 @@ namespace MusicApp
|
||||
await Task.Delay(100);
|
||||
|
||||
Song current = await MusicPlayer.GetItem();
|
||||
|
||||
|
||||
FrameLayout smallPlayer = MainActivity.instance.FindViewById<FrameLayout>(Resource.Id.smallPlayer);
|
||||
smallPlayer.FindViewById<TextView>(Resource.Id.spTitle).Text = current.Title;
|
||||
smallPlayer.FindViewById<TextView>(Resource.Id.spArtist).Text = current.Artist;
|
||||
@@ -148,8 +122,12 @@ namespace MusicApp
|
||||
TextView title = MainActivity.instance.FindViewById<TextView>(Resource.Id.playerTitle);
|
||||
TextView artist = MainActivity.instance.FindViewById<TextView>(Resource.Id.playerArtist);
|
||||
imgView = MainActivity.instance.FindViewById<ImageView>(Resource.Id.playerAlbum);
|
||||
title.Text = current.Title;
|
||||
artist.Text = current.Artist;
|
||||
SpannableString titleText = new SpannableString(current.Title);
|
||||
titleText.SetSpan(new BackgroundColorSpan(Color.ParseColor("#BF000000")), 0, current.Title.Length, SpanTypes.InclusiveInclusive);
|
||||
title.TextFormatted = titleText;
|
||||
SpannableString artistText = new SpannableString(current.Artist);
|
||||
artistText.SetSpan(new BackgroundColorSpan(Color.ParseColor("#BF000000")), 0, current.Artist.Length, SpanTypes.InclusiveInclusive);
|
||||
artist.TextFormatted = artistText;
|
||||
|
||||
if (!errorState)
|
||||
{
|
||||
@@ -201,19 +179,6 @@ namespace MusicApp
|
||||
imgView.SetImageBitmap(icon);
|
||||
Palette.From(icon).MaximumColorCount(28).Generate(this);
|
||||
|
||||
if (current.IsYt)
|
||||
{
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.playerDownload).Visibility = ViewStates.Visible;
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.playerYoutube).Visibility = ViewStates.Visible;
|
||||
}
|
||||
else
|
||||
{
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.playerDownload).Visibility = ViewStates.Gone;
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.playerYoutube).Visibility = ViewStates.Gone;
|
||||
}
|
||||
|
||||
UpdateNext();
|
||||
|
||||
if (bar != null)
|
||||
{
|
||||
while (MusicPlayer.Duration < 2)
|
||||
@@ -225,15 +190,13 @@ namespace MusicApp
|
||||
bar.Progress = 1;
|
||||
spBar.Max = 1;
|
||||
spBar.Progress = 1;
|
||||
timerStart.Text = "";
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.timerEnd).Text = "🔴 LIVE";
|
||||
timer.Text = "🔴 LIVE";
|
||||
}
|
||||
else
|
||||
{
|
||||
bar.Max = (int)MusicPlayer.Duration;
|
||||
MusicPlayer.SetSeekBar(bar);
|
||||
timerStart.Text = DurationToTimer((int)MusicPlayer.CurrentPosition);
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.timerEnd).Text = DurationToTimer((int)MusicPlayer.Duration);
|
||||
timer.Text = string.Format("{0} | {1}", DurationToTimer((int)MusicPlayer.CurrentPosition), DurationToTimer((int)MusicPlayer.Duration));
|
||||
spBar.Max = (int)MusicPlayer.Duration;
|
||||
spBar.Progress = (int)MusicPlayer.CurrentPosition;
|
||||
|
||||
@@ -245,82 +208,82 @@ namespace MusicApp
|
||||
public async void UpdateNext()
|
||||
{
|
||||
await Task.Delay(10);
|
||||
bool asNext = MusicPlayer.queue.Count > MusicPlayer.CurrentID() + 1;
|
||||
if (asNext)
|
||||
{
|
||||
Song next = await MusicPlayer.GetItem(MusicPlayer.CurrentID() + 1);
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.nextTitle).Text = Resources.GetString(Resource.String.up_next);
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.nextArtist).Text = next.Title;
|
||||
ImageView nextArt = MainActivity.instance.FindViewById<ImageView>(Resource.Id.nextArt);
|
||||
//bool asNext = MusicPlayer.queue.Count > MusicPlayer.CurrentID() + 1;
|
||||
//if (asNext)
|
||||
//{
|
||||
// Song next = await MusicPlayer.GetItem(MusicPlayer.CurrentID() + 1);
|
||||
// MainActivity.instance.FindViewById<TextView>(Resource.Id.nextTitle).Text = Resources.GetString(Resource.String.up_next);
|
||||
// MainActivity.instance.FindViewById<TextView>(Resource.Id.nextArtist).Text = next.Title;
|
||||
// ImageView nextArt = MainActivity.instance.FindViewById<ImageView>(Resource.Id.nextArt);
|
||||
|
||||
if (next.Album == null)
|
||||
{
|
||||
var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart");
|
||||
var nextAlbumArtUri = ContentUris.WithAppendedId(songCover, next.AlbumArt);
|
||||
// if (next.Album == null)
|
||||
// {
|
||||
// var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart");
|
||||
// var nextAlbumArtUri = ContentUris.WithAppendedId(songCover, next.AlbumArt);
|
||||
|
||||
Picasso.With(MainActivity.instance).Load(nextAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(nextArt);
|
||||
}
|
||||
else
|
||||
{
|
||||
Picasso.With(MainActivity.instance).Load(next.Album).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).Into(nextArt);
|
||||
}
|
||||
}
|
||||
else if (MusicPlayer.useAutoPlay)
|
||||
{
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.nextTitle).Text = Resources.GetString(Resource.String.up_next);
|
||||
ImageView nextArt = MainActivity.instance.FindViewById<ImageView>(Resource.Id.nextArt);
|
||||
// Picasso.With(MainActivity.instance).Load(nextAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(nextArt);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Picasso.With(MainActivity.instance).Load(next.Album).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).Into(nextArt);
|
||||
// }
|
||||
//}
|
||||
//else if (MusicPlayer.useAutoPlay)
|
||||
//{
|
||||
// MainActivity.instance.FindViewById<TextView>(Resource.Id.nextTitle).Text = Resources.GetString(Resource.String.up_next);
|
||||
// ImageView nextArt = MainActivity.instance.FindViewById<ImageView>(Resource.Id.nextArt);
|
||||
|
||||
Song next = await MusicPlayer.GetItem(MusicPlayer.CurrentID() + 1);
|
||||
if(next != null)
|
||||
{
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.nextArtist).Text = next.Title;
|
||||
// Song next = await MusicPlayer.GetItem(MusicPlayer.CurrentID() + 1);
|
||||
// if(next != null)
|
||||
// {
|
||||
// MainActivity.instance.FindViewById<TextView>(Resource.Id.nextArtist).Text = next.Title;
|
||||
|
||||
if (next.Album == null)
|
||||
{
|
||||
var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart");
|
||||
var nextAlbumArtUri = ContentUris.WithAppendedId(songCover, next.AlbumArt);
|
||||
// if (next.Album == null)
|
||||
// {
|
||||
// var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart");
|
||||
// var nextAlbumArtUri = ContentUris.WithAppendedId(songCover, next.AlbumArt);
|
||||
|
||||
Picasso.With(MainActivity.instance).Load(nextAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(nextArt);
|
||||
}
|
||||
else
|
||||
{
|
||||
Picasso.With(MainActivity.instance).Load(next.Album).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).Into(nextArt);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.nextArtist).Text = Resources.GetString(Resource.String.next_loading);
|
||||
Picasso.With(MainActivity.instance).Load(Resource.Drawable.noAlbum).Into(nextArt);
|
||||
MusicPlayer.instance?.GenerateAutoPlay(false);
|
||||
}
|
||||
}
|
||||
else if (MusicPlayer.repeat)
|
||||
{
|
||||
Song next = await MusicPlayer.GetItem(0);
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.nextTitle).Text = Resources.GetString(Resource.String.up_next);
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.nextArtist).Text = next.Title;
|
||||
ImageView nextArt = MainActivity.instance.FindViewById<ImageView>(Resource.Id.nextArt);
|
||||
// Picasso.With(MainActivity.instance).Load(nextAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(nextArt);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Picasso.With(MainActivity.instance).Load(next.Album).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).Into(nextArt);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// MainActivity.instance.FindViewById<TextView>(Resource.Id.nextArtist).Text = Resources.GetString(Resource.String.next_loading);
|
||||
// Picasso.With(MainActivity.instance).Load(Resource.Drawable.noAlbum).Into(nextArt);
|
||||
// MusicPlayer.instance?.GenerateAutoPlay(false);
|
||||
// }
|
||||
//}
|
||||
//else if (MusicPlayer.repeat)
|
||||
//{
|
||||
// Song next = await MusicPlayer.GetItem(0);
|
||||
// MainActivity.instance.FindViewById<TextView>(Resource.Id.nextTitle).Text = Resources.GetString(Resource.String.up_next);
|
||||
// MainActivity.instance.FindViewById<TextView>(Resource.Id.nextArtist).Text = next.Title;
|
||||
// ImageView nextArt = MainActivity.instance.FindViewById<ImageView>(Resource.Id.nextArt);
|
||||
|
||||
if (next.Album == null)
|
||||
{
|
||||
var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart");
|
||||
var nextAlbumArtUri = ContentUris.WithAppendedId(songCover, next.AlbumArt);
|
||||
// if (next.Album == null)
|
||||
// {
|
||||
// var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart");
|
||||
// var nextAlbumArtUri = ContentUris.WithAppendedId(songCover, next.AlbumArt);
|
||||
|
||||
Picasso.With(MainActivity.instance).Load(nextAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(nextArt);
|
||||
}
|
||||
else
|
||||
{
|
||||
Picasso.With(MainActivity.instance).Load(next.Album).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).Into(nextArt);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.nextTitle).Text = Resources.GetString(Resource.String.up_next);
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.nextArtist).Text = Resources.GetString(Resource.String.nothing);
|
||||
// Picasso.With(MainActivity.instance).Load(nextAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(nextArt);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Picasso.With(MainActivity.instance).Load(next.Album).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).Into(nextArt);
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// MainActivity.instance.FindViewById<TextView>(Resource.Id.nextTitle).Text = Resources.GetString(Resource.String.up_next);
|
||||
// MainActivity.instance.FindViewById<TextView>(Resource.Id.nextArtist).Text = Resources.GetString(Resource.String.nothing);
|
||||
|
||||
ImageView nextArt = MainActivity.instance.FindViewById<ImageView>(Resource.Id.nextArt);
|
||||
Picasso.With(MainActivity.instance).Load(Resource.Drawable.noAlbum).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(nextArt);
|
||||
}
|
||||
// ImageView nextArt = MainActivity.instance.FindViewById<ImageView>(Resource.Id.nextArt);
|
||||
// Picasso.With(MainActivity.instance).Load(Resource.Drawable.noAlbum).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(nextArt);
|
||||
//}
|
||||
}
|
||||
|
||||
public void Buffering()
|
||||
@@ -374,29 +337,12 @@ namespace MusicApp
|
||||
|
||||
}
|
||||
|
||||
private void Download_Click(object sender, EventArgs e)
|
||||
{
|
||||
Song song = MusicPlayer.queue[MusicPlayer.CurrentID()];
|
||||
YoutubeEngine.Download(song.Title, song.YoutubeID);
|
||||
}
|
||||
|
||||
private void Youtube_Click(object sender, EventArgs e)
|
||||
{
|
||||
Intent intent = new Intent(Intent.ActionView, Android.Net.Uri.Parse("vnd.youtube://" + MusicPlayer.queue[MusicPlayer.CurrentID()].YoutubeID));
|
||||
StartActivity(intent);
|
||||
}
|
||||
|
||||
public void Stoped()
|
||||
{
|
||||
MainActivity.instance.ShowSmallPlayer();
|
||||
MainActivity.instance.SheetBehavior.State = BottomSheetBehavior.StateCollapsed;
|
||||
}
|
||||
|
||||
private void AddToPlaylist_Click(object sender, EventArgs e)
|
||||
{
|
||||
Browse.GetPlaylist(MusicPlayer.queue[MusicPlayer.CurrentID()]);
|
||||
}
|
||||
|
||||
public void UpdateSeekBar()
|
||||
{
|
||||
if (!MusicPlayer.isRunning)
|
||||
@@ -407,7 +353,7 @@ namespace MusicApp
|
||||
if(MusicPlayer.autoUpdateSeekBar)
|
||||
{
|
||||
bar.Progress = (int)MusicPlayer.CurrentPosition;
|
||||
timerStart.Text = DurationToTimer((int)MusicPlayer.CurrentPosition);
|
||||
timer.Text = string.Format("{0} | {1}", DurationToTimer((int)MusicPlayer.CurrentPosition), DurationToTimer((int)MusicPlayer.Duration));
|
||||
}
|
||||
spBar.Progress = (int)MusicPlayer.CurrentPosition;
|
||||
handler.PostDelayed(UpdateSeekBar, 1000);
|
||||
@@ -432,7 +378,7 @@ namespace MusicApp
|
||||
return (hours == 0) ? (min + ":" + sec) : (hour + ":" + min + ":" + sec);
|
||||
}
|
||||
|
||||
private void Fab_Click(object sender, EventArgs e)
|
||||
private void Down_Click(object sender, EventArgs e)
|
||||
{
|
||||
MainActivity.instance.ShowSmallPlayer();
|
||||
MainActivity.instance.SheetBehavior.State = BottomSheetBehavior.StateCollapsed;
|
||||
@@ -472,7 +418,69 @@ namespace MusicApp
|
||||
MainActivity.instance.StartService(intent);
|
||||
}
|
||||
|
||||
public void SleepButton_Click(object sender, EventArgs e)
|
||||
private async void More(object s, EventArgs e)
|
||||
{
|
||||
Song item = await MusicPlayer.GetItem();
|
||||
|
||||
BottomSheetDialog bottomSheet = new BottomSheetDialog(MainActivity.instance);
|
||||
View bottomView = MainActivity.instance.LayoutInflater.Inflate(Resource.Layout.BottomSheet, null);
|
||||
bottomView.FindViewById<TextView>(Resource.Id.bsTitle).Text = item.Title;
|
||||
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 songAlbumArtUri = ContentUris.WithAppendedId(songCover, item.AlbumArt);
|
||||
|
||||
Picasso.With(MainActivity.instance).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(bottomView.FindViewById<ImageView>(Resource.Id.bsArt));
|
||||
}
|
||||
else
|
||||
{
|
||||
Picasso.With(MainActivity.instance).Load(item.Album).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).Into(bottomView.FindViewById<ImageView>(Resource.Id.bsArt));
|
||||
}
|
||||
bottomSheet.SetContentView(bottomView);
|
||||
|
||||
List<BottomSheetAction> actions = new List<BottomSheetAction>
|
||||
{
|
||||
new BottomSheetAction(Resource.Drawable.Timer, Resources.GetString(Resource.String.timer), (sender, eventArg) => { SleepDialog(); bottomSheet.Dismiss(); }),
|
||||
new BottomSheetAction(Resource.Drawable.PlaylistAdd, Resources.GetString(Resource.String.add_to_playlist), (sender, eventArg) => { Browse.GetPlaylist(item); bottomSheet.Dismiss(); })
|
||||
};
|
||||
|
||||
if (item.IsYt)
|
||||
{
|
||||
actions.AddRange(new BottomSheetAction[]
|
||||
{
|
||||
new BottomSheetAction(Resource.Drawable.PlayCircle, Resources.GetString(Resource.String.create_mix_from_song), (sender, eventArg) =>
|
||||
{
|
||||
YoutubeEngine.CreateMix(item);
|
||||
bottomSheet.Dismiss();
|
||||
}),
|
||||
new BottomSheetAction(Resource.Drawable.Download, Resources.GetString(Resource.String.download), (sender, eventArg) =>
|
||||
{
|
||||
YoutubeEngine.Download(item.Title, item.YoutubeID);
|
||||
bottomSheet.Dismiss();
|
||||
}),
|
||||
new BottomSheetAction(Resource.Drawable.OpenInBrowser, Resources.GetString(Resource.String.open_youtube), (sender, eventArg) =>
|
||||
{
|
||||
Intent intent = new Intent(Intent.ActionView, Android.Net.Uri.Parse("vnd.youtube://" + MusicPlayer.queue[MusicPlayer.CurrentID()].YoutubeID));
|
||||
StartActivity(intent);
|
||||
bottomSheet.Dismiss();
|
||||
})
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
actions.Add(new BottomSheetAction(Resource.Drawable.Edit, Resources.GetString(Resource.String.edit_metadata), (sender, eventArg) =>
|
||||
{
|
||||
Browse.EditMetadata(item);
|
||||
bottomSheet.Dismiss();
|
||||
}));
|
||||
}
|
||||
|
||||
bottomSheet.FindViewById<ListView>(Resource.Id.bsItems).Adapter = new BottomSheetAdapter(MainActivity.instance, Resource.Layout.BottomSheetText, actions);
|
||||
bottomSheet.Show();
|
||||
}
|
||||
|
||||
public void SleepDialog()
|
||||
{
|
||||
string minutes = GetString(Resource.String.minutes);
|
||||
Android.Support.V7.App.AlertDialog.Builder builder = new Android.Support.V7.App.AlertDialog.Builder(MainActivity.instance, MainActivity.dialogTheme);
|
||||
@@ -533,61 +541,61 @@ namespace MusicApp
|
||||
Color text = Color.Argb(Color.GetAlphaComponent(swatch.BodyTextColor), Color.GetRedComponent(swatch.BodyTextColor), Color.GetGreenComponent(swatch.BodyTextColor), Color.GetBlueComponent(swatch.BodyTextColor));
|
||||
Color background = Color.Argb(Color.GetAlphaComponent(swatch.Rgb), Color.GetRedComponent(swatch.Rgb), Color.GetGreenComponent(swatch.Rgb), Color.GetBlueComponent(swatch.Rgb));
|
||||
Color accentColor = Color.Argb(Color.GetAlphaComponent(accent.Rgb), Color.GetRedComponent(accent.Rgb), Color.GetGreenComponent(accent.Rgb), Color.GetBlueComponent(accent.Rgb));
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.playerTitle).SetTextColor(text);
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.playerArtist).SetTextColor(text);
|
||||
//MainActivity.instance.FindViewById<TextView>(Resource.Id.playerTitle).SetTextColor(text);
|
||||
//MainActivity.instance.FindViewById<TextView>(Resource.Id.playerArtist).SetTextColor(text);
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.spTitle).SetTextColor(text);
|
||||
MainActivity.instance.FindViewById<TextView>(Resource.Id.spArtist).SetTextColor(text);
|
||||
MainActivity.instance.FindViewById<FloatingActionButton>(Resource.Id.downFAB).BackgroundTintList = ColorStateList.ValueOf(accentColor);
|
||||
MainActivity.instance.FindViewById<FloatingActionButton>(Resource.Id.downFAB).RippleColor = accent.Rgb;
|
||||
//MainActivity.instance.FindViewById<FloatingActionButton>(Resource.Id.downFAB).BackgroundTintList = ColorStateList.ValueOf(accentColor);
|
||||
//MainActivity.instance.FindViewById<FloatingActionButton>(Resource.Id.downFAB).RippleColor = accent.Rgb;
|
||||
|
||||
//float multiplier = 0.4f;
|
||||
////if(Build.VERSION.SdkInt >= BuildVersionCodes.M && IsColorDark(accentColor))
|
||||
//// multiplier = 1.6f;
|
||||
////float multiplier = 0.4f;
|
||||
//////if(Build.VERSION.SdkInt >= BuildVersionCodes.M && IsColorDark(accentColor))
|
||||
////// multiplier = 1.6f;
|
||||
|
||||
//int red = (int)(Color.GetRedComponent(accentColor.ToArgb()) * multiplier);
|
||||
//int green = (int)(Color.GetGreenComponent(accentColor.ToArgb()) * multiplier);
|
||||
//int blue = (int)(Color.GetBlueComponent(accentColor.ToArgb()) * multiplier);
|
||||
//Color toolbar = Color.Rgb(red, green, blue);
|
||||
//MainActivity.instance.FindViewById(Resource.Id.playerStatus).SetBackgroundColor(toolbar);
|
||||
////int red = (int)(Color.GetRedComponent(accentColor.ToArgb()) * multiplier);
|
||||
////int green = (int)(Color.GetGreenComponent(accentColor.ToArgb()) * multiplier);
|
||||
////int blue = (int)(Color.GetBlueComponent(accentColor.ToArgb()) * multiplier);
|
||||
////Color toolbar = Color.Rgb(red, green, blue);
|
||||
////MainActivity.instance.FindViewById(Resource.Id.playerStatus).SetBackgroundColor(toolbar);
|
||||
|
||||
////if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
|
||||
////{
|
||||
//// int statusBar = (int)MainActivity.instance.Window.DecorView.SystemUiVisibility;
|
||||
//// if (!IsColorDark(toolbar))
|
||||
//// statusBar |= (int)SystemUiFlags.LightStatusBar;
|
||||
//// else
|
||||
//// statusBar ^= (int)SystemUiFlags.LightStatusBar;
|
||||
//// MainActivity.instance.Window.DecorView.SystemUiVisibility = (StatusBarVisibility)statusBar;
|
||||
////}
|
||||
//////if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
|
||||
//////{
|
||||
////// int statusBar = (int)MainActivity.instance.Window.DecorView.SystemUiVisibility;
|
||||
////// if (!IsColorDark(toolbar))
|
||||
////// statusBar |= (int)SystemUiFlags.LightStatusBar;
|
||||
////// else
|
||||
////// statusBar ^= (int)SystemUiFlags.LightStatusBar;
|
||||
////// MainActivity.instance.Window.DecorView.SystemUiVisibility = (StatusBarVisibility)statusBar;
|
||||
//////}
|
||||
|
||||
//Reveal for the player
|
||||
View reveal = MainActivity.instance.FindViewById<View>(Resource.Id.reveal);
|
||||
int centerX, centerY;
|
||||
float endRadius;
|
||||
if (playNext == true)
|
||||
{
|
||||
centerX = 0;
|
||||
centerY = reveal.Height / 2;
|
||||
endRadius = reveal.Width * 1.3f;
|
||||
}
|
||||
else if(playNext == null)
|
||||
{
|
||||
centerX = reveal.Width / 2;
|
||||
centerY = reveal.Height;
|
||||
endRadius = reveal.Width / 1.5f;
|
||||
}
|
||||
else
|
||||
{
|
||||
centerX = reveal.Width;
|
||||
centerY = reveal.Height / 2;
|
||||
endRadius = reveal.Width * 1.3f;
|
||||
}
|
||||
Animator anim = ViewAnimationUtils.CreateCircularReveal(reveal, centerX, centerY, 0, endRadius);
|
||||
anim.AnimationStart += (sender, e) => { reveal.SetBackgroundColor(background); };
|
||||
anim.AnimationEnd += (sender, e) => { MainActivity.instance?.FindViewById<RelativeLayout>(Resource.Id.infoPanel).SetBackgroundColor(background); };
|
||||
anim.SetDuration(500);
|
||||
anim.StartDelay = 200;
|
||||
anim.Start();
|
||||
////Reveal for the player
|
||||
//View reveal = MainActivity.instance.FindViewById<View>(Resource.Id.reveal);
|
||||
//int centerX, centerY;
|
||||
//float endRadius;
|
||||
//if (playNext == true)
|
||||
//{
|
||||
// centerX = 0;
|
||||
// centerY = reveal.Height / 2;
|
||||
// endRadius = reveal.Width * 1.3f;
|
||||
//}
|
||||
//else if(playNext == null)
|
||||
//{
|
||||
// centerX = reveal.Width / 2;
|
||||
// centerY = reveal.Height;
|
||||
// endRadius = reveal.Width / 1.5f;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// centerX = reveal.Width;
|
||||
// centerY = reveal.Height / 2;
|
||||
// endRadius = reveal.Width * 1.3f;
|
||||
//}
|
||||
//Animator anim = ViewAnimationUtils.CreateCircularReveal(reveal, centerX, centerY, 0, endRadius);
|
||||
//anim.AnimationStart += (sender, e) => { reveal.SetBackgroundColor(background); };
|
||||
//anim.AnimationEnd += (sender, e) => { MainActivity.instance?.FindViewById<RelativeLayout>(Resource.Id.infoPanel).SetBackgroundColor(background); };
|
||||
//anim.SetDuration(500);
|
||||
//anim.StartDelay = 200;
|
||||
//anim.Start();
|
||||
|
||||
//Reveal for the smallPlayer
|
||||
if (prepared)
|
||||
@@ -610,7 +618,7 @@ namespace MusicApp
|
||||
if (bar == null)
|
||||
bar = MainActivity.instance.FindViewById<SeekBar>(Resource.Id.songTimer);
|
||||
|
||||
if(spBar == null)
|
||||
if (spBar == null)
|
||||
spBar = MainActivity.instance.FindViewById<ProgressBar>(Resource.Id.spProgress);
|
||||
|
||||
bar.ProgressTintList = ColorStateList.ValueOf(accentColor);
|
||||
@@ -621,7 +629,7 @@ namespace MusicApp
|
||||
|
||||
if (IsColorDark(accent.Rgb))
|
||||
{
|
||||
MainActivity.instance.FindViewById<FloatingActionButton>(Resource.Id.downFAB).ImageTintList = ColorStateList.ValueOf(Color.White);
|
||||
//MainActivity.instance.FindViewById<FloatingActionButton>(Resource.Id.downFAB).ImageTintList = ColorStateList.ValueOf(Color.White);
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.spNext).ImageTintList = ColorStateList.ValueOf(Color.White);
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.spPlay).ImageTintList = ColorStateList.ValueOf(Color.White);
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.spLast).ImageTintList = ColorStateList.ValueOf(Color.White);
|
||||
@@ -629,7 +637,7 @@ namespace MusicApp
|
||||
}
|
||||
else
|
||||
{
|
||||
MainActivity.instance.FindViewById<FloatingActionButton>(Resource.Id.downFAB).ImageTintList = ColorStateList.ValueOf(Color.Black);
|
||||
//MainActivity.instance.FindViewById<FloatingActionButton>(Resource.Id.downFAB).ImageTintList = ColorStateList.ValueOf(Color.Black);
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.spNext).ImageTintList = ColorStateList.ValueOf(Color.Black);
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.spPlay).ImageTintList = ColorStateList.ValueOf(Color.Black);
|
||||
MainActivity.instance.FindViewById<ImageButton>(Resource.Id.spLast).ImageTintList = ColorStateList.ValueOf(Color.Black);
|
||||
|
||||
1717
MusicApp/Resources/Resource.Designer.cs
generated
1717
MusicApp/Resources/Resource.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 204 B |
5
MusicApp/Resources/drawable/darkCircle.xml
Normal file
5
MusicApp/Resources/drawable/darkCircle.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
|
||||
<solid android:color="#BF000000"/>
|
||||
<size android:width="40dp" android:height="40dp"/>
|
||||
</shape>
|
||||
13
MusicApp/Resources/drawable/darkLinear.xml
Normal file
13
MusicApp/Resources/drawable/darkLinear.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<shape
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="line">
|
||||
<stroke
|
||||
android:width="56dp"
|
||||
android:color="#BF000000" />
|
||||
<corners
|
||||
android:radius="40dp"/>
|
||||
<size
|
||||
android:width="116dp"
|
||||
android:height="56dp" />
|
||||
</shape>
|
||||
@@ -1,275 +1,150 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.design.widget.CoordinatorLayout
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:id="@+id/playerView"
|
||||
android:background="?android:colorBackground">
|
||||
android:id="@+id/playerView" >
|
||||
<ImageView
|
||||
android:id="@+id/playerAlbum"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:background="@null"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/noAlbum" />
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
<FrameLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
<ImageView
|
||||
android:id="@+id/playerAlbum"
|
||||
android:layout_width="fill_parent"
|
||||
android:background="@null"
|
||||
android:layout_height="wrap_content"
|
||||
android:scaleType="fitCenter"
|
||||
android:src="@drawable/noAlbum"
|
||||
android:transitionName="albumArt"
|
||||
android:adjustViewBounds="true" />
|
||||
<LinearLayout
|
||||
android:gravity="center"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="10dp"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="fill_parent"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="center"
|
||||
android:layout_height="wrap_content" >
|
||||
<ImageButton
|
||||
android:id="@+id/lastButton"
|
||||
android:tint="#ffffff"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:padding="20dp"
|
||||
android:src="@drawable/SkipPrevious"
|
||||
android:background="@drawable/GradientShape" />
|
||||
<ImageButton
|
||||
android:id="@+id/playButton"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:padding="20dp"
|
||||
android:layout_marginLeft="50dp"
|
||||
android:layout_marginRight="50dp"
|
||||
android:layout_gravity="center"
|
||||
android:tint="#ffffff"
|
||||
android:src="@drawable/Pause"
|
||||
android:background="@drawable/GradientShape" />
|
||||
<ProgressBar
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"
|
||||
android:id="@+id/playerBuffer"
|
||||
android:padding="20dp"
|
||||
android:layout_marginLeft="50dp"
|
||||
android:layout_marginRight="50dp"/>
|
||||
<ImageButton
|
||||
android:id="@+id/nextButton"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:padding="20dp"
|
||||
android:tint="#ffffff"
|
||||
android:src="@drawable/SkipNext"
|
||||
android:background="@drawable/GradientShape" />
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="fill_parent"
|
||||
android:paddingTop="10dp"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="center"
|
||||
android:layout_height="wrap_content" >
|
||||
<ImageButton
|
||||
android:id="@+id/playerSleep"
|
||||
android:src="@drawable/Timer"
|
||||
android:background="@drawable/GradientShape"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:tint="#ffffff"
|
||||
android:padding="20dp"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginRight="15dp"/>
|
||||
<ImageButton
|
||||
android:id="@+id/playerPlaylistAdd"
|
||||
android:src="@drawable/PlaylistAdd"
|
||||
android:background="@drawable/GradientShape"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:tint="#ffffff"
|
||||
android:padding="20dp"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginRight="15dp" />
|
||||
<ImageButton
|
||||
android:id="@+id/playerDownload"
|
||||
android:src="@drawable/Download"
|
||||
android:background="@drawable/GradientShape"
|
||||
android:visibility="gone"
|
||||
android:tint="#ffffff"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:padding="20dp"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginRight="15dp" />
|
||||
<ImageButton
|
||||
android:id="@+id/playerYoutube"
|
||||
android:src="@drawable/OpenInBrowser"
|
||||
android:background="@drawable/GradientShape"
|
||||
android:visibility="gone"
|
||||
android:tint="#ffffff"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:padding="20dp"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginRight="15dp" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
<ImageView
|
||||
android:src="@drawable/darkRectangle"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="256px"
|
||||
android:adjustViewBounds="true"
|
||||
android:id="@+id/playerDark"
|
||||
android:layout_gravity="bottom" />
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="00:00"
|
||||
android:id="@+id/timerStart"
|
||||
android:textColor="#ffffff"
|
||||
android:layout_gravity="bottom|left"
|
||||
android:padding="10dp" />
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="\??:??"
|
||||
android:id="@+id/timerEnd"
|
||||
android:textColor="#ffffff"
|
||||
android:layout_gravity="bottom|right"
|
||||
android:padding="10dp" />
|
||||
</FrameLayout>
|
||||
<RelativeLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/infoPanel"
|
||||
android:background="#2b5568" >
|
||||
<View
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignTop="@+id/playerTitle"
|
||||
android:layout_alignBottom="@+id/playerArtist"
|
||||
android:id="@+id/reveal" />
|
||||
<TextView
|
||||
android:text="Title"
|
||||
android:id="@+id/playerTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:paddingTop="15dp"
|
||||
android:scrollHorizontally="true"
|
||||
android:ellipsize="marquee"
|
||||
android:marqueeRepeatLimit ="marquee_forever"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
android:textSize="34sp"
|
||||
android:textColor="#FFFFFF"
|
||||
android:alpha="1"
|
||||
android:textStyle="bold"
|
||||
android:paddingLeft="60dp" />
|
||||
<TextView
|
||||
android:text="Artist"
|
||||
android:id="@+id/playerArtist"
|
||||
android:singleLine="true"
|
||||
android:scrollHorizontally="true"
|
||||
android:ellipsize="marquee"
|
||||
android:paddingBottom="20dp"
|
||||
android:marqueeRepeatLimit ="marquee_forever"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="60dp"
|
||||
android:alpha=".92"
|
||||
android:layout_below="@id/playerTitle"
|
||||
android:textSize="20sp"
|
||||
android:textColor="#FFFFFF"/>
|
||||
</RelativeLayout>
|
||||
<RelativeLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/nextSong"
|
||||
android:padding="8dp">
|
||||
<ImageView
|
||||
android:id="@+id/nextArt"
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="90dp"
|
||||
android:padding="5dp"
|
||||
android:src="@drawable/MusicIcon"
|
||||
android:layout_alignParentLeft="true" />
|
||||
<ImageButton
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/FlatButtonBorder"
|
||||
android:id="@+id/smallQueue"
|
||||
android:visibility="gone"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:padding="5dp"
|
||||
android:src="@drawable/Queue" />
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:paddingTop="14dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toLeftOf="@id/smallQueue"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:paddingLeft="100dp">
|
||||
<TextView
|
||||
android:id="@+id/nextTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#000"
|
||||
android:textSize="16dip"
|
||||
android:textStyle="bold" />
|
||||
<TextView
|
||||
android:id="@+id/nextArtist"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="14dip"
|
||||
android:textColor="#000" />
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
<Button
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:layout_marginRight="20dp"
|
||||
android:background="@drawable/FlatButtonBorder"
|
||||
android:id="@+id/showQueue"
|
||||
android:text="@string/show_queue" />
|
||||
</LinearLayout>
|
||||
<SeekBar
|
||||
android:id="@+id/songTimer"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_anchor="@id/playerAlbum"
|
||||
app:elevation="6dp"
|
||||
android:padding="0dp"
|
||||
app:layout_anchorGravity="bottom|center" />
|
||||
<android.support.design.widget.FloatingActionButton
|
||||
android:id="@+id/downFAB"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_anchor="@id/infoPanel"
|
||||
app:layout_anchorGravity="bottom|center"
|
||||
android:layout_margin="10dip"
|
||||
app:elevation="12dp"
|
||||
app:fabSize="mini"
|
||||
app:borderWidth="0dp"
|
||||
android:paddingTop="20dp"
|
||||
app:backgroundTint="#4cb5ae"
|
||||
android:src="@drawable/arrowdown" />
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
android:orientation="horizontal"
|
||||
android:layout_alignParentRight="true"
|
||||
android:paddingTop="40dp"
|
||||
android:paddingRight="5dp"
|
||||
android:id="@+id/buttonsRight"
|
||||
android:background="@drawable/darkLinear" >
|
||||
<android.support.v7.app.MediaRouteButton
|
||||
android:id="@+id/castButton"
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:background="@null" />
|
||||
<ImageButton
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:tint="#ffffff"
|
||||
android:src="@drawable/arrowdown"
|
||||
android:background="@null"
|
||||
android:id="@+id/downButton" />
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_toLeftOf="@id/buttonsRight"
|
||||
android:paddingTop="40dp"
|
||||
android:paddingLeft="15dp" >
|
||||
<TextView
|
||||
android:text="Title"
|
||||
android:id="@+id/playerTitle"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="3dp"
|
||||
android:maxLines="2"
|
||||
android:textSize="20sp"
|
||||
android:textColor="#ffffff" />
|
||||
<TextView
|
||||
android:text="Artist"
|
||||
android:layout_marginTop="7dp"
|
||||
android:id="@+id/playerArtist"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="marquee"
|
||||
android:marqueeRepeatLimit ="marquee_forever"
|
||||
android:padding="3dp"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:alpha=".92"
|
||||
android:textSize="15sp"
|
||||
android:textColor="#FFFFFF" />
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_marginBottom="25dp">
|
||||
<RelativeLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="10dp" >
|
||||
<SeekBar
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/songTimer"
|
||||
app:elevation="6dp"
|
||||
android:padding="0dp" />
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="00:00 | ??:??"
|
||||
android:id="@+id/timer"
|
||||
android:textColor="#ffffff"
|
||||
android:background="#BF000000"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:padding="3dp" />
|
||||
</RelativeLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:layout_gravity="center_horizontal" >
|
||||
<ImageButton
|
||||
android:id="@+id/showQueue"
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_margin="12dp"
|
||||
android:tint="#ffffff"
|
||||
android:background="@drawable/darkCircle"
|
||||
android:src="@drawable/queue" />
|
||||
<ImageButton
|
||||
android:id="@+id/lastButton"
|
||||
android:tint="#ffffff"
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_margin="12dp"
|
||||
android:background="@drawable/darkCircle"
|
||||
android:src="@drawable/SkipPrevious" />
|
||||
<ImageButton
|
||||
android:id="@+id/playButton"
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_margin="12dp"
|
||||
android:layout_marginLeft="50dp"
|
||||
android:layout_marginRight="50dp"
|
||||
android:tint="#ffffff"
|
||||
android:background="@drawable/darkCircle"
|
||||
android:src="@drawable/Pause" />
|
||||
<ProgressBar
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_margin="12dp"
|
||||
android:visibility="gone"
|
||||
android:id="@+id/playerBuffer"
|
||||
android:layout_marginLeft="50dp"
|
||||
android:layout_marginRight="50dp"/>
|
||||
<ImageButton
|
||||
android:id="@+id/nextButton"
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_margin="12dp"
|
||||
android:tint="#ffffff"
|
||||
android:background="@drawable/darkCircle"
|
||||
android:src="@drawable/SkipNext" />
|
||||
<ImageButton
|
||||
android:id="@+id/moreButton"
|
||||
android:layout_width="56dp"
|
||||
android:layout_height="56dp"
|
||||
android:layout_margin="12dp"
|
||||
android:tint="#ffffff"
|
||||
android:background="@drawable/darkCircle"
|
||||
android:src="@drawable/more" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
@@ -17,7 +17,7 @@
|
||||
<string name="up_next">À suivre :</string>
|
||||
<string name="nothing">Rien.</string>
|
||||
<string name="next_loading">Chargement en cours, veuillez patienter.</string>
|
||||
<string name="sleep_timer">Arreter la musique dans</string>
|
||||
<string name="sleep_timer">Arrêter la musique dans</string>
|
||||
<string name="off">Off</string>
|
||||
<string name="minute">minute</string>
|
||||
<string name="minutes">minutes</string>
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
<!--Autoplay-->
|
||||
<string name="autoplay">Lecture automatique</string>
|
||||
<string name="autoplay_desc">Ajoute automatiquement des musiques similaire</string>
|
||||
<string name="autoplay_desc">Ajoute automatiquement des musiques similaires</string>
|
||||
<string name="create_mix">CRÉER UN MIX</string>
|
||||
|
||||
<!--More menu (long clicks)-->
|
||||
@@ -40,7 +40,7 @@
|
||||
<string name="play_last">Ajouter a la fin de la liste de lecture</string>
|
||||
<string name="create_mix_from_song">Créer un mix</string>
|
||||
<string name="add_to_playlist">Ajouter a une playlist</string>
|
||||
<string name="edit_metadata">Modifier les metadata</string>
|
||||
<string name="edit_metadata">Modifier les metadatas</string>
|
||||
<string name="download">Télécharger</string>
|
||||
<string name="remove_from_queue">Enlever de la liste de lecture</string>
|
||||
<string name="remove_from_playlist">Enlever de la playlist</string>
|
||||
@@ -48,17 +48,17 @@
|
||||
<string name="list_songs">Lister les titres</string>
|
||||
<string name="play_in_order">Lire dans l\'ordre</string>
|
||||
<string name="random_play">Lecture aléatoire</string>
|
||||
<string name="add_to_queue">Ajouter a la liste de lecture</string>
|
||||
<string name="add_to_queue">Ajouter à la liste de lecture</string>
|
||||
<string name="rename">Renommer</string>
|
||||
<string name="delete">Supprimer</string>
|
||||
<string name="sync">Synchronizer la playlist</string>
|
||||
<string name="sync_now">Synchronizer maintenant</string>
|
||||
<string name="stop_sync">Arreter de synchronizer</string>
|
||||
<string name="sync">Synchroniser la playlist</string>
|
||||
<string name="sync_now">Synchroniser maintenant</string>
|
||||
<string name="stop_sync">Arreter de synchroniser</string>
|
||||
<string name="add_to_library">Sauvegarder la playlist</string>
|
||||
<string name="unfork">Enlever la playlist de la bibliothèque</string>
|
||||
|
||||
<!--Home screen-->
|
||||
<string name="shuffle_all">TOUS LIRE ALÉATOIREMENT</string>
|
||||
<string name="shuffle_all">TOUT LIRE ALÉATOIREMENT</string>
|
||||
<string name="shuffle">Lecture aléatoire</string>
|
||||
<string name="more">PLUS</string>
|
||||
<string name="queue">Liste de lecture</string>
|
||||
@@ -76,15 +76,15 @@
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="lives">Lives</string>
|
||||
<string name="channels">Chaines</string>
|
||||
<string name="download_path_not_set">Le dossier de téléchargement n\'a pas été définie, celui par défault va être utilisé.</string>
|
||||
<string name="download_path_not_set">Le dossier de téléchargement n\'a pas été défini, celui par défault va être utilisé.</string>
|
||||
<string name="download_path_error">Le dossier de téléchargement n\'existe plus, veuillez le changer dans les paramètres.</string>
|
||||
<string name="set_path">Definir le dossier</string>
|
||||
<string name="downloading">Téléchargement en cours...</string>
|
||||
<string name="syncing">Synchronisation en cours...</string>
|
||||
<string name="cant_delete">Impossible de supprimer ce fichier pour le moment, veuillez réesseyer plus tard.</string>
|
||||
<string name="cant_delete">Impossible de supprimer ce fichier pour le moment, veuillez réessayer plus tard.</string>
|
||||
<string name="no_result">Aucun résultat pour </string>
|
||||
<string name="no_track">Aucun titre pour </string>
|
||||
<string name="no_playlist">Aucunne playlist pour </string>
|
||||
<string name="no_playlist">Aucune playlist pour </string>
|
||||
<string name="no_lives">Aucun lives pour </string>
|
||||
<string name="no_channel">Aucune chaine pour </string>
|
||||
<string name="remove_search">Supprimer de l\'historique de recherche ?</string>
|
||||
@@ -94,19 +94,19 @@
|
||||
<string name="local_playlists">Playlists locales</string>
|
||||
<string name="youtube_playlists">Playlists youtubes</string>
|
||||
<string name="add_playlist">AJOUTER UNE PLAYLIST</string>
|
||||
<string name="youtube_loading_error">Erreur de chargement. \nVerifiez avoir séléctionné un compte et votre connection internet.</string>
|
||||
<string name="youtube_loading_error">Erreur de chargement. \nVérifiez avoir séléctionné un compte et votre connection internet.</string>
|
||||
<string name="local_playlist_empty">Vous n\'avez aucune playlist sur cet appareil.</string>
|
||||
<string name="youtube_playlist_empty">Vous n\'avez aucune playlist sur ce compte youtube \nAttention : Seulement les playlists présentes sur votre compte google sont affichées.</string>
|
||||
<string name="youtube_playlist_empty">Vous n\'avez aucune playlist sur ce compte youtube \nAttention : seulement les playlists présentes sur votre compte google sont affichées.</string>
|
||||
<string name="element">titre</string>
|
||||
<string name="elements">titres</string>
|
||||
<string name="playlist_empty">Cette playlist est vide.</string>
|
||||
<string name="remove_from_playlist">Enlever %1$s de la playlist ?</string> <!--%1$s will be replaced by the song name-->
|
||||
<string name="removed_from_playlist"> a été enlevé de la playlist.</string>
|
||||
<string name="playlist_already_saved">Cette playlist a déja été ajouté a votre bibliothèque.</string>
|
||||
<string name="playlist_not_found">Aucune playlist n\'existe avec cet id ou cet url.</string>
|
||||
<string name="playlist_already_saved">Cette playlist a déja été ajoutée à votre bibliothèque.</string>
|
||||
<string name="playlist_not_found">Aucune playlist n\'existe avec cet id ou cette url.</string>
|
||||
<string name="playlist_add_song_not_found">Musique non trouvée sur youtube, impossible de l\'ajouter à une playlist youtube.</string>
|
||||
<string name="delete_playlist">Voulez vous supprimer la playlist \"%1$s\" ?</string> <!--%1$s will be replaced by the playlist name-->
|
||||
<string name="rename_playlist">Choissisez un nouveau nom pour cette playlist</string>
|
||||
<string name="rename_playlist">Choisissez un nouveau nom pour cette playlist</string>
|
||||
<string name="stop_syncing">Voulez vous arreter de synchroniser la playlist \"%1s$\" ?</string> <!--%1$s will be replaced by the playlist name-->
|
||||
<string name="unfork_playlist">Voulez vous supprimer la playlist \"%1$s"\" de votre bibliothèque ?</string> <!--%1$s will be replaced by the playlist name-->
|
||||
<string name="add_playlist_msg">Entrer l\'url ou l\'id de la playlist que vous voulez ajouter</string> <!--%1$s will be replaced by the playlist name-->
|
||||
@@ -128,10 +128,10 @@
|
||||
<string name="change_albumart">Changer d\'image d\'album</string>
|
||||
<string name="pick_album_local">Choisir une image depuis le stockage interne</string>
|
||||
<string name="download_albumart">Télécharger la couverture depuis youtube</string>
|
||||
<string name="download_meta">Télécharger les metadata depuis youtube</string>
|
||||
<string name="download_meta">Télécharger les metadatas depuis youtube</string>
|
||||
<string name="undo_change">Annuler les modifications</string>
|
||||
<string name="changes_saved">Changement sauvegardé.</string>
|
||||
<string name="metdata_error_noid">Impossible de télécharger les metadatas depuis youtube, l\'id youtube n\'est pas défnit.</string>
|
||||
<string name="metdata_error_noid">Impossible de télécharger les metadatas depuis youtube, l\'id youtube n\'est pas défni.</string>
|
||||
|
||||
<!--Download Queue-->
|
||||
<string name="download_queue">Liste de téléchargement</string>
|
||||
@@ -139,12 +139,12 @@
|
||||
<string name="initialization">Initialisation</string>
|
||||
<string name="metadata">Metadata</string>
|
||||
<string name="downloading_status">Téléchargement</string>
|
||||
<string name="up_to_date_status">Déja a jour</string>
|
||||
<string name="up_to_date_status">Déjà à jour</string>
|
||||
<string name="completed">Completé</string>
|
||||
|
||||
<!--Chromecast-->
|
||||
<string name="cast_queue_push">Votre liste de lecture est envoyée au chromecast, veuillez patienter...</string>
|
||||
<string name="cast_queue_pushed">Finis, la musique va commencer sous peu.</string>
|
||||
<string name="cast_queue_pushed">Finis, la musique va bientôt commencer.</string>
|
||||
|
||||
<!--Settings-->
|
||||
<string name="apply">Appliquer</string>
|
||||
@@ -159,12 +159,12 @@
|
||||
<string name="volume">Volume</string>
|
||||
<string name="download">Téléchargement</string>
|
||||
<string name="download_directory">Dossier de téléchargement</string>
|
||||
<string name="max_download">Nombre maximum de téléchargement simultané</string>
|
||||
<string name="max_download_dialog">Combiens de musiques peuvent-elle être téléchargées en même temps ?</string>
|
||||
<string name="sync_remove">Supprimer les musiques enlevée d\'une playlist synchronisée.</string>
|
||||
<string name="max_download">Nombre maximum de téléchargements simultanés</string>
|
||||
<string name="max_download_dialog">Combien de musiques peuvent-elle être téléchargées en même temps ?</string>
|
||||
<string name="sync_remove">Supprimer les musiques enlevées d\'une playlist synchronisée.</string>
|
||||
<string name="appearances">Apparence</string>
|
||||
<string name="theme">Thème</string>
|
||||
<string name="theme_dialog">Choissisez un thème</string>
|
||||
<string name="theme_dialog">Choisissez un thème</string>
|
||||
<string name="white_theme">Thème clair</string>
|
||||
<string name="dark_theme">Thème sombre</string>
|
||||
<string name="others">Autres</string>
|
||||
@@ -178,21 +178,21 @@
|
||||
<!--Snackbars and others-->
|
||||
<string name="undo">Annuler</string>
|
||||
|
||||
<string name="no_permission">Permission refusée, impossible de completer cette action.</string>
|
||||
<string name="no_permission">Permission refusée, impossible de compléter cette action.</string>
|
||||
<string name="no_song_mix">Aucune musique trouvée, impossible de créer un mix.</string>
|
||||
<string name="youtube_endpoint">L\'algorithme youtube a changé, l\'application ne peut plus lire cette vidéo. Attendez la prochaine mise a jour.</string>
|
||||
<string name="timout">Timout, vérifier votre connection internet.</string>
|
||||
<string name="unknow">Une erreur inconue est survenue.</string>
|
||||
<string name="unknow">Une erreur inconnue est survenue.</string>
|
||||
<string name="not_streamable"> ne peut pas être lu, l\'audio n\'est pas disponible.</string> <!--//A song title will be placed before this sentence-->
|
||||
<string name="update_no_internet">Vous n\'êtes pas connecté a internet, impossible de verifier si des mises a jours existent.</string>
|
||||
<string name="update_no_internet">Vous n\'êtes pas connecté a internet, impossible de verifier si des mises à jour existent.</string>
|
||||
<string name="update">La version %1$s est disponible</string> <!--//%1$s will be replaced with the version number-->
|
||||
<string name="update_message">Une mise a jour est disponible, voulez vous l\'installer maintenant ?</string>
|
||||
<string name="up_to_date">Aucune mise a jour disponible.</string>
|
||||
<string name="update_message">Une mise à jour est disponible, voulez vous l\'installer maintenant ?</string>
|
||||
<string name="up_to_date">Aucune mise à jour disponible.</string>
|
||||
<string name="beta_available">Une version beta est disponible.</string>
|
||||
<string name="downloading_update">Téléchargement en cours, vous serez informer lorsque l\'installation sera prète.</string>
|
||||
<string name="updating">Mise a jour en cours...</string>
|
||||
<string name="updating">Mise à jour en cours...</string>
|
||||
<string name="cant_play_non_youtube">Impossible de lire ce type de vidéo.</string>
|
||||
<string name="sleep_timer">La musique va s\'arreter dans :</string>
|
||||
<string name="sleep_timer">La musique va s\'arrêter dans :</string>
|
||||
<string name="downloading_notification">Téléchargement :</string>
|
||||
<string name="tap_details">Tappez pour plus de détails</string>
|
||||
<string name="cancelling">Annulation en cours...</string>
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
<string name="minutes">minutes</string>
|
||||
<string name="hour">hour</string>
|
||||
<string name="hours">hours</string>
|
||||
<string name="timer">Sleep timer</string>
|
||||
<string name="open_youtube">Open in the youtube app</string>
|
||||
|
||||
<!--Queue-->
|
||||
<string name="playing">Playing</string>
|
||||
|
||||
Reference in New Issue
Block a user