using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone.UserCenter.UserMain
{
///
/// 消息中心
///
public class MessageManagementForm : EditorCommonForm
{
#region ■ 变量声明___________________________
///
/// 列表控件
///
private VerticalFrameRefreshControl listView = null;
///
/// 全部的行
///
private Dictionary dicAllRow = null;
#endregion
#region ■ 初始化_____________________________
///
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
///
public void ShowForm()
{
//设置头部信息
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uMessageCenter));
//初始化右上角菜单
this.InitTopRightMenu();
listView = new VerticalFrameRefreshControl(35);
listView.Height = bodyFrameLayout.Height;
bodyFrameLayout.AddChidren(listView);
listView.BeginHeaderRefreshingAction += () =>
{
HdlThreadLogic.Current.RunThread(() =>
{
//初始化中部信息
this.InitMiddleData(false);
});
};
HdlThreadLogic.Current.RunThread(() =>
{
//打开进度条
this.ShowProgressBar();
//初始化中部信息
this.InitMiddleData(true);
});
}
///
/// 初始化中部信息
///
private async void InitMiddleData(bool showReload)
{
//获取数据
var dicData = await this.GetMessageData();
//关闭进度条
this.CloseProgressBar(dicData == null && showReload == true ? ShowReLoadMode.YES : ShowReLoadMode.NO);
HdlThreadLogic.Current.RunMain(() =>
{
//关闭刷新特效
listView?.EndHeaderRefreshing();
});
if (dicData == null)
{
//数据异常
return;
}
HdlThreadLogic.Current.RunMain(() =>
{
//初始化中部控件
this.InitMiddleFrame(dicData);
});
}
///
/// 初始化中部控件
///
///
private void InitMiddleFrame(Dictionary> dicData)
{
//清空
listView.RemoveAll();
int index = 0;
foreach (var keys in dicData.Keys)
{
var listData = dicData[keys];
index++;
//容器
var framBack = new FrameListControl(23);
framBack.Name = index.ToString();
framBack.Height = Application.GetRealHeight(100);
framBack.BackgroundColor = UserCenterColor.Current.White;
listView.AddChidrenFrame(framBack);
//日期
string strMonth = Language.StringByID(R.MyInternationalizationString.Month);
string strDate = Language.StringByID(R.MyInternationalizationString.Day);
var frameDate = new FrameLayout();
frameDate.Height = Application.GetRealHeight(118);
framBack.AddChidren(frameDate);
var btnDate = new NormalViewControl(500, 60, true);
btnDate.TextSize = 15;
btnDate.X = ControlCommonResourse.XXLeft;
btnDate.Y = Application.GetRealHeight(35);
btnDate.Text = Convert.ToDateTime(listData[0].MsgTime).ToString("MM" + strMonth + "dd" + strDate);
frameDate.AddChidren(btnDate);
for (int i = 0; i < listData.Count; i++)
{
//添加信息行
this.AddMsgRowControl(framBack, listData[i], i != listData.Count - 1);
}
//调整高度
listView.AdjustChidrenFrameHeight(framBack, Application.GetRealHeight(23));
if (index == dicData.Count)
{
listView.AdjustTableHeight();
}
}
}
#endregion
#region ■ 右上角菜单_________________________
///
/// 初始化右上角菜单
///
private void InitTopRightMenu()
{
var btnIcon = new MostRightIconControl(69, 69);
btnIcon.UnSelectedImagePath = "Item/More.png";
topFrameLayout.AddChidren(btnIcon);
btnIcon.InitControl();
btnIcon.ButtonClickEvent += ((sender, e) =>
{
//显示底部菜单界面
this.ShowBottomMenu();
});
}
///
/// 显示底部菜单界面
///
private void ShowBottomMenu()
{
var menuContr = new BottomMenuSelectForm();
menuContr.AddForm(2);
//全部已读
menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.uAllRead), () =>
{
//设置全部为已读
this.SetAllTickIsRead();
});
//全部删除
menuContr.AddMenu(Language.StringByID(R.MyInternationalizationString.uAllDelete), () =>
{
//删除全部的消息
this.DeleteAllMsg();
});
}
#endregion
#region ■ 添加信息行_________________________
///
/// 添加信息行
///
///
///
///
private void AddMsgRowControl(FrameListControl frameList, MessageRecordInfo recordInfo, bool addLine)
{
var rowControl = new RowLayoutControl(frameList.rowSpace / 2);
frameList.AddChidren(rowControl);
rowControl.Name = frameList.ChildrenCount.ToString();
rowControl.MainKeys = recordInfo.Id;
this.dicAllRow[frameList.Name + "-" + rowControl.Name] = rowControl;
//图标(现在测试)
var btnIcon = rowControl.frameTable.AddLeftIcon(81);
btnIcon.UnSelectedImagePath = "Item/Safety.png";
//消息类型
var btnMsgObject = rowControl.frameTable.AddLeftCaption("报警消息", 600);
PicViewControl btnNewTip = null;
if (recordInfo.IsRead == 0)
{
btnNewTip = new PicViewControl(78, 55);
btnNewTip.UnSelectedImagePath = "Item/NewVersion.png";
btnNewTip.Y = Application.GetRealHeight(9) + rowControl.frameTable.chidrenYaxis;
btnNewTip.X = btnMsgObject.X + btnMsgObject.GetRealWidthByText(14);
rowControl.frameTable.AddChidren(btnNewTip, ChidrenBindMode.BindEventOnly);
}
//消息
var btnMsg = rowControl.frameTable.AddMostRightView(recordInfo.MsgContent, 600, 60);
btnMsg.TextColor = UserCenterColor.Current.TextGrayColor3;
btnMsg.Y = Application.GetRealHeight(5) + rowControl.frameTable.chidrenYaxis;
rowControl.frameTable.AddChidren(btnMsg, ChidrenBindMode.BindEventOnly);
//时间
var btnTime = rowControl.frameTable.AddMostRightView(recordInfo.MsgContent, 200, 50);
btnTime.TextColor = UserCenterColor.Current.TextGrayColor1;
btnTime.Y = btnMsg.Bottom + Application.GetRealHeight(12);
btnTime.Text = Convert.ToDateTime(recordInfo.MsgTime).ToString("HH:mm");
rowControl.frameTable.AddChidren(btnTime, ChidrenBindMode.BindEventOnly);
//底线
if (addLine == true)
{
rowControl.frameTable.AddBottomLine();
}
//已读
if (recordInfo.IsRead == 1)
{
rowControl.frameTable.UseClickStatu = false;
//消息类型
btnMsgObject.TextColor = UserCenterColor.Current.TextGrayColor1;
//消息
btnMsg.TextColor = UserCenterColor.Current.TextGrayColor1;
}
//删除
var btnDelete = rowControl.AddDeleteControl();
btnDelete.ButtonClickEvent += (sender, e) =>
{
//确认删除消息?
string msg = Language.StringByID(R.MyInternationalizationString.uDeleteMessageMsg);
this.ShowMassage(ShowMsgType.Confirm, msg, async () =>
{
await this.DeleteMsg(recordInfo.Id, frameList, rowControl);
});
};
//点击
rowControl.frameTable.ButtonClickEvent += async (sender, e) =>
{
if (recordInfo.IsRead == 1)
{
return;
}
recordInfo.IsRead = 1;
rowControl.frameTable.UseClickStatu = false;
//消息类型
btnMsgObject.TextColor = UserCenterColor.Current.TextGrayColor1;
//消息
btnMsg.TextColor = UserCenterColor.Current.TextGrayColor1;
btnNewTip.RemoveFromParent();
if (sender != null)
{
//标记已读(不管它成功不成功)
await this.SetTickIsRead(recordInfo.Id);
}
};
}
#endregion
#region ■ 标记已读___________________________
///
/// 标记已读
///
///
private async System.Threading.Tasks.Task SetTickIsRead(string strId)
{
string strUrl = "ZigbeeUsers/TickIsRead?Id=" + strId;
var result = await Common.CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync(strUrl, null, "GET");
if (result == null)
{
return UserCenterLogic.CheckNotEorrorMsg(null, "ZigbeeUsers/TickIsRead", null, null);
}
//云端是不会返回东西的
return true;
}
///
/// 设置全部为已读
///
private void SetAllTickIsRead()
{
if (dicAllRow.Count == 0)
{
return;
}
//确认标记全部消息为已读?
this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uUnTipAllMessageMsg), () =>
{
HdlThreadLogic.Current.RunThread(async () =>
{
//打开进度条
this.ShowProgressBar();
foreach (var contr in this.dicAllRow.Values)
{
//标识全部为已读
var result = await this.SetTickIsRead(contr.MainKeys);
if (result == false)
{
//关闭进度条
this.CloseProgressBar();
return;
}
}
//关闭进度条
this.CloseProgressBar();
HdlThreadLogic.Current.RunMain(() =>
{
//设置全部状态
foreach (var contr in this.dicAllRow.Values)
{
contr.frameTable.ButtonClickEvent?.Invoke(null, null);
}
});
});
});
}
#endregion
#region ■ 删除信息___________________________
///
/// 删除信息
///
///
///
///
private async System.Threading.Tasks.Task DeleteMsg(string strId, FrameListControl frameList, RowLayoutControl rowContr)
{
string strUrl = "ZigbeeUsers/DeletePushMessage?Id=" + strId;
var result = await Common.CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync(strUrl, null, "GET");
if (result == null)
{
return UserCenterLogic.CheckNotEorrorMsg(null, "ZigbeeUsers/DeletePushMessage", null, null);
}
//云端是不会返回东西的
if (frameList != null)
{
HdlThreadLogic.Current.RunMain(() =>
{
//移除缓存
this.dicAllRow.Remove(frameList.Name + "-" + rowContr.Name);
//调整控件位置
this.AdjustControlLocation(frameList, rowContr);
});
}
return true;
}
///
/// 删除全部的消息
///
private void DeleteAllMsg()
{
if (dicAllRow.Count == 0)
{
return;
}
//确认删除全部消息?
this.ShowMassage(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.uDeleteAllMessageMsg), () =>
{
HdlThreadLogic.Current.RunThread(async () =>
{
//打开进度条
this.ShowProgressBar();
foreach (var contr in this.dicAllRow.Values)
{
//删除全部消息
var result = await this.DeleteMsg(contr.MainKeys, null, null);
if (result == false)
{
//关闭进度条
this.CloseProgressBar();
return;
}
}
//初始化中部信息
this.InitMiddleData(true);
});
});
}
#endregion
#region ■ 调整控件位置_______________________
///
/// 调整控件位置
///
///
private void AdjustControlLocation(FrameListControl frameList, RowLayoutControl removeRow)
{
int changedHeight = frameList.GetChildren(frameList.ChildrenCount - 1).Height;
if (frameList.ChildrenCount <= 2)
{
//已经删完了,只剩下标题日期了
changedHeight = frameList.Height;
}
//先调整各自容器的Y轴坐标
bool canChangedLoaction = false;
for (int i = 0; i < this.listView.frameTable.ChildrenCount; i++)
{
var myView = this.listView.frameTable.GetChildren(i);
if (myView.Name == frameList.Name)
{
//它之后的控件全部往上移动
canChangedLoaction = true;
continue;
}
if (canChangedLoaction == true)
{
myView.Y -= changedHeight;
}
}
//调整父容器大小
this.listView.AdjustTableHeight();
if (frameList.ChildrenCount <= 2)
{
//已经删完了,只剩下标题日期了
frameList.RemoveFromParent();
}
else
{
//这个容器里面被移除的行的下面的全部行,往上移动
bool changedFlage = false;
for (int i = 0; i < frameList.ChildrenCount; i++)
{
var myView = frameList.GetChildren(i);
if (myView.Name == removeRow.Name)
{
//它之后的控件全部往上移动
changedFlage = true;
continue;
}
if (changedFlage == true)
{
myView.Y -= changedHeight;
}
}
//移除指定的行
removeRow.RemoveFromParent();
//容器大小减少
frameList.Height -= changedHeight;
}
}
#endregion
#region ■ 获取数据___________________________
///
/// 获取消息记录
///
///
private async System.Threading.Tasks.Task>> GetMessageData()
{
this.dicAllRow = new Dictionary();
var result = await UserCenterLogic.GetResponseDataByRequestHttps("ZigbeeUsers/GetPushMessageRecord", false, "");
if (result == null)
{
return null;
}
var dataInfo = Newtonsoft.Json.JsonConvert.DeserializeObject>(result);
//合并数据
return this.MergeMessageRecordData(dataInfo);
}
///
/// 合并数据
///
///
///
private Dictionary> MergeMessageRecordData(List dataInfo)
{
var dicData = new Dictionary>();
//首先先排序一下,时间大的放在前面
var dicTemp = new Dictionary>();
var listSortKeys = new List();
foreach (var data in dataInfo)
{
if (dicTemp.ContainsKey(data.MsgTime) == false)
{
dicTemp[data.MsgTime] = new List();
listSortKeys.Add(data.MsgTime);
}
dicTemp[data.MsgTime].Add(data);
}
listSortKeys.Sort();
for (int i = listSortKeys.Count - 1; i >= 0; i--)
{
var listData = dicTemp[listSortKeys[i]];
foreach (var data2 in listData)
{
string[] myArry = data2.MsgTime.Split(new string[] { "T" }, StringSplitOptions.RemoveEmptyEntries);
if (myArry.Length != 2)
{
continue;
}
if (dicData.ContainsKey(myArry[0]) == false)
{
dicData[myArry[0]] = new List();
}
dicData[myArry[0]].Add(data2);
}
}
return dicData;
}
#endregion
}
}