Editing ID3 on MetaDataEditor (not ContentResolver)

This commit is contained in:
Anonymous Raccoon
2018-02-11 19:42:35 +01:00
parent 2a393e7870
commit 2f6d17d049
9 changed files with 430 additions and 271 deletions
+12
View File
@@ -97,6 +97,18 @@ namespace MusicApp
playToCross = GetDrawable(Resource.Drawable.PlayToCross);
crossToPlay = GetDrawable(Resource.Drawable.CrossToPlay);
NotificationManager notificationManager = (NotificationManager)GetSystemService(NotificationService);
NotificationChannel channel = new NotificationChannel("MusicApp.Channel", "Default Channel", NotificationImportance.Low)
{
Description = "Channel used for download progress and music control notification.",
LockscreenVisibility = NotificationVisibility.Public
};
channel.EnableVibration(false);
channel.EnableLights(false);
notificationManager.CreateNotificationChannel(channel);
if (MusicPlayer.queue.Count > 0)
ReCreateSmallPlayer();
else
+13 -10
View File
@@ -83,20 +83,20 @@
<Reference Include="ExoPlayer.UI, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xam.Plugins.Android.ExoPlayer.UI.2.6.0\lib\MonoAndroid\ExoPlayer.UI.dll</HintPath>
</Reference>
<Reference Include="Google.Apis, Version=1.32.1.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Apis.1.32.1\lib\netstandard1.3\Google.Apis.dll</HintPath>
<Reference Include="Google.Apis, Version=1.32.2.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Apis.1.32.2\lib\netstandard1.3\Google.Apis.dll</HintPath>
</Reference>
<Reference Include="Google.Apis.Auth, Version=1.32.1.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Apis.Auth.1.32.1\lib\netstandard1.3\Google.Apis.Auth.dll</HintPath>
<Reference Include="Google.Apis.Auth, Version=1.32.2.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Apis.Auth.1.32.2\lib\netstandard1.3\Google.Apis.Auth.dll</HintPath>
</Reference>
<Reference Include="Google.Apis.Auth.PlatformServices, Version=1.32.1.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Apis.Auth.1.32.1\lib\netstandard1.3\Google.Apis.Auth.PlatformServices.dll</HintPath>
<Reference Include="Google.Apis.Auth.PlatformServices, Version=1.32.2.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Apis.Auth.1.32.2\lib\netstandard1.3\Google.Apis.Auth.PlatformServices.dll</HintPath>
</Reference>
<Reference Include="Google.Apis.Core, Version=1.32.1.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Apis.Core.1.32.1\lib\netstandard1.3\Google.Apis.Core.dll</HintPath>
<Reference Include="Google.Apis.Core, Version=1.32.2.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Apis.Core.1.32.2\lib\netstandard1.3\Google.Apis.Core.dll</HintPath>
</Reference>
<Reference Include="Google.Apis.YouTube.v3, Version=1.32.1.1079, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Apis.YouTube.v3.1.32.1.1079\lib\netstandard1.3\Google.Apis.YouTube.v3.dll</HintPath>
<Reference Include="Google.Apis.YouTube.v3, Version=1.32.2.1131, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Apis.YouTube.v3.1.32.2.1131\lib\netstandard1.3\Google.Apis.YouTube.v3.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
@@ -136,6 +136,9 @@
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="Mono.Android" />
<Reference Include="TagLib.Portable, Version=2.2.0.0, Culture=neutral, PublicKeyToken=db62eba44689b5b0, processorArchitecture=MSIL">
<HintPath>..\packages\TagLib.Portable.1.0.4\lib\portable-net45+win+wpa81+wp8+MonoAndroid10+xamarinios10+MonoTouch10\TagLib.Portable.dll</HintPath>
</Reference>
<Reference Include="Validation, Version=2.4.0.0, Culture=neutral, PublicKeyToken=2fc06f0d701809a7, processorArchitecture=MSIL">
<HintPath>..\packages\Validation.2.4.18\lib\netstandard1.3\Validation.dll</HintPath>
</Reference>
+17 -9
View File
@@ -4,6 +4,7 @@ using Android.Views;
using Android.Widget;
using MusicApp.Resources.values;
using Square.Picasso;
using System;
using System.Collections.Generic;
namespace MusicApp.Resources.Portable_Class
@@ -27,6 +28,9 @@ namespace MusicApp.Resources.Portable_Class
if (position > songList.Count || position < 0)
return convertView;
if (convertView != null)
convertView.FindViewById<ImageView>(Resource.Id.moreButton).Click -= MoreClick;
if (inflater == null)
{
inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
@@ -55,18 +59,22 @@ namespace MusicApp.Resources.Portable_Class
if (!holder.more.HasOnClickListeners)
{
holder.more.Click += (sender, e) =>
{
Queue.instance?.More(songList[position]);
Browse.instance?.More(songList[position]);
YoutubeEngine.instance?.More(songList[position]);
YtPlaylist.instance?.More(position);
PlaylistTracks.instance?.More(songList[position], position);
FolderTracks.instance?.More(songList[position]);
};
holder.more.Tag = position;
holder.more.Click += MoreClick;
}
return convertView;
}
private void MoreClick(object sender, EventArgs e)
{
int position = (int)((ImageView)sender).Tag;
Queue.instance?.More(songList[position]);
Browse.instance?.More(songList[position]);
YoutubeEngine.instance?.More(songList[position]);
YtPlaylist.instance?.More(position);
PlaylistTracks.instance?.More(songList[position], position);
FolderTracks.instance?.More(songList[position]);
}
}
}
+7 -2
View File
@@ -85,12 +85,14 @@ namespace MusicApp.Resources.Portable_Class
int artistID = musicCursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Artist);
int albumID = musicCursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Album);
int thisID = musicCursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Id);
int youtubeID = musicCursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Composer);
int pathID = musicCursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Data);
do
{
string Artist = musicCursor.GetString(artistID);
string Title = musicCursor.GetString(titleID);
string Album = musicCursor.GetString(albumID);
string ytID = musicCursor.GetString(youtubeID);
long AlbumArt = musicCursor.GetLong(musicCursor.GetColumnIndex(MediaStore.Audio.Albums.InterfaceConsts.AlbumId));
long id = musicCursor.GetLong(thisID);
string path = musicCursor.GetString(pathID);
@@ -102,7 +104,7 @@ namespace MusicApp.Resources.Portable_Class
if (Album == null)
Album = "Unknow Album";
musicList.Add(new Song(Title, Artist, Album, null, AlbumArt, id, path));
musicList.Add(new Song(Title, Artist, Album, ytID, AlbumArt, id, path));
}
while (musicCursor.MoveToNext());
musicCursor.Close();
@@ -145,6 +147,7 @@ namespace MusicApp.Resources.Portable_Class
int titleID = musicCursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Title);
int artistID = musicCursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Artist);
int albumID = musicCursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Album);
int youtubeID = musicCursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Composer);
int thisID = musicCursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Id);
int pathID = musicCursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Data);
do
@@ -152,6 +155,7 @@ namespace MusicApp.Resources.Portable_Class
string Artist = musicCursor.GetString(artistID);
string Title = musicCursor.GetString(titleID);
string Album = musicCursor.GetString(albumID);
string ytID = musicCursor.GetString(youtubeID);
long AlbumArt = musicCursor.GetLong(musicCursor.GetColumnIndex(MediaStore.Audio.Albums.InterfaceConsts.AlbumId));
long id = musicCursor.GetLong(thisID);
string path = musicCursor.GetString(pathID);
@@ -163,7 +167,7 @@ namespace MusicApp.Resources.Portable_Class
if (Album == null)
Album = "Unknow Album";
musicList.Add(new Song(Title, Artist, Album, null, AlbumArt, id, path));
musicList.Add(new Song(Title, Artist, Album, ytID, AlbumArt, id, path));
}
while (musicCursor.MoveToNext());
musicCursor.Close();
@@ -371,6 +375,7 @@ namespace MusicApp.Resources.Portable_Class
public void EditMetadata(Song item)
{
System.Console.WriteLine("&Yt ID : " + item.youtubeID);
MainActivity.instance.HideTabs();
Intent intent = new Intent(Android.App.Application.Context, typeof(EditMetaData));
intent.PutExtra("Song", item.ToString());
+138 -27
View File
@@ -4,20 +4,20 @@ using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Provider;
using Android.Runtime;
using Android.Support.Design.Widget;
using Android.Support.V7.App;
using Android.Support.V7.Widget;
using Android.Util;
using Android.Views;
using Android.Widget;
using System.IO;
using MusicApp.Resources.values;
using Square.Picasso;
using System;
using System.Threading.Tasks;
namespace MusicApp.Resources.Portable_Class
{
[Activity(Label = "EditMetaData", Theme = "@style/Theme")]
[Activity(Label = "EditMetaData", Theme = "@style/Theme", WindowSoftInputMode = SoftInput.AdjustResize|SoftInput.StateHidden)]
public class EditMetaData : AppCompatActivity
{
public static EditMetaData instance;
@@ -25,8 +25,11 @@ namespace MusicApp.Resources.Portable_Class
private TextView title, artist, album, youtubeID;
private ImageView albumArt;
private Android.Net.Uri artURI;
private bool hasPermission = false;
private const int RequestCode = 8539;
private const int PickerRequestCode = 9852;
private string[] actions = new string[] { "Pick an album art from storage", "Search for an album art on google" };
protected override void OnCreate(Bundle savedInstanceState)
{
@@ -41,6 +44,8 @@ namespace MusicApp.Resources.Portable_Class
WindowManager.DefaultDisplay.GetMetrics(metrics);
((View)toolbar.Parent.Parent).LayoutParameters.Height = metrics.WidthPixels;
toolbar.Parent.RequestLayout();
toolbar.LayoutParameters.Height = metrics.WidthPixels / 3;
toolbar.RequestLayout();
SetSupportActionBar(toolbar);
SupportActionBar.SetDisplayShowTitleEnabled(false);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
@@ -50,6 +55,7 @@ namespace MusicApp.Resources.Portable_Class
album = FindViewById<TextView>(Resource.Id.metadataAlbum);
youtubeID = FindViewById<TextView>(Resource.Id.metadataYID);
albumArt = FindViewById<ImageView>(Resource.Id.metadataArt);
FloatingActionButton fab = FindViewById<FloatingActionButton>(Resource.Id.metadataFAB);
fab.Click += async (sender, e) => { await ValidateChanges(); };
@@ -57,6 +63,7 @@ namespace MusicApp.Resources.Portable_Class
artist.Text = song.GetArtist();
album.Text = song.GetAlbum();
youtubeID.Text = song.youtubeID;
albumArt.Click += AlbumArt_Click;
if (song.GetAlbumArt() == -1 || song.IsYt)
{
@@ -70,19 +77,49 @@ namespace MusicApp.Resources.Portable_Class
Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.MusicIcon).Resize(400, 400).CenterCrop().Into(albumArt);
}
//SetPadding();
}
//async void SetPadding()
//{
// await Task.Delay(10);
// Console.WriteLine("&Height : " + albumArt.Height);
// FindViewById<TextView>(Resource.Id.metadataPadding).LayoutParameters.Height = albumArt.Height;
// FindViewById<TextView>(Resource.Id.metadataPadding).RequestLayout();
// FindViewById<TextView>(Resource.Id.metadataPaddingDown).LayoutParameters.Height = albumArt.Height / 3;
// FindViewById<TextView>(Resource.Id.metadataPaddingDown).RequestLayout();
//}
private void AlbumArt_Click(object sender, System.EventArgs e)
{
new Android.Support.V7.App.AlertDialog.Builder(this)
.SetTitle("Change Album Art")
.SetItems(actions, (senderAlert, args) =>
{
switch(args.Which)
{
case 0:
PickAnAlbumArtLocally();
break;
case 1:
//Pick from google
break;
default:
break;
}
}).Show();
}
void PickAnAlbumArtLocally()
{
Intent intent = new Intent(Intent.ActionPick, MediaStore.Images.Media.ExternalContentUri);
StartActivityForResult(intent, PickerRequestCode);
}
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if(requestCode == PickerRequestCode)
{
if(resultCode == Result.Ok)
{
Android.Net.Uri uri = data.Data;
Picasso.With(Application.Context).Load(uri).Placeholder(Resource.Drawable.MusicIcon).Resize(400, 400).CenterCrop().Into(albumArt);
artURI = uri;
}
}
}
public override bool OnOptionsItemSelected(IMenuItem item)
{
@@ -103,7 +140,7 @@ namespace MusicApp.Resources.Portable_Class
async Task ValidateChanges()
{
if (song.GetName() == title.Text && song.GetArtist() == artist.Text && song.youtubeID == youtubeID.Text && song.GetAlbum() == album.Text)
if (song.GetName() == title.Text && song.GetArtist() == artist.Text && song.youtubeID == youtubeID.Text && song.GetAlbum() == album.Text && artURI == null)
return;
const string permission = Manifest.Permission.WriteExternalStorage;
@@ -117,18 +154,92 @@ namespace MusicApp.Resources.Portable_Class
await Task.Delay(1000);
}
Android.Net.Uri itemURI = ContentUris.WithAppendedId(MediaStore.Audio.Media.ExternalContentUri, song.GetID());
ContentResolver.Delete(itemURI, null, null);
await Task.Delay(10);
ContentValues value = new ContentValues();
value.Put(MediaStore.Audio.Media.InterfaceConsts.Title, title.Text);
value.Put(MediaStore.Audio.Media.InterfaceConsts.Artist, artist.Text);
value.Put(MediaStore.Audio.Media.InterfaceConsts.Album, album.Text);
value.Put(MediaStore.Audio.Media.InterfaceConsts.Data, song.GetPath());
//value.Put(MediaStore.Audio.Media.InterfaceConsts.AlbumArt, song.GetAlbumArt());
value.Put(MediaStore.Audio.Media.InterfaceConsts.IsMusic, true);
Android.Net.Uri uri = ContentResolver.Insert(MediaStore.Audio.Media.ExternalContentUri, value);
SendBroadcast(new Intent(Intent.ActionMediaScannerScanFile, Android.Net.Uri.Parse("file://" + uri)));
//Android.Net.Uri itemURI = ContentUris.WithAppendedId(MediaStore.Audio.Media.ExternalContentUri, song.GetID());
//ContentResolver.Delete(itemURI, null, null);
//await Task.Delay(10);
//if(song.GetName() != title.Text || song.GetArtist() != artist.Text || song.youtubeID != youtubeID.Text || song.GetAlbum() != album.Text)
//{
// ContentValues value = new ContentValues();
// value.Put(MediaStore.Audio.Media.InterfaceConsts.Title, title.Text);
// value.Put(MediaStore.Audio.Media.InterfaceConsts.Artist, artist.Text);
// value.Put(MediaStore.Audio.Media.InterfaceConsts.Album, album.Text);
// value.Put(MediaStore.Audio.Media.InterfaceConsts.Data, song.GetPath());
// value.Put(MediaStore.Audio.Media.InterfaceConsts.Composer, song.youtubeID);
// value.Put(MediaStore.Audio.Media.InterfaceConsts.IsMusic, true);
// Android.Net.Uri uri = ContentResolver.Insert(MediaStore.Audio.Media.ExternalContentUri, value);
// SendBroadcast(new Intent(Intent.ActionMediaScannerScanFile, Android.Net.Uri.Parse("file://" + uri)));
//}
//if(artURI != null)
//{
// Android.Net.Uri path = ContentUris.WithAppendedId(Android.Net.Uri.Parse("content://media/external/audio/albumart"), song.GetAlbumArt());
// System.Console.WriteLine("&Path : " + path);
// bool albumArtExist = true;
// try
// {
// var inStream = ContentResolver.OpenInputStream(path);
// }
// catch(FileNotFoundException e)
// {
// System.Console.WriteLine("&" + e.Message);
// albumArtExist = false;
// }
// if(albumArtExist)
// ContentResolver.Delete(path, null, null);
// await Task.Delay(10);
// ContentValues value = new ContentValues();
// value.Put(MediaStore.Audio.Media.InterfaceConsts.AlbumId, song.GetAlbumArt());
// value.Put(MediaStore.Audio.Media.InterfaceConsts.Data, artURI.ToString());
// Android.Net.Uri uri = ContentResolver.Insert(Android.Net.Uri.Parse("content://media/external/audio/albumart"), value);
// if(uri == null)
// {
// System.Console.WriteLine("&Uri == null");
// return;
// }
// System.Console.WriteLine("&Art uri : " + artURI.ToString() + " Result URI : " + uri.ToString());
// SendBroadcast(new Intent(Intent.ActionMediaScannerScanFile, Android.Net.Uri.Parse("file://" + uri)));
// artURI = null;
// Picasso.With(Application.Context).Load(uri).Placeholder(Resource.Drawable.MusicIcon).Resize(400, 400).CenterCrop().Into(albumArt);
//}
Stream stream = new FileStream(song.GetPath(), FileMode.Open, FileAccess.ReadWrite);
//System.Console.WriteLine("&Read Stream created");
//Stream writeStream = File.OpenWrite(song.GetPath());
//System.Console.WriteLine("&Write Stream created");
var meta = TagLib.File.Create(new TagLib.StreamFileAbstraction(song.GetPath(), stream, stream));
System.Console.WriteLine("&File created");
meta.Tag.Title = title.Text;
meta.Tag.Performers = new string[] { artist.Text };
meta.Tag.Album = album.Text;
meta.Tag.AmazonId = youtubeID.Text;
if (artURI != null)
{
TagLib.Picture art = new TagLib.Picture(artURI.ToString());
meta.Tag.Pictures = new TagLib.IPicture[] { art };
}
meta.Save();
stream.Dispose();
Android.Media.MediaScannerConnection.ScanFile(this, new string[] { song.GetPath() }, null, null);
/*TagLib.File file = TagLib.File.Create();
*TagLib.Picture pic = new TagLib.Picture();
*pic.Type = TagLib.PictureType.FrontCover;
*pic.Description = "Cover";
*pic.MimeType = System.Net.Mime.MediaTypeNames.Image.Jpeg;
*MemoryStream ms = new MemoryStream();
*.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
*ms.Position = 0;
*pic.Data = TagLib.ByteVector.FromStream(ms);
*file.Tag.Pictures = new TagLib.IPicture[] { pic };
*file.Save();
*ms.Close(); */
Toast.MakeText(this, "Changes saved.", ToastLength.Short).Show();
}
@@ -5,8 +5,9 @@ using Android.Graphics;
using Android.Media;
using Android.OS;
using Android.Provider;
using Android.Support.V4.App;
using Android.Support.V4.Content;
using Android.Support.V4.Media.Session;
using Android.Support.V7.App;
using Android.Widget;
using Com.Google.Android.Exoplayer2;
using Com.Google.Android.Exoplayer2.Extractor;
@@ -21,6 +22,7 @@ using System.Linq;
using System.Threading.Tasks;
using YoutubeExplode;
using YoutubeExplode.Models.MediaStreams;
using static Android.Support.V4.Media.App.NotificationCompat;
using Uri = Android.Net.Uri;
namespace MusicApp.Resources.Portable_Class
@@ -162,9 +164,17 @@ namespace MusicApp.Resources.Portable_Class
IExtractorsFactory extractorFactory = new DefaultExtractorsFactory();
Handler handler = new Handler();
IMediaSource mediaSource = new ExtractorMediaSource(Uri.Parse(filePath), dataSourceFactory, extractorFactory, handler, null);
#pragma warning disable CS0618 // Type or member is obsolete
var audioFocus = audioManager.RequestAudioFocus(this, Stream.Music, AudioFocus.Gain);
#pragma warning restore CS0618 // Type or member is obsolete
AudioAttributes attributes = new AudioAttributes.Builder()
.SetUsage(AudioUsageKind.Media)
.SetContentType(AudioContentType.Music)
.Build();
AudioFocusRequestClass focusRequest = new AudioFocusRequestClass.Builder(AudioFocus.Gain)
.SetAudioAttributes(attributes)
.SetAcceptsDelayedFocusGain(true)
.SetOnAudioFocusChangeListener(this)
.Build();
var audioFocus = audioManager.RequestAudioFocus(focusRequest);
if (audioFocus != AudioFocusRequest.Granted)
{
Console.WriteLine("Can't Get Audio Focus");
@@ -210,9 +220,16 @@ namespace MusicApp.Resources.Portable_Class
IExtractorsFactory extractorFactory = new DefaultExtractorsFactory();
Handler handler = new Handler();
IMediaSource mediaSource = new ExtractorMediaSource(Uri.Parse(song.GetPath()), dataSourceFactory, extractorFactory, handler, null);
#pragma warning disable CS0618 // Type or member is obsolete
var audioFocus = audioManager.RequestAudioFocus(this, Stream.Music, AudioFocus.Gain);
#pragma warning restore CS0618 // Type or member is obsolete
AudioAttributes attributes = new AudioAttributes.Builder()
.SetUsage(AudioUsageKind.Media)
.SetContentType(AudioContentType.Music)
.Build();
AudioFocusRequestClass focusRequest = new AudioFocusRequestClass.Builder(AudioFocus.Gain)
.SetAudioAttributes(attributes)
.SetAcceptsDelayedFocusGain(true)
.SetOnAudioFocusChangeListener(this)
.Build();
var audioFocus = audioManager.RequestAudioFocus(focusRequest);
if (audioFocus != AudioFocusRequest.Granted)
{
Console.WriteLine("Can't Get Audio Focus");
@@ -427,7 +444,7 @@ namespace MusicApp.Resources.Portable_Class
Uri musicUri = MediaStore.Audio.Media.ExternalContentUri;
CursorLoader cursorLoader = new CursorLoader(Application.Context, musicUri, null, null, null, null);
Android.Content.CursorLoader cursorLoader = new Android.Content.CursorLoader(Application.Context, musicUri, null, null, null, null);
ICursor musicCursor = (ICursor)cursorLoader.LoadInBackground();
if (musicCursor != null && musicCursor.MoveToFirst())
@@ -523,8 +540,11 @@ namespace MusicApp.Resources.Portable_Class
tmpDefaultIntent.SetAction("Player");
PendingIntent defaultIntent = PendingIntent.GetActivity(Application.Context, 0, tmpDefaultIntent, PendingIntentFlags.UpdateCurrent);
#pragma warning disable CS0618 // Type or member is obsolete
notification = new NotificationCompat.Builder(Application.Context)
Intent tmpCancelIntent = new Intent(Application.Context, typeof(MainActivity));
tmpCancelIntent.SetAction("Stop");
PendingIntent cancelIntent = PendingIntent.GetActivity(Application.Context, 0, tmpCancelIntent, PendingIntentFlags.UpdateCurrent);
notification = new NotificationCompat.Builder(Application.Context, "MusicApp.Channel")
.SetVisibility(NotificationCompat.VisibilityPublic)
.SetSmallIcon(Resource.Drawable.MusicIcon)
@@ -532,16 +552,20 @@ namespace MusicApp.Resources.Portable_Class
.AddAction(Resource.Drawable.ic_pause_black_24dp, "Pause", pauseIntent)
.AddAction(Resource.Drawable.ic_skip_next_black_24dp, "Next", nextIntent)
.SetStyle(new NotificationCompat.MediaStyle()
.SetStyle(new MediaStyle()
.SetShowActionsInCompactView(1)
.SetShowCancelButton(true)
.SetCancelButtonIntent(cancelIntent)
.SetMediaSession(mediaSession.SessionToken))
.SetColor(ContextCompat.GetColor(Application.Context, Resource.Color.notification_icon_bg_color))
.SetContentTitle(title)
.SetContentText(artist)
.SetLargeIcon(icon)
.SetContentIntent(defaultIntent)
.SetDeleteIntent(cancelIntent)
.Build();
ContextCompat.StartForegroundService(Application.Context, new Intent(Application.Context, typeof(MusicPlayer)));
StartForeground(notificationID, notification);
#pragma warning restore CS0618 // Type or member is obsolete
}
public void Pause()
@@ -676,15 +700,13 @@ namespace MusicApp.Resources.Portable_Class
Console.WriteLine("Error in playback resetting: " + args.Cause);
}
#pragma warning disable CS0618 // Type or member is obsolete
public void OnPlayerStateChanged(bool playWhenReady, int state)
{
if (state == ExoPlayer.StateEnded)
if (state == Com.Google.Android.Exoplayer2.Player.StateEnded)
{
PlayNext();
}
}
#pragma warning restore CS0618 // Type or member is obsolete
public void OnPositionDiscontinuity()
+199 -196
View File
@@ -2817,8 +2817,8 @@ namespace MusicApp
// aapt resource value: 0x7f080048
public const int SYM = 2131230792;
// aapt resource value: 0x7f0800ce
public const int action0 = 2131230926;
// aapt resource value: 0x7f0800cf
public const int action0 = 2131230927;
// aapt resource value: 0x7f080093
public const int action_bar = 2131230867;
@@ -2841,17 +2841,17 @@ namespace MusicApp
// aapt resource value: 0x7f080071
public const int action_bar_title = 2131230833;
// aapt resource value: 0x7f0800cb
public const int action_container = 2131230923;
// aapt resource value: 0x7f0800cc
public const int action_container = 2131230924;
// aapt resource value: 0x7f080094
public const int action_context_bar = 2131230868;
// aapt resource value: 0x7f0800d2
public const int action_divider = 2131230930;
// aapt resource value: 0x7f0800d3
public const int action_divider = 2131230931;
// aapt resource value: 0x7f0800cc
public const int action_image = 2131230924;
// aapt resource value: 0x7f0800cd
public const int action_image = 2131230925;
// aapt resource value: 0x7f080003
public const int action_menu_divider = 2131230723;
@@ -2868,11 +2868,11 @@ namespace MusicApp
// aapt resource value: 0x7f080073
public const int action_mode_close_button = 2131230835;
// aapt resource value: 0x7f0800cd
public const int action_text = 2131230925;
// aapt resource value: 0x7f0800ce
public const int action_text = 2131230926;
// aapt resource value: 0x7f0800db
public const int actions = 2131230939;
// aapt resource value: 0x7f0800dc
public const int actions = 2131230940;
// aapt resource value: 0x7f080074
public const int activity_chooser_view_content = 2131230836;
@@ -2880,8 +2880,8 @@ namespace MusicApp
// aapt resource value: 0x7f08003d
public const int add = 2131230781;
// aapt resource value: 0x7f080102
public const int albumArt = 2131230978;
// aapt resource value: 0x7f080103
public const int albumArt = 2131230979;
// aapt resource value: 0x7f080087
public const int alertTitle = 2131230855;
@@ -2892,8 +2892,8 @@ namespace MusicApp
// aapt resource value: 0x7f080049
public const int always = 2131230793;
// aapt resource value: 0x7f080104
public const int artist = 2131230980;
// aapt resource value: 0x7f080105
public const int artist = 2131230981;
// aapt resource value: 0x7f080067
public const int async = 2131230823;
@@ -2901,8 +2901,8 @@ namespace MusicApp
// aapt resource value: 0x7f080055
public const int auto = 2131230805;
// aapt resource value: 0x7f0800b5
public const int backToolbar = 2131230901;
// aapt resource value: 0x7f0800b6
public const int backToolbar = 2131230902;
// aapt resource value: 0x7f080040
public const int beginning = 2131230784;
@@ -2913,11 +2913,11 @@ namespace MusicApp
// aapt resource value: 0x7f08004e
public const int bottom = 2131230798;
// aapt resource value: 0x7f0800c8
public const int bottomView = 2131230920;
// aapt resource value: 0x7f0800c9
public const int bottomView = 2131230921;
// aapt resource value: 0x7f08010c
public const int browseLayout = 2131230988;
// aapt resource value: 0x7f08010d
public const int browseLayout = 2131230989;
// aapt resource value: 0x7f0800a3
public const int browseList = 2131230883;
@@ -2925,8 +2925,8 @@ namespace MusicApp
// aapt resource value: 0x7f08007a
public const int buttonPanel = 2131230842;
// aapt resource value: 0x7f0800cf
public const int cancel_action = 2131230927;
// aapt resource value: 0x7f0800d0
public const int cancel_action = 2131230928;
// aapt resource value: 0x7f080056
public const int center = 2131230806;
@@ -2940,8 +2940,8 @@ namespace MusicApp
// aapt resource value: 0x7f08008a
public const int checkbox = 2131230858;
// aapt resource value: 0x7f0800d7
public const int chronometer = 2131230935;
// aapt resource value: 0x7f0800d8
public const int chronometer = 2131230936;
// aapt resource value: 0x7f08005f
public const int clip_horizontal = 2131230815;
@@ -2952,17 +2952,20 @@ namespace MusicApp
// aapt resource value: 0x7f08004a
public const int collapseActionView = 2131230794;
// aapt resource value: 0x7f0800b4
public const int collapsingToolbar = 2131230900;
// aapt resource value: 0x7f0800a7
public const int container = 2131230887;
// aapt resource value: 0x7f08007d
public const int contentPanel = 2131230845;
// aapt resource value: 0x7f0800c6
public const int contentRefresh = 2131230918;
// aapt resource value: 0x7f0800c7
public const int contentView = 2131230919;
public const int contentRefresh = 2131230919;
// aapt resource value: 0x7f0800c8
public const int contentView = 2131230920;
// aapt resource value: 0x7f0800a8
public const int coordinator = 2131230888;
@@ -2997,23 +3000,23 @@ namespace MusicApp
// aapt resource value: 0x7f080031
public const int disableHome = 2131230769;
// aapt resource value: 0x7f0800ec
public const int downFAB = 2131230956;
// aapt resource value: 0x7f0800ed
public const int downFAB = 2131230957;
// aapt resource value: 0x7f08010d
public const int downloadLayout = 2131230989;
// aapt resource value: 0x7f08010e
public const int downloadLayout = 2131230990;
// aapt resource value: 0x7f080095
public const int edit_query = 2131230869;
// aapt resource value: 0x7f0800bc
public const int emptyLoadingLayout = 2131230908;
// aapt resource value: 0x7f0800bd
public const int emptyLoadingLayout = 2131230909;
// aapt resource value: 0x7f080041
public const int end = 2131230785;
// aapt resource value: 0x7f0800dd
public const int end_padder = 2131230941;
// aapt resource value: 0x7f0800de
public const int end_padder = 2131230942;
// aapt resource value: 0x7f080050
public const int enterAlways = 2131230800;
@@ -3084,8 +3087,8 @@ namespace MusicApp
// aapt resource value: 0x7f080089
public const int expanded_menu = 2131230857;
// aapt resource value: 0x7f0800be
public const int expendChilds = 2131230910;
// aapt resource value: 0x7f0800bf
public const int expendChilds = 2131230911;
// aapt resource value: 0x7f080061
public const int fill = 2131230817;
@@ -3108,14 +3111,14 @@ namespace MusicApp
// aapt resource value: 0x7f08006e
public const int fixed_width = 2131230830;
// aapt resource value: 0x7f0800bd
public const int folderList = 2131230909;
// aapt resource value: 0x7f0800bf
public const int folderName = 2131230911;
// aapt resource value: 0x7f0800be
public const int folderList = 2131230910;
// aapt resource value: 0x7f0800c0
public const int folderUsed = 2131230912;
public const int folderName = 2131230912;
// aapt resource value: 0x7f0800c1
public const int folderUsed = 2131230913;
// aapt resource value: 0x7f080069
public const int forever = 2131230825;
@@ -3132,11 +3135,11 @@ namespace MusicApp
// aapt resource value: 0x7f080079
public const int icon = 2131230841;
// aapt resource value: 0x7f0800ed
public const int icon_frame = 2131230957;
// aapt resource value: 0x7f0800ee
public const int icon_frame = 2131230958;
// aapt resource value: 0x7f0800dc
public const int icon_group = 2131230940;
// aapt resource value: 0x7f0800dd
public const int icon_group = 2131230941;
// aapt resource value: 0x7f08004b
public const int ifRoom = 2131230795;
@@ -3144,11 +3147,11 @@ namespace MusicApp
// aapt resource value: 0x7f080076
public const int image = 2131230838;
// aapt resource value: 0x7f0800d8
public const int info = 2131230936;
// aapt resource value: 0x7f0800d9
public const int info = 2131230937;
// aapt resource value: 0x7f0800e4
public const int infoPanel = 2131230948;
// aapt resource value: 0x7f0800e5
public const int infoPanel = 2131230949;
// aapt resource value: 0x7f08006a
public const int italic = 2131230826;
@@ -3159,8 +3162,8 @@ namespace MusicApp
// aapt resource value: 0x7f0800a6
public const int largeLabel = 2131230886;
// aapt resource value: 0x7f0800df
public const int lastButton = 2131230943;
// aapt resource value: 0x7f0800e0
public const int lastButton = 2131230944;
// aapt resource value: 0x7f08005a
public const int left = 2131230810;
@@ -3168,14 +3171,14 @@ namespace MusicApp
// aapt resource value: 0x7f080017
public const int line1 = 2131230743;
// aapt resource value: 0x7f080108
public const int line2 = 2131230984;
// aapt resource value: 0x7f080109
public const int line2 = 2131230985;
// aapt resource value: 0x7f080018
public const int line3 = 2131230744;
// aapt resource value: 0x7f0800ef
public const int list = 2131230959;
// aapt resource value: 0x7f0800f0
public const int list = 2131230960;
// aapt resource value: 0x7f08002e
public const int listMode = 2131230766;
@@ -3183,38 +3186,38 @@ namespace MusicApp
// aapt resource value: 0x7f080078
public const int list_item = 2131230840;
// aapt resource value: 0x7f0800f4
public const int localPlay = 2131230964;
// aapt resource value: 0x7f0800f5
public const int localPlay = 2131230965;
// aapt resource value: 0x7f08010a
public const int masked = 2131230986;
// aapt resource value: 0x7f08010b
public const int masked = 2131230987;
// aapt resource value: 0x7f0800d1
public const int media_actions = 2131230929;
// aapt resource value: 0x7f0800d2
public const int media_actions = 2131230930;
// aapt resource value: 0x7f080107
public const int message = 2131230983;
// aapt resource value: 0x7f0800b9
public const int metadataAlbum = 2131230905;
// aapt resource value: 0x7f0800b4
public const int metadataArt = 2131230900;
// aapt resource value: 0x7f0800b8
public const int metadataArtist = 2131230904;
// aapt resource value: 0x7f0800b6
public const int metadataCardView = 2131230902;
// aapt resource value: 0x7f0800bb
public const int metadataFAB = 2131230907;
// aapt resource value: 0x7f0800b7
public const int metadataTitle = 2131230903;
// aapt resource value: 0x7f080108
public const int message = 2131230984;
// aapt resource value: 0x7f0800ba
public const int metadataYID = 2131230906;
public const int metadataAlbum = 2131230906;
// aapt resource value: 0x7f0800b5
public const int metadataArt = 2131230901;
// aapt resource value: 0x7f0800b9
public const int metadataArtist = 2131230905;
// aapt resource value: 0x7f0800b7
public const int metadataCardView = 2131230903;
// aapt resource value: 0x7f0800bc
public const int metadataFAB = 2131230908;
// aapt resource value: 0x7f0800b8
public const int metadataTitle = 2131230904;
// aapt resource value: 0x7f0800bb
public const int metadataYID = 2131230907;
// aapt resource value: 0x7f080042
public const int middle = 2131230786;
@@ -3222,14 +3225,14 @@ namespace MusicApp
// aapt resource value: 0x7f080064
public const int mini = 2131230820;
// aapt resource value: 0x7f080106
public const int moreButton = 2131230982;
// aapt resource value: 0x7f080107
public const int moreButton = 2131230983;
// aapt resource value: 0x7f080038
public const int multiply = 2131230776;
// aapt resource value: 0x7f08010b
public const int musicLayout = 2131230987;
// aapt resource value: 0x7f08010c
public const int musicLayout = 2131230988;
// aapt resource value: 0x7f0800ad
public const int navigation_header_container = 2131230893;
@@ -3237,23 +3240,23 @@ namespace MusicApp
// aapt resource value: 0x7f08004c
public const int never = 2131230796;
// aapt resource value: 0x7f0800e9
public const int nextArt = 2131230953;
// aapt resource value: 0x7f0800eb
public const int nextArtist = 2131230955;
// aapt resource value: 0x7f0800e2
public const int nextButton = 2131230946;
// aapt resource value: 0x7f0800e8
public const int nextArt = 2131230952;
public const int nextSong = 2131230952;
// aapt resource value: 0x7f0800ea
public const int nextArtist = 2131230954;
public const int nextTitle = 2131230954;
// aapt resource value: 0x7f0800e1
public const int nextButton = 2131230945;
// aapt resource value: 0x7f0800e7
public const int nextSong = 2131230951;
// aapt resource value: 0x7f0800e9
public const int nextTitle = 2131230953;
// aapt resource value: 0x7f0800ca
public const int noPlaylist = 2131230922;
// aapt resource value: 0x7f0800cb
public const int noPlaylist = 2131230923;
// aapt resource value: 0x7f080033
public const int none = 2131230771;
@@ -3261,23 +3264,23 @@ namespace MusicApp
// aapt resource value: 0x7f08002f
public const int normal = 2131230767;
// aapt resource value: 0x7f0800da
public const int notification_background = 2131230938;
// aapt resource value: 0x7f0800db
public const int notification_background = 2131230939;
// aapt resource value: 0x7f0800d5
public const int notification_main_column = 2131230933;
// aapt resource value: 0x7f0800d4
public const int notification_main_column = 2131230932;
// aapt resource value: 0x7f0800d3
public const int notification_main_column_container = 2131230931;
public const int notification_main_column_container = 2131230932;
// aapt resource value: 0x7f08006b
public const int one = 2131230827;
// aapt resource value: 0x7f0800c5
public const int pager = 2131230917;
// aapt resource value: 0x7f0800c6
public const int pager = 2131230918;
// aapt resource value: 0x7f0800c4
public const int pagerRefresh = 2131230916;
// aapt resource value: 0x7f0800c5
public const int pagerRefresh = 2131230917;
// aapt resource value: 0x7f08005d
public const int parallax = 2131230813;
@@ -3291,26 +3294,26 @@ namespace MusicApp
// aapt resource value: 0x7f08005e
public const int pin = 2131230814;
// aapt resource value: 0x7f0800e0
public const int playButton = 2131230944;
// aapt resource value: 0x7f0800e1
public const int playButton = 2131230945;
// aapt resource value: 0x7f0800de
public const int playerAlbum = 2131230942;
// aapt resource value: 0x7f0800df
public const int playerAlbum = 2131230943;
// aapt resource value: 0x7f0800e6
public const int playerArtist = 2131230950;
// aapt resource value: 0x7f0800e7
public const int playerArtist = 2131230951;
// aapt resource value: 0x7f0800e4
public const int playerPlaylistAdd = 2131230948;
// aapt resource value: 0x7f0800e3
public const int playerPlaylistAdd = 2131230947;
public const int playerSleep = 2131230947;
// aapt resource value: 0x7f0800e2
public const int playerSleep = 2131230946;
// aapt resource value: 0x7f0800e6
public const int playerTitle = 2131230950;
// aapt resource value: 0x7f0800e5
public const int playerTitle = 2131230949;
// aapt resource value: 0x7f08010e
public const int playlistLayout = 2131230990;
// aapt resource value: 0x7f08010f
public const int playlistLayout = 2131230991;
// aapt resource value: 0x7f0800a4
public const int playlistName = 2131230884;
@@ -3321,29 +3324,29 @@ namespace MusicApp
// aapt resource value: 0x7f080007
public const int progress_horizontal = 2131230727;
// aapt resource value: 0x7f0800f6
public const int quickPlay = 2131230966;
// aapt resource value: 0x7f0800f7
public const int quickPlay = 2131230967;
// aapt resource value: 0x7f0800f3
public const int quickPlayLinear = 2131230963;
// aapt resource value: 0x7f0800f4
public const int quickPlayLinear = 2131230964;
// aapt resource value: 0x7f08008c
public const int radio = 2131230860;
// aapt resource value: 0x7f0800f7
public const int recycler = 2131230967;
// aapt resource value: 0x7f0800f8
public const int recycler = 2131230968;
// aapt resource value: 0x7f080101
public const int reorder = 2131230977;
// aapt resource value: 0x7f080102
public const int reorder = 2131230978;
// aapt resource value: 0x7f08005b
public const int right = 2131230811;
// aapt resource value: 0x7f0800d9
public const int right_icon = 2131230937;
// aapt resource value: 0x7f0800da
public const int right_icon = 2131230938;
// aapt resource value: 0x7f0800d5
public const int right_side = 2131230933;
// aapt resource value: 0x7f0800d6
public const int right_side = 2131230934;
// aapt resource value: 0x7f08000c
public const int save_image_matrix = 2131230732;
@@ -3372,8 +3375,8 @@ namespace MusicApp
// aapt resource value: 0x7f080066
public const int scrollable = 2131230822;
// aapt resource value: 0x7f0800f8
public const int search = 2131230968;
// aapt resource value: 0x7f0800f9
public const int search = 2131230969;
// aapt resource value: 0x7f080097
public const int search_badge = 2131230871;
@@ -3405,17 +3408,17 @@ namespace MusicApp
// aapt resource value: 0x7f0800a0
public const int search_voice_btn = 2131230880;
// aapt resource value: 0x7f0800f0
public const int seekbar = 2131230960;
// aapt resource value: 0x7f0800f1
public const int seekbar_value = 2131230961;
public const int seekbar = 2131230961;
// aapt resource value: 0x7f0800f2
public const int seekbar_value = 2131230962;
// aapt resource value: 0x7f0800a1
public const int select_dialog_listview = 2131230881;
// aapt resource value: 0x7f08010f
public const int settings = 2131230991;
// aapt resource value: 0x7f080110
public const int settings = 2131230992;
// aapt resource value: 0x7f08008b
public const int shortcut = 2131230859;
@@ -3432,8 +3435,8 @@ namespace MusicApp
// aapt resource value: 0x7f0800a5
public const int smallLabel = 2131230885;
// aapt resource value: 0x7f0800c9
public const int smallPlayer = 2131230921;
// aapt resource value: 0x7f0800ca
public const int smallPlayer = 2131230922;
// aapt resource value: 0x7f0800ac
public const int snackbar_action = 2131230892;
@@ -3444,38 +3447,38 @@ namespace MusicApp
// aapt resource value: 0x7f080054
public const int snap = 2131230804;
// aapt resource value: 0x7f0800eb
public const int songTimer = 2131230955;
// aapt resource value: 0x7f0800fa
public const int spArt = 2131230970;
// aapt resource value: 0x7f0800fc
public const int spArtist = 2131230972;
// aapt resource value: 0x7f0800f9
public const int spContainer = 2131230969;
// aapt resource value: 0x7f0800ff
public const int spLast = 2131230975;
// aapt resource value: 0x7f0800fd
public const int spNext = 2131230973;
// aapt resource value: 0x7f0800fe
public const int spPlay = 2131230974;
// aapt resource value: 0x7f080100
public const int spProgress = 2131230976;
// aapt resource value: 0x7f0800ec
public const int songTimer = 2131230956;
// aapt resource value: 0x7f0800fb
public const int spTitle = 2131230971;
public const int spArt = 2131230971;
// aapt resource value: 0x7f0800fd
public const int spArtist = 2131230973;
// aapt resource value: 0x7f0800fa
public const int spContainer = 2131230970;
// aapt resource value: 0x7f080100
public const int spLast = 2131230976;
// aapt resource value: 0x7f0800fe
public const int spNext = 2131230974;
// aapt resource value: 0x7f0800ff
public const int spPlay = 2131230975;
// aapt resource value: 0x7f080101
public const int spProgress = 2131230977;
// aapt resource value: 0x7f0800fc
public const int spTitle = 2131230972;
// aapt resource value: 0x7f08007b
public const int spacer = 2131230843;
// aapt resource value: 0x7f0800ee
public const int spinner = 2131230958;
// aapt resource value: 0x7f0800ef
public const int spinner = 2131230959;
// aapt resource value: 0x7f080008
public const int split_action_bar = 2131230728;
@@ -3492,8 +3495,8 @@ namespace MusicApp
// aapt resource value: 0x7f08005c
public const int start = 2131230812;
// aapt resource value: 0x7f0800d0
public const int status_bar_latest_event_content = 2131230928;
// aapt resource value: 0x7f0800d1
public const int status_bar_latest_event_content = 2131230929;
// aapt resource value: 0x7f08008d
public const int submenuarrow = 2131230861;
@@ -3504,14 +3507,14 @@ namespace MusicApp
// aapt resource value: 0x7f08006f
public const int surface_view = 2131230831;
// aapt resource value: 0x7f0800f2
public const int switchWidget = 2131230962;
// aapt resource value: 0x7f0800f3
public const int switchWidget = 2131230963;
// aapt resource value: 0x7f080030
public const int tabMode = 2131230768;
// aapt resource value: 0x7f0800c2
public const int tabs = 2131230914;
// aapt resource value: 0x7f0800c3
public const int tabs = 2131230915;
// aapt resource value: 0x7f080019
public const int text = 2131230745;
@@ -3522,8 +3525,8 @@ namespace MusicApp
// aapt resource value: 0x7f08001a
public const int text2 = 2131230746;
// aapt resource value: 0x7f080103
public const int textLayout = 2131230979;
// aapt resource value: 0x7f080104
public const int textLayout = 2131230980;
// aapt resource value: 0x7f080081
public const int textSpacerNoButtons = 2131230849;
@@ -3543,8 +3546,8 @@ namespace MusicApp
// aapt resource value: 0x7f080070
public const int texture_view = 2131230832;
// aapt resource value: 0x7f0800d6
public const int time = 2131230934;
// aapt resource value: 0x7f0800d7
public const int time = 2131230935;
// aapt resource value: 0x7f08001b
public const int title = 2131230747;
@@ -3555,8 +3558,8 @@ namespace MusicApp
// aapt resource value: 0x7f080086
public const int title_template = 2131230854;
// aapt resource value: 0x7f0800c1
public const int toolbar = 2131230913;
// aapt resource value: 0x7f0800c2
public const int toolbar = 2131230914;
// aapt resource value: 0x7f08004f
public const int top = 2131230799;
@@ -3594,8 +3597,8 @@ namespace MusicApp
// aapt resource value: 0x7f080016
public const int view_offset_helper = 2131230742;
// aapt resource value: 0x7f080109
public const int visible = 2131230985;
// aapt resource value: 0x7f08010a
public const int visible = 2131230986;
// aapt resource value: 0x7f0800a2
public const int webview = 2131230882;
@@ -3606,14 +3609,14 @@ namespace MusicApp
// aapt resource value: 0x7f08003f
public const int wrap_content = 2131230783;
// aapt resource value: 0x7f080105
public const int youtubeIcon = 2131230981;
// aapt resource value: 0x7f080106
public const int youtubeIcon = 2131230982;
// aapt resource value: 0x7f0800f5
public const int ytPlay = 2131230965;
// aapt resource value: 0x7f0800f6
public const int ytPlay = 2131230966;
// aapt resource value: 0x7f0800c3
public const int ytProgress = 2131230915;
// aapt resource value: 0x7f0800c4
public const int ytProgress = 2131230916;
static Id()
{
+2 -8
View File
@@ -11,6 +11,7 @@
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/collapsingToolbar"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >
<ImageView
@@ -90,19 +91,12 @@
</LinearLayout>
</android.support.v7.widget.CardView>
</android.support.v4.widget.NestedScrollView>
<!--<TextView
android:layout_width="match_parent"
android:id="@+id/metadataPaddingDown"
android:layout_height="1000dp" />
</LinearLayout>
</ScrollView>
</RelativeLayout>-->
<android.support.design.widget.FloatingActionButton
android:id="@+id/metadataFAB"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginRight="15dp"
android:src="@drawable/ic_done_black_24dp"
app:layout_anchor="@id/metadataArt"
app:layout_anchor="@id/collapsingToolbar"
app:layout_anchorGravity="bottom|end" />
</android.support.design.widget.CoordinatorLayout>
+5 -4
View File
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AngleSharp" version="0.9.9.1" targetFramework="monoandroid80" />
<package id="Google.Apis" version="1.32.1" targetFramework="monoandroid80" />
<package id="Google.Apis.Auth" version="1.32.1" targetFramework="monoandroid80" />
<package id="Google.Apis.Core" version="1.32.1" targetFramework="monoandroid80" />
<package id="Google.Apis.YouTube.v3" version="1.32.1.1079" targetFramework="monoandroid80" />
<package id="Google.Apis" version="1.32.2" targetFramework="monoandroid80" />
<package id="Google.Apis.Auth" version="1.32.2" targetFramework="monoandroid80" />
<package id="Google.Apis.Core" version="1.32.2" targetFramework="monoandroid80" />
<package id="Google.Apis.YouTube.v3" version="1.32.2.1131" targetFramework="monoandroid80" />
<package id="Microsoft.CSharp" version="4.4.1" targetFramework="monoandroid80" />
<package id="Microsoft.NETCore.Platforms" version="2.0.1" targetFramework="monoandroid80" />
<package id="NETStandard.Library" version="2.0.1" targetFramework="monoandroid80" />
@@ -60,6 +60,7 @@
<package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="monoandroid80" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="monoandroid80" />
<package id="System.Xml.XmlDocument" version="4.3.0" targetFramework="monoandroid80" />
<package id="TagLib.Portable" version="1.0.4" targetFramework="monoandroid80" />
<package id="Validation" version="2.4.18" targetFramework="monoandroid80" />
<package id="Xam.Plugins.Android.ExoPlayer" version="2.6.0" targetFramework="monoandroid80" />
<package id="Xam.Plugins.Android.ExoPlayer.Core" version="2.6.0" targetFramework="monoandroid80" />