mirror of
https://github.com/zoriya/Opus.git
synced 2025-12-06 06:26:15 +00:00
Solving bugs and reworking download/edit metadata image downloading.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -49,7 +49,6 @@ namespace Opus
|
||||
{
|
||||
instance = this;
|
||||
View view = inflater.Inflate(Resource.Layout.player, container, false);
|
||||
Console.WriteLine("&Play button: " + view.FindViewById<ImageButton>(Resource.Id.playButton));
|
||||
if (!view.FindViewById<ImageButton>(Resource.Id.playButton).HasOnClickListeners)
|
||||
{
|
||||
view.FindViewById<ImageButton>(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<DrawerLayout>(Resource.Id.queueDrawer);
|
||||
DrawerLayout.AddDrawerListener(new QueueListener(view.FindViewById<ImageView>(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<FrameLayout>(Resource.Id.smallPlayer);
|
||||
@@ -196,6 +205,9 @@ namespace Opus
|
||||
while (MusicPlayer.Duration < 2)
|
||||
await Task.Delay(100);
|
||||
|
||||
if(spBar == null)
|
||||
spBar = Activity.FindViewById<ProgressBar>(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)
|
||||
|
||||
@@ -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<PlaylistItem>();
|
||||
|
||||
db.Delete(db.Table<PlaylistItem>().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) });
|
||||
|
||||
@@ -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<TextView>(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);
|
||||
|
||||
|
||||
156
Opus/Resources/Resource.Designer.cs
generated
156
Opus/Resources/Resource.Designer.cs
generated
@@ -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;
|
||||
|
||||
@@ -201,4 +201,4 @@
|
||||
<string name="downloading_notification">Descargando :</string>
|
||||
<string name="tap_details">toque para mas detalles</string>
|
||||
<string name="cancelling">Anulando...</string>
|
||||
</resources>
|
||||
</resources>
|
||||
@@ -159,10 +159,6 @@
|
||||
<string name="no">No</string>
|
||||
|
||||
<string name="behavior">Behavior</string>
|
||||
<string name="music_genre">Music genres your interested in</string>
|
||||
<string name="genre_nothing">Actually nothing</string>
|
||||
<string name="and"> and </string>
|
||||
<string name="and_more"> and more.</string>
|
||||
<string name="volume">Volume</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="download_directory">Download directory</string>
|
||||
|
||||
Reference in New Issue
Block a user