using System;
using Shared;
using com.hdl.on;
using System.Collections.Generic;
using System.Security;
using HDL_ON.UI.UI2.FuntionControlView.Music;
using HDL_ON.Entity;
namespace HDL_ON.UI.Music
{
public class A31PlayMusicPage : FrameLayout
{
///
/// 当前对象构造函数
///
public A31PlayMusicPage() { }
///
/// 重写RemoveFromParent方法
///
public override void RemoveFromParent()
{
base.RemoveFromParent();
Volume.VolumeChange = null;
if (timerThread != null)
{
try
{
if (timerThread.IsAlive)
{
timerThread.Abort();
}
}
catch { }
}
}
///
/// new布局界面
///
View.PlayView playView = new View.PlayView();
TopView topView;
public void Show()
{
///1秒定时更新状态
TimerUpdateStatus();
#region ---界面布局---
this.BackgroundColor = MusicColor.ViewColor;
topView = new TopView();
topView.setBtn.Visible = true;
this.AddChidren(topView.TopFLayoutView());
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.Visible = false;//先暂时隐藏收藏功能
//收藏图标事件
playView.collectIconBtn.MouseUpEventHandler += (sender, e) =>
{
playView.collectIconBtn.IsSelected = !playView.collectIconBtn.IsSelected;
if (playView.collectIconBtn.IsSelected)
{
A31MusicModel.Current.functionMusic.collect = true;
}
else
{
A31MusicModel.Current.functionMusic.collect = false;
}
A31MusicModel.Current.functionMusic.CollectFunction();
};
///切换播放模式点击事件;
playView.playOrderBtn.MouseUpEventHandler += (sender, e) =>
{
string msg = Language.StringByID(StringId.switchTo);
//获取当前播放模式
string currModeKeyValue = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.mode);
//获取音乐播放模式列表
var attributes = A31MusicModel.Current.functionMusic.GetAttribute(KeyProperty.mode);
if (attributes == null)
{
attributes = new FunctionAttributes();
}
var attributesList = attributes.value;
//找到当前播放模式索引值
int currModeIndexe = attributesList.IndexOf(currModeKeyValue);
//记录选中的播放模式的索引值
int count = 0;
if (currModeIndexe >= attributesList.Count - 1)
{
//重置索引值
count = 0;
}
else
{
count = currModeIndexe + 1;
}
//通过索引值找到模式value值
string modeValueString = attributesList[count];
switch (modeValueString)
{
//list_cycle列表循环,single_cycle单曲循环,random随机播放;
case ValueProperty.list_cycle:
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png";
msg += Language.StringByID(StringId.listMode);
break;
case ValueProperty.single_cycle:
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single_cycle.png";
msg += Language.StringByID(StringId.singleCycleMode);
break;
case ValueProperty.random:
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png";
msg += Language.StringByID(StringId.randomMode);
break;
case ValueProperty.single:
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
msg += Language.StringByID(StringId.single);
break;
case ValueProperty.order:
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/order.png";
msg += Language.StringByID(StringId.orderMode);
break;
}
//写入缓存
A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.mode, modeValueString);
new PublicAssmebly().TipMsgAutoClose(msg, false, 1000);
Dictionary dic = new Dictionary();
dic.Add(KeyProperty.mode, modeValueString);
//发送控制指令
SendMethod.Current.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
};
///添加喜爱点击事件;
playView.loveBtn.MouseUpEventHandler += (sender, e) =>
{
var name = A31MusicModel.Current.functionMusic.GetAttribute("song_name").ToString();
var songTime = A31MusicModel.Current.functionMusic.GetAttribute("song_time").ToString();
playView.loveBtn.IsSelected = !playView.loveBtn.IsSelected;
if (playView.loveBtn.IsSelected)
{
if (null == A31MusicModel.Current.LoveMusicInfoList.Find((musicInfo) =>
{
return name == musicInfo.name;
}))
{
A31MusicModel.Current.LoveMusicInfoList.Add(new SongInfo { name = name, time = songTime });
}
}
else
{
A31MusicModel.Current.LoveMusicInfoList.RemoveAll((musicInfo) =>
{
//也要加歌手名判断
return musicInfo.name == name;
});
}
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刷新图标父控件
loading.Start();
///下拉刷新
myListView.verticalScrolViewLayout.BeginHeaderRefreshingAction += () =>
{
myListView.verticalScrolViewLayout.EndHeaderRefreshing(); //结束刷新
loading.Start();
System.Threading.Tasks.Task.Run((() =>
{
try
{
A31MusicModel.Current.CurrentPlayMusicInfoList.Clear();
if (A31MusicModel.Current.CurrentPlayMusicInfoList.Count == 0)
{
SendMethod.Current.GetCurrentPalyList(A31MusicModel.Current.functionMusic, () =>
{
Application.RunOnMainThread(() =>
{
myListView.verticalScrolViewLayout.RemoveAll();
var listName = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.playlist_name);
var source = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.source);
var musicList = A31MusicModel.Current.GetSongList(listName);
A31SongPlay.SongListView(myListView.verticalScrolViewLayout, musicList, listName, source, myListView.popFra);
});
});
}
}
catch
{
}
finally
{
Application.RunOnMainThread(() =>
{
loading.Hide();
//myListView.verticalScrolViewLayout.EndHeaderRefreshing();
//myListView.verticalScrolViewLayout.RemoveAll();
//var listName = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.playlist_name);
//var source = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.source);
//var musicList = A31MusicModel.Current.GetSongList(listName);
//A31SongPlay.SongListView(myListView.verticalScrolViewLayout, musicList, listName, source, myListView.popFra);
});
}
}));
};
///移除界面
EventHandler removeFromParentView = (sen, e1) =>
{
myListView.popFra.RemoveFromParent();
};
myListView.backIextBtn.MouseUpEventHandler += removeFromParentView;
//myListView.popFra.MouseUpEventHandler += removeFromParentView;
#endregion
//var listName = A31MusicModel.Current.functionMusic.GetAttribute("playlist_name").ToString();
//var musicList = A31MusicModel.Current.GetSongList(listName);
//new A31SongPlay { }.SongListView(myListView.verticalScrolViewLayout, musicList, listName);
this.PlayListView(myListView.popFra, myListView.verticalScrolViewLayout, loading);
this.UpdateSelectedMusic(myListView.popFra, myListView.verticalScrolViewLayout);
};
///音量图标点击事件
playView.volIconBtn.MouseUpEventHandler += (sender, e) =>
{
};
///音量进度条点击事件
int startVolume = 0;//之前的音量
//int endVolume = 0;//现在的音量
EventHandler progressClick = (sender, e) =>
{
playView.volValueBtn.Text = playView.volSeekBar.Progress + "%";
if (startVolume != e)
{
///更新最新值
A31MusicModel.ProgressDateTime = DateTime.Now;
startVolume = e;
A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.volume, startVolume);
Dictionary dic = new Dictionary();
dic.Add(KeyProperty.volume, startVolume.ToString());
SendMethod.Current.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
}
};
playView.volSeekBar.OnProgressChangedEvent += progressClick;
playView.volSeekBar.OnStopTrackingTouchEvent += progressClick;
///上一曲点击事件
playView.prevBtn.MouseDownEventHandler += (sender, e) =>
{
playView.prevBtn.IsSelected = true;
A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.song_step, ValueProperty.down);
Dictionary dic = new Dictionary();
dic.Add(KeyProperty.song_step, ValueProperty.up);
SendMethod.Current.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
};
playView.prevBtn.MouseUpEventHandler += (sender, e) =>
{
playView.prevBtn.IsSelected = false;
};
///暂停/播放点击事件
playView.playBtn.MouseDownEventHandler += (sender, e) =>
{
string status = string.Empty;
if (playView.playBtn.IsSelected)
{
playView.playBtn.IsSelected = false;
status = ValueProperty.off;
}
else
{
playView.playBtn.IsSelected = true;
status = ValueProperty.on;
}
A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.on_off, status);
Dictionary dic = new Dictionary();
dic.Add(KeyProperty.on_off, status);
SendMethod.Current.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
};
///下一曲点击事件
playView.nextBtn.MouseDownEventHandler += (sender, e) =>
{
playView.nextBtn.IsSelected = true;
A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.song_step, ValueProperty.down);
Dictionary dic = new Dictionary();
dic.Add(KeyProperty.song_step, ValueProperty.down);
SendMethod.Current.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
};
playView.nextBtn.MouseUpEventHandler += (sender, e) =>
{
playView.nextBtn.IsSelected = false;
};
/////物理按键的点击事件
//Volume.VolumeChange = (volume) =>
//{
// if (Application.DeviceType == Device.Ios && A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.source) == "bluetooth")
// {
// return;
// }
// playView.volSeekBar.Progress = volume;
// if (startVolume != volume)
// {
// startVolume = volume;
// A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.volume, startVolume);
// Dictionary dic = new Dictionary();
// dic.Add(KeyProperty.volume, startVolume.ToString());
// SendMethod.mMethod.SendControlCommand(A31MusicModel.Current.functionMusic, dic);
// }
//};
#endregion
}
///
/// 定义全局线程
///
System.Threading.Thread timerThread;
///
/// 定时更新状态
///
void TimerUpdateStatus()
{
timerThread = new System.Threading.Thread((obj) =>
{
try
{
while (true)
{
Application.RunOnMainThread(() =>
{
try
{
//更新总时间
//总共有多少秒
int totalSecond = int.Parse(A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.song_time));
//分钟
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.functionMusic.name;
//显示播放模式图标
switch (A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.mode))
{
case ValueProperty.list_cycle://列表循环
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/list.png";
break;
case ValueProperty.single_cycle://单曲循环
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single_cycle.png";
break;
case ValueProperty.random://随机播放
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/random.png";
break;
case ValueProperty.single:// 单曲
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/single.png";
break;
case ValueProperty.order://循序循环
playView.playOrderBtn.UnSelectedImagePath = "MusicIcon/order.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.functionMusic.GetRoomListName();
//显示播放器收藏状态
if (A31MusicModel.Current.functionMusic.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 + "%";
// }
//}
//为了防止音量条跳动,延长更新时间(多加1s)
if (2000 < (DateTime.Now - A31MusicModel.ProgressDateTime).TotalMilliseconds || A31MusicModel.ProgressDateTime == DateTime.MinValue)
{
//显示音量进度条值;
playView.volSeekBar.Progress = int.Parse(A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.volume));
//显示当前音量值;
playView.volValueBtn.Text = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.volume) + "%";
}
//更新播放器音量给系统音量
//Volume.MusicVolume = playView.volSeekBar.Progress;
//当前播放音乐时间
//按道理不会为空,GetAttrState("playing_time")值可能为空,强制转换int.Parse()会出现异常,不过也做了异常处理了
int playSecond = int.Parse(A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.playing_time));
//识别音乐状态是否在播放状态
if (A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.on_off) == ValueProperty.on)
{
//音乐在播放时,再计算播放时间(现在时间=原来时间+1秒)
//playSecond += (int)(DateTime.Now - A31MusicModel.Current.LastDateTime).TotalSeconds;
playSecond += 1;//表示加上等待的时间1s
///歌曲记录暂时时间写入缓存;
A31MusicModel.Current.functionMusic.SetAttrState(KeyProperty.playing_time, playSecond);
}
if (playSecond <= 0)
{
///播放时间不能小于0;
playSecond = 0;
}
if (playSecond >= totalSecond)
{
///播放时间不能超过总时间;
playSecond = totalSecond;
}
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());
//显示播放时间
playView.startTimeBtn.Text = playTime;
//显示播放状态
if (A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.on_off) == ValueProperty.on)
{
//播放
playView.playBtn.IsSelected = true;
}
else
{
//暂停
playView.playBtn.IsSelected = false;
///记录歌曲暂停时间;
A31MusicModel.Current.LastDateTime = DateTime.Now;
}
//显示进度条值
if (totalSecond == 0)
{
//歌曲播放进度
playView.diyArcSeekBar.Progress = 0;
}
else
{
//歌曲播放进度
playView.diyArcSeekBar.Progress = (int)(playSecond * 100.0 / totalSecond);//+1
}
//显示歌曲名称
playView.songNameTextView.Text = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.song_name) == null ? "Unkown" : A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.song_name);
//显示歌手名称
playView.singerBtn.Text = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.song_name) == null ? "Unkown" : A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.song_name);
//更新源的界面
// showSourcePage();
}
catch (Exception e)
{
var ee = e.Message;
}
});
System.Threading.Thread.Sleep(1000 * 1);
}
}
catch (Exception e) { }
})
{ IsBackground = true };
timerThread.Start();
}
///
/// 更新不同音乐源界面图标状态
///
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.functionMusic.GetAttrState("source"))
{
//sdcard/audio_in/ftp/radio/bluetooth
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;
}
}
///
/// 加载播放音乐列表View
///
///
private void PlayListView(FrameLayout frameLayout, VerticalRefreshLayout verticalScrolViewLayout, Loading loading)
{
verticalScrolViewLayout.RemoveAll();
var listName = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.playlist_name);
var source = A31MusicModel.Current.functionMusic.GetAttrState(KeyProperty.source);
//获取缓存歌曲列表
var musicList = A31MusicModel.Current.GetSongList(listName);
loading.Start();
if (musicList.Count == 0)
{
System.Threading.Tasks.Task.Run((() =>
{
try
{
A31MusicModel.Current.CurrentPlayMusicInfoList.Clear();
if (A31MusicModel.Current.CurrentPlayMusicInfoList.Count == 0)
{
//获取歌曲列表
SendMethod.Current.GetCurrentPalyList(A31MusicModel.Current.functionMusic, () =>
{
Application.RunOnMainThread(() =>
{
musicList = A31MusicModel.Current.GetSongList(listName);
A31SongPlay.SongListView(verticalScrolViewLayout, musicList, listName, source, frameLayout);
});
});
}
}
catch
{
}
finally
{
Application.RunOnMainThread(() =>
{
loading.Hide();
//musicList = A31MusicModel.Current.GetSongList(listName);
//A31SongPlay.SongListView(verticalScrolViewLayout, musicList, listName, source, frameLayout);
});
}
}));
}
else
{
Application.RunOnMainThread(() =>
{
loading.Hide();
A31SongPlay.SongListView(verticalScrolViewLayout, musicList, listName, source, frameLayout);
});
}
}
///
/// 定时更新当前播放音乐
///
private void UpdateSelectedMusic(FrameLayout frameLayout, VerticalRefreshLayout middViewLayout)
{
UpdateThread.updateCurrMusicThread(frameLayout, middViewLayout, A31MusicModel.Current);
}
}
}