using System;
|
using Shared;
|
using com.hdl.on;
|
using System.Collections.Generic;
|
using System.Security;
|
|
namespace HDL_ON.UI.Music
|
{
|
public class A31PlayMusicPage : FrameLayout
|
{
|
/// <summary>
|
/// 当前对象构造函数
|
/// </summary>
|
public A31PlayMusicPage() { }
|
/// <summary>
|
/// 重写RemoveFromParent方法
|
/// </summary>
|
public override void RemoveFromParent()
|
{
|
base.RemoveFromParent();
|
Volume.VolumeChange = null;
|
if (timerThread != null)
|
{
|
try
|
{
|
if (timerThread.IsAlive)
|
{
|
timerThread.Abort();
|
}
|
}
|
catch { }
|
}
|
|
}
|
/// <summary>
|
/// new布局界面
|
/// </summary>
|
View.PlayView playView = new View.PlayView();
|
|
public void Show()
|
{
|
///1秒定时更新状态
|
timerUpdateStatus();
|
#region ---界面布局---
|
this.BackgroundColor = MusicColor.ViewColor;
|
var topView = new TopView();
|
topView.setBtn.Visible = true;
|
this.AddChidren(topView.TopFLayoutView());
|
topView.topNameBtn.Text = A31MusicModel.Current.Name;
|
topView.clickBackBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
RemoveFromParent();
|
};
|
topView.clickSetBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
A31MusicSourcePage a31MusicSourcePage = new A31MusicSourcePage();
|
MainPage.BasePageView.AddChidren(a31MusicSourcePage);
|
a31MusicSourcePage.Show();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
};
|
var middLayout = new FrameLayout
|
{
|
Y = topView.fLayout.Bottom,
|
Height = Application.GetRealHeight(H_W.H - H_W.T_Height),
|
};
|
this.AddChidren(middLayout);
|
///加载播放音乐界面的控件方法
|
playView.viewFrameLayout(middLayout);
|
#endregion
|
#region ---控件的点击事件---
|
//收藏图标事件
|
playView.collectIconBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
playView.collectIconBtn.IsSelected = !playView.collectIconBtn.IsSelected;
|
if (playView.collectIconBtn.IsSelected)
|
{
|
A31MusicModel.Current.collect = true;
|
}
|
else
|
{
|
A31MusicModel.Current.collect = false;
|
}
|
|
};
|
//快进滑动弹起事件;
|
playView.diyArcSeekBar.OnStopTrackingTouchEvent+= (sender, e) =>
|
{
|
int totalSecond = (int)(playView.diyArcSeekBar.Progress * 1.0f / 100 * int.Parse(A31MusicModel.Current.A31PlayStatus.totlen) / 1000);
|
//分钟
|
int Minute = totalSecond / 60;
|
//秒钟
|
int Second = totalSecond % 60;
|
string time = "00" + ":" + (Minute.ToString().Length < 2 ? "0" + Minute.ToString() : Minute.ToString()) + ":" + (Second.ToString().Length < 2 ? "0" + Second.ToString() : Second.ToString());
|
SendMethod.Seek(time, A31MusicModel.Current);
|
A31MusicModel.Current.A31PlayStatus.curpos = (DateTime.Parse(time) - DateTime.Parse("00:00:00")).TotalMilliseconds.ToString();
|
};
|
///切换播放模式点击事件;
|
playView.playOrderBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
string msg = Language.StringByID(StringId.switchTo);
|
switch (A31MusicModel.Current.A31PlayStatus.loop)
|
{
|
//0列表循环,1单曲循环,2随机播放;
|
case "0":
|
A31MusicModel.Current.A31PlayStatus.loop = "1";
|
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
|
msg += Language.StringByID(StringId.singleMode);
|
break;
|
|
case "1":
|
A31MusicModel.Current.A31PlayStatus.loop = "2";
|
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png";
|
msg += Language.StringByID(StringId.randomMode);
|
break;
|
case "2":
|
A31MusicModel.Current.A31PlayStatus.loop = "0";
|
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png";
|
msg += Language.StringByID(StringId.listMode);
|
break;
|
}
|
new PublicAssmebly().TipMsgAutoClose(msg, false,1000);
|
string url = "http://" + A31MusicModel.Current.IPAddress + "/httpapi.asp?command=setPlayerCmd:" + "loopmode:" + A31MusicModel.Current.A31PlayStatus.loop;
|
SendMethod.SendCommand(url);
|
};
|
///添加喜爱点击事件;
|
playView.loveBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
|
var url = A31MusicModel.Current.A31PlayStatus.TrackURL;
|
var album = A31MusicModel.Current.A31PlayStatus.Album;
|
var artist = A31MusicModel.Current.A31PlayStatus.Artist;
|
var song = A31MusicModel.Current.A31PlayStatus.Title;
|
if (A31MusicModel.Current.A31PlayStatus.Source == "RADIO-NETWORK")
|
{
|
playView.loveBtn.IsSelected = !playView.loveBtn.IsSelected;
|
if (playView.loveBtn.IsSelected)
|
{
|
if (null == A31MusicModel.Current.LoveRadioInfoList.Find((musicInfo) =>
|
{
|
return url == musicInfo.URL;
|
}))
|
{
|
A31MusicModel.Current.LoveRadioInfoList.Add(new MusicInfo { Title = song, URL = url, });
|
}
|
}
|
else
|
{
|
A31MusicModel.Current.LoveRadioInfoList.RemoveAll((musicInfo) =>
|
{
|
return url == musicInfo.URL;
|
});
|
}
|
}
|
else
|
{
|
playView.loveBtn.IsSelected = !playView.loveBtn.IsSelected;
|
if (playView.loveBtn.IsSelected)
|
{
|
if (null == A31MusicModel.Current.LoveMusicInfoList.Find((musicInfo) =>
|
{
|
return url == musicInfo.URL;
|
}))
|
{
|
A31MusicModel.Current.LoveMusicInfoList.Add(new MusicInfo { Title = song, URL = url, Artist = artist, Album = album });
|
}
|
}
|
else
|
{
|
A31MusicModel.Current.LoveMusicInfoList.RemoveAll((musicInfo) =>
|
{
|
//也要加歌手名判断
|
return musicInfo.URL == url;
|
});
|
}
|
|
}
|
A31MusicModel.Save();
|
};
|
///我的列表点击事件
|
playView.playlistBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
#region 布局界面---
|
Loading loading = new Loading();
|
UI2.FuntionControlView.Music.View.MyListView myListView = new UI2.FuntionControlView.Music.View.MyListView();
|
myListView.frameLayout(this, A31MusicModel.Current);
|
myListView.dialogFra.AddChidren(loading);//dialogFra刷新图标父控件
|
///下拉刷新
|
myListView.verticalScrolViewLayout.BeginHeaderRefreshingAction += () =>
|
{
|
//结束刷新
|
myListView.verticalScrolViewLayout.EndHeaderRefreshing();
|
};
|
///移除界面
|
EventHandler<MouseEventArgs> removeFromParentView = (sen, e1) =>
|
{
|
myListView.popFra.RemoveFromParent();
|
};
|
myListView.backIextBtn.MouseUpEventHandler += removeFromParentView;
|
myListView.popFra.MouseUpEventHandler += removeFromParentView;
|
#endregion
|
loading.Start();
|
GetMusicList((listName) =>
|
{
|
loading.Hide();
|
PlayListView(myListView.popFra, myListView.verticalScrolViewLayout, listName);
|
UpdateSelectedMusic(myListView.popFra, myListView.verticalScrolViewLayout);
|
});
|
|
};
|
///音量图标点击事件
|
playView.volIconBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
if (A31MusicModel.Current.ServerClientType == 1 && A31MusicModel.Current.Slave.slave_list.Count != 0)
|
{ ///主播放器
|
var volumeView = new View.DialogView { };
|
volumeView.PlayerVolumeView(A31MusicModel.Current);
|
volumeView.UpdateVolume();
|
|
}
|
};
|
///音量进度条点击事件
|
int startVolume =0;//之前的音量
|
//int endVolume = 0;//现在的音量
|
EventHandler<int> progressClick = (sender, e) =>
|
{
|
playView.volValueBtn.Text = playView.volSeekBar.Progress + "%";
|
if (startVolume != e)
|
{
|
startVolume = e;
|
SendMethod.ControlVolume(e, A31MusicModel.Current);
|
A31MusicModel.Current.A31PlayStatus.vol = e.ToString();
|
}
|
};
|
playView.volSeekBar.OnProgressChangedEvent += progressClick;
|
playView.volSeekBar.OnStopTrackingTouchEvent += progressClick;
|
///上一曲点击事件
|
playView.prevBtn.MouseDownEventHandler += (sender, e) =>
|
{
|
playView.prevBtn.IsSelected = true;
|
SendMethod.Previous(A31MusicModel.Current);
|
};
|
playView.prevBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
playView.prevBtn.IsSelected = false;
|
};
|
///暂停/播放点击事件
|
playView.playBtn.MouseDownEventHandler += (sender, e) =>
|
{
|
if (playView.playBtn.IsSelected)
|
{
|
playView.playBtn.IsSelected = false;
|
SendMethod.Pause(A31MusicModel.Current);
|
A31MusicModel.Current.A31PlayStatus.status = "pause";
|
}
|
else
|
{
|
playView.playBtn.IsSelected = true;
|
SendMethod.Play(A31MusicModel.Current);
|
A31MusicModel.Current.A31PlayStatus.status = "play";
|
}
|
};
|
///下一曲点击事件
|
playView.nextBtn.MouseDownEventHandler += (sender, e) =>
|
{
|
playView.nextBtn.IsSelected = true;
|
SendMethod.Next(A31MusicModel.Current);
|
};
|
playView.nextBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
playView.nextBtn.IsSelected = false;
|
};
|
///物理按键的点击事件
|
Volume.VolumeChange = (volume) =>
|
{
|
if (Application.DeviceType == Device.Ios && A31MusicModel.Current.A31PlayStatus.Source == "BLUETOOTH")
|
{
|
return;
|
}
|
playView.volSeekBar.Progress = volume;
|
|
if (startVolume != volume)
|
{
|
startVolume = volume;
|
SendMethod.ControlVolume(volume, A31MusicModel.Current);
|
A31MusicModel.Current.A31PlayStatus.vol = volume.ToString();
|
}
|
|
};
|
#endregion
|
}
|
/// <summary>
|
/// 定义全局线程
|
/// </summary>
|
System.Threading.Thread timerThread;
|
/// <summary>
|
/// 定时更新状态
|
/// </summary>
|
void timerUpdateStatus()
|
{
|
timerThread = new System.Threading.Thread((obj) =>
|
{
|
while (true)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
try
|
{
|
|
//更新总时间
|
//总共有多少秒
|
int totalSecond = int.Parse(A31MusicModel.Current.A31PlayStatus.totlen) / 1000;
|
//分钟
|
int totalMusicMinute = totalSecond / 60;
|
//秒钟
|
int totalMusicSecond = totalSecond % 60;
|
|
string totalTime = (totalMusicMinute.ToString().Length < 2 ? "0" + totalMusicMinute.ToString() : totalMusicMinute.ToString()) + ":" + (totalMusicSecond.ToString().Length < 2 ? "0" + totalMusicSecond.ToString() : totalMusicSecond.ToString());
|
playView.endTimeBtn.Text = totalTime;
|
|
//topView.topNameBtn.Text = A31MusicModel.Current.Name;
|
|
switch (A31MusicModel.Current.A31PlayStatus.loop)
|
{
|
case "0"://列表循环
|
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png";
|
break;
|
case "1"://单曲顺环
|
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
|
break;
|
case "2"://随机播放
|
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png";
|
break;
|
}
|
|
|
if (A31MusicModel.Current.A31PlayStatus.Source == "RADIO-NETWORK")
|
{
|
var v = A31MusicModel.Current.LoveRadioInfoList.Find((like) =>
|
{
|
return like.URL == A31MusicModel.Current.A31PlayStatus.TrackURL;
|
});
|
if (v != null)
|
{
|
playView.loveBtn.IsSelected = true;
|
}
|
else
|
{
|
playView.loveBtn.IsSelected = false;
|
}
|
}
|
else
|
{
|
var v = A31MusicModel.Current.LoveMusicInfoList.Find((like) =>
|
{
|
return like.URL == A31MusicModel.Current.A31PlayStatus.TrackURL;
|
});
|
if (v != null)
|
{
|
playView.loveBtn.IsSelected = true;
|
}
|
else
|
{
|
playView.loveBtn.IsSelected = false;
|
}
|
}
|
playView.regionBtn.Text = A31MusicModel.Current.GetRoomListName();
|
if (A31MusicModel.Current.collect)
|
{
|
playView.collectIconBtn.IsSelected = true;
|
}
|
else
|
{
|
playView.collectIconBtn.IsSelected = false;
|
}
|
//if (A31MusicModel.Current.A31PlayStatus.IsMute)
|
//{
|
// // btnMute.IsSelected = true;//静音图标
|
// playView.volSeekBar.Progress = 0;
|
//}
|
//else
|
//{
|
// // btnMute.IsSelected = false;//静音图标
|
// if (1000 < (DateTime.Now - A31MusicModel.ProgressDateTime).TotalMilliseconds)
|
// {
|
// //声音进度条;
|
// playView.volSeekBar.Progress = int.Parse(A31MusicModel.Current.A31PlayStatus.vol);
|
// //显示当前音量值;
|
// playView.volValueBtn.Text = A31MusicModel.Current.A31PlayStatus.vol + "%";
|
// }
|
//}
|
|
if (1000 < (DateTime.Now - A31MusicModel.ProgressDateTime).TotalMilliseconds)
|
{
|
//音量进度条;
|
playView.volSeekBar.Progress = int.Parse(A31MusicModel.Current.A31PlayStatus.vol);
|
//显示当前音量值;
|
playView.volValueBtn.Text = A31MusicModel.Current.A31PlayStatus.vol + "%";
|
}
|
//更新播放器音量给系统音量
|
Volume.MusicVolume = playView.volSeekBar.Progress;
|
//当前播放音乐时间
|
int playSecond = int.Parse(A31MusicModel.Current.A31PlayStatus.curpos) / 1000 + (int)(DateTime.Now - A31MusicModel.Current.LastDateTime).TotalSeconds;
|
|
int playMusicMinute = playSecond / 60;
|
//秒钟
|
int playMusicSecond = playSecond % 60;
|
|
string playTime = (playMusicMinute.ToString().Length < 2 ? "0" + playMusicMinute.ToString() : playMusicMinute.ToString()) + ":" + (playMusicSecond.ToString().Length < 2 ? "0" + playMusicSecond.ToString() : playMusicSecond.ToString());
|
|
if (A31MusicModel.Current.A31PlayStatus.status == "play")
|
{
|
playView.playBtn.IsSelected = true;
|
//如果在播放,时间就不断变化
|
playView.startTimeBtn.Text = playTime;
|
if (totalSecond == 0)
|
{
|
//歌曲进度条
|
playView.diyArcSeekBar.Progress = 0;
|
}
|
else
|
{
|
//歌曲进度条
|
playView.diyArcSeekBar.Progress = (int)(playSecond * 100.0 / totalSecond);//+1
|
}
|
|
}
|
else
|
{
|
playView.playBtn.IsSelected = false;
|
//停止播放
|
playView.startTimeBtn.Text =playTime;
|
}
|
playView.songNameTextView.Text = (A31MusicModel.Current.A31PlayStatus.Title == null ? "Unkown" : A31MusicModel.Current.A31PlayStatus.Title);
|
playView.singerBtn.Text = (A31MusicModel.Current.A31PlayStatus.Artist == null ? "Unkown" : A31MusicModel.Current.A31PlayStatus.Artist.Trim());
|
//更新源的界面
|
showSourcePage();
|
}
|
catch (Exception e)
|
{
|
var ee = e.Message;
|
}
|
});
|
System.Threading.Thread.Sleep(1000 * 1);
|
}
|
})
|
{ IsBackground = true };
|
timerThread.Start();
|
}
|
/// <summary>
|
/// 更新不同音乐源界面图标状态
|
/// </summary>
|
void showSourcePage()
|
{
|
playView.loveBtn.Alpha = 1;
|
playView.loveBtn.Enable = true;
|
|
playView.playlistBtn.Alpha = 1;
|
playView.playlistBtn.Enable = true;
|
|
playView.prevBtn.Alpha = 1;
|
playView.prevBtn.Enable = true;
|
|
playView.nextBtn.Alpha = 1;
|
playView.nextBtn.Enable = true;
|
|
playView.playOrderBtn.Alpha = 1;
|
playView.playOrderBtn.Enable = true;
|
|
|
playView.diyArcSeekBar.IsClickable = true;
|
|
switch (A31MusicModel.Current.A31PlayStatus.Source)
|
{
|
|
case "QPLAY"://QQ音乐
|
playView.loveBtn.Alpha = 0.5f;
|
playView.loveBtn.Enable = false;
|
break;
|
case "AIRPLAY"://酷狗音乐
|
playView.loveBtn.Alpha = 0.5f;
|
playView.loveBtn.Enable = false;
|
playView.diyArcSeekBar.IsClickable = false;
|
break;
|
case "SONGLIST-NETWORK"://本地音乐
|
break;
|
case "SONGLIST-LOCAL"://USB
|
break;
|
case "RADIO-NETWORK"://在线电台
|
playView.playlistBtn.Alpha = 1;
|
playView.playlistBtn.Enable = true;
|
|
playView.prevBtn.Alpha = 0.5f;
|
playView.prevBtn.Enable = false;
|
|
playView.nextBtn.Alpha = 0.5f;
|
playView.nextBtn.Enable = false;
|
|
playView.playOrderBtn.Alpha = 0.5f;
|
playView.playOrderBtn.Enable = false;
|
break;
|
case "BLUETOOTH"://蓝牙
|
case "LINE-IN"://线路输入
|
playView.loveBtn.Alpha = 0.5f;
|
playView.loveBtn.Enable = false;
|
|
playView.playlistBtn.Alpha = 0.5f;
|
playView.playlistBtn.Enable = false;
|
|
playView.prevBtn.Alpha = 0.5f;
|
playView.prevBtn.Enable = false;
|
|
playView.nextBtn.Alpha = 0.5f;
|
playView.nextBtn.Enable = false;
|
|
playView.playOrderBtn.Alpha = 0.5f;
|
playView.playOrderBtn.Enable = false;
|
|
break;
|
default:
|
playView.diyArcSeekBar.IsClickable = false;
|
playView.loveBtn.Alpha = 0.5f;
|
playView.loveBtn.Enable = false;
|
|
playView.playlistBtn.Alpha = 0.5f;
|
playView.playlistBtn.Enable = false;
|
|
playView.prevBtn.Alpha = 0.5f;
|
playView.prevBtn.Enable = false;
|
|
playView.nextBtn.Alpha = 0.5f;
|
playView.nextBtn.Enable = false;
|
|
playView.playOrderBtn.Alpha = 0.5f;
|
playView.playOrderBtn.Enable = false;
|
break;
|
}
|
}
|
/// <summary>
|
/// 加载播放音乐列表View
|
/// </summary>
|
/// <param name="verticalScrolViewLayout"></param>
|
void PlayListView(FrameLayout frameLayout, VerticalRefreshLayout verticalScrolViewLayout, string playListName)
|
{
|
verticalScrolViewLayout.RemoveAll();
|
UI2.FuntionControlView.Music.UpdateThread.playMusuc(verticalScrolViewLayout,"播放列表", playListName, A31MusicModel.Current.CurrentPlayMusicInfoList,A31MusicModel.Current,frameLayout);
|
}
|
/// <summary>
|
/// 定时更新当前播放音乐
|
/// </summary>
|
void UpdateSelectedMusic(FrameLayout frameLayout, VerticalRefreshLayout middViewLayout)
|
{
|
UI2.FuntionControlView.Music.UpdateThread.updateThread(frameLayout, middViewLayout, A31MusicModel.Current);
|
}
|
/// <summary>
|
/// 读取播放音乐列表
|
/// </summary>
|
/// <param name="action"></param>
|
void GetMusicList(Action<string> action) {
|
System.Threading.Tasks.Task.Run(() =>
|
{
|
string playListName = "List";
|
string sourceName = "SourceName";
|
try
|
{
|
if (A31MusicModel.Current.A31PlayStatus.Source == "STATION-NETWORK")
|
{
|
A31MusicModel.Current.CurrentPlayMusicInfoList = new List<MusicInfo>();
|
return;
|
}
|
if (A31MusicModel.Current.A31PlayStatus.Source == "AIRPLAY")
|
{
|
A31MusicModel.Current.CurrentPlayMusicInfoList = new List<MusicInfo>();
|
return;
|
}
|
var playString = SendMethod.GetCurrentPlayList(A31MusicModel.Current);
|
A31MusicModel.Current.CurrentPlayMusicInfoList = new List<MusicInfo>();
|
var se = System.Security.SecurityElement.FromString(playString);
|
while (se.Children != null)
|
{
|
se = se.Children[0] as System.Security.SecurityElement;
|
}
|
playListName = SecurityElement.FromString(se.Text).SearchForChildByTag("ListName").Text;
|
sourceName = SecurityElement.FromString(se.Text).SearchForChildByTag("ListInfo").SearchForTextOfTag("SourceName");
|
foreach (SecurityElement track in SecurityElement.FromString(se.Text).SearchForChildByTag("Tracks").Children)
|
{
|
MusicInfo musicInfo = new MusicInfo();
|
musicInfo.URL = track.SearchForTextOfTag("URL").Replace("&", "&amp;");
|
var metadata = track.SearchForTextOfTag("Metadata");
|
musicInfo.SourceName = track.SearchForTextOfTag("Source");
|
if (string.IsNullOrEmpty(metadata))
|
{
|
continue;
|
}
|
if (A31MusicModel.IsJson(metadata))
|
{
|
var qqSong = Newtonsoft.Json.JsonConvert.DeserializeObject<SendMethod.A31QQSong>(metadata);
|
musicInfo.Album = qqSong.album;
|
musicInfo.Title = qqSong.title;
|
musicInfo.Artist = qqSong.creator;
|
}
|
else
|
{
|
metadata = metadata.Replace("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "").Replace("&", "&amp;");
|
var item = SecurityElement.FromString(metadata).SearchForChildByTag("item");
|
musicInfo.Title = item.SearchForTextOfTag("dc:title");
|
musicInfo.Artist = item.SearchForTextOfTag("upnp:artist");
|
musicInfo.Album = item.SearchForTextOfTag("upnp:album");
|
musicInfo.Duration = item.SearchForTextOfTag("res");
|
musicInfo.AlbumId = item.SearchForTextOfTag("song:albumid");
|
}
|
A31MusicModel.Current.CurrentPlayMusicInfoList.Add(musicInfo);
|
}
|
}
|
catch { }
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
action(playListName);
|
//loading.Hide();
|
//PlayListView(myListView.popFra, myListView.verticalScrolViewLayout, playListName);
|
//UpdateSelectedMusic(myListView.popFra, myListView.verticalScrolViewLayout);
|
});
|
}
|
});
|
|
}
|
}
|
}
|