using System;
using Shared;
using HDL_ON.UI.CSS;
using System.Collections.Generic;
using System.Threading;
using HDL_ON.DAL.Server;
namespace HDL_ON.UI
{
///
/// 信息中心页面
///
public class MessageCenterPage : FrameLayout
{
FrameLayout bodyView;
///
/// 当前
///
VerticalScrolViewLayout bodyScrolView;
///
/// 内容为空提示View
///
FrameLayout emptyTipView;
///
/// menuView
///
FrameLayout menuView;
MenuButton allMenuButton;
MenuButton shareMenuButton;
MenuButton alarmMenuButton;
MenuButton systemMenuButton;
FrameLayout messageView;
///
/// 显示的消息类型
/// 0全部 1分享与功能 2报警类 3系统信息
///
int showMesType = 0;
///
/// 推送消息列表
///
List PushMessageInfoList = new List();
///
///
///
public MessageCenterPage()
{
bodyView = this;
BackgroundColor = CSS_Color.BackgroundColor;
}
///
///
///
///
public void LoadPage(Action backAction)
{
new TopViewDiv(bodyView, Language.StringByID(StringId.MessageCenter)).LoadTopView(backAction);
AddTopMenuView();
AddMessageView();
MenuButtonSelect(showMesType);
//测试代码
//AddEmptyTipView();
//TestLoad();
}
///
/// 顶部菜单选项
///
void AddTopMenuView()
{
menuView = new FrameLayout()
{
Y = Application.GetRealHeight(64),
Height = Application.GetRealWidth(117),
BackgroundColor = CSS_Color.MainBackgroundColor,
};
bodyView.AddChidren(menuView);
#region 全部按钮
allMenuButton = new MenuButton()
{
X = Application.GetRealWidth(15),
Y = Application.GetRealWidth(16),
};
menuView.AddChidren(allMenuButton);
allMenuButton.ImageButton.SelectedImagePath = "Collection/MesCenter/AllOn.png";
allMenuButton.ImageButton.UnSelectedImagePath = "Collection/MesCenter/All.png";
allMenuButton.TextButton.TextID = StringId.All;
Action allAction = () =>
{
MenuButtonSelect(0);
};
allMenuButton.SelectAction = allAction;
#endregion
#region 分享与功能
shareMenuButton = new MenuButton()
{
X = allMenuButton.Right,
Y = Application.GetRealWidth(16),
};
menuView.AddChidren(shareMenuButton);
shareMenuButton.ImageButton.SelectedImagePath = "Collection/MesCenter/ShareOn.png";
shareMenuButton.ImageButton.UnSelectedImagePath = "Collection/MesCenter/Share.png";
shareMenuButton.TextButton.TextID = StringId.SharingAndFunctionality;
Action shateAction = () =>
{
MenuButtonSelect(1);
};
shareMenuButton.SelectAction = shateAction;
#endregion
#region 报警类
alarmMenuButton = new MenuButton()
{
X = shareMenuButton.Right,
Y = Application.GetRealWidth(16),
};
menuView.AddChidren(alarmMenuButton);
alarmMenuButton.ImageButton.SelectedImagePath = "Collection/MesCenter/AlarmOn.png";
alarmMenuButton.ImageButton.UnSelectedImagePath = "Collection/MesCenter/Alarm.png";
alarmMenuButton.TextButton.TextID = StringId.AlarmType;
Action alarmAction = () =>
{
MenuButtonSelect(2);
};
alarmMenuButton.SelectAction = alarmAction;
#endregion
#region 系统信息
systemMenuButton = new MenuButton()
{
X = alarmMenuButton.Right,
Y = Application.GetRealWidth(16),
};
menuView.AddChidren(systemMenuButton);
systemMenuButton.ImageButton.SelectedImagePath = "Collection/MesCenter/SystemOn.png";
systemMenuButton.ImageButton.UnSelectedImagePath = "Collection/MesCenter/System.png";
systemMenuButton.TextButton.TextID = StringId.SystemMessage;
Action systemAction = () =>
{
MenuButtonSelect(3);
};
systemMenuButton.SelectAction = systemAction;
#endregion
}
///
/// 中间信息内容
///
void AddMessageView()
{
int messageViewY = menuView.Bottom + Application.GetRealWidth(8);
int messageViewHeight = bodyView.Height - messageViewY;
messageView = new FrameLayout()
{
Y = messageViewY,
Height = messageViewHeight,
BackgroundColor = CSS_Color.MainBackgroundColor,
};
bodyView.AddChidren(messageView);
bodyScrolView = new VerticalScrolViewLayout()
{
Height = messageViewHeight,
};
messageView.AddChidren(bodyScrolView);
}
///
///
///
/// 0全部 1分享与功能 2报警类 3系统信息
void MenuButtonSelect(int selectId)
{
showMesType = selectId;
if (selectId == 0)
{
allMenuButton.IsSelected = true;
shareMenuButton.IsSelected = false;
alarmMenuButton.IsSelected = false;
systemMenuButton.IsSelected = false;
}
else if (selectId == 1)
{
allMenuButton.IsSelected = false;
shareMenuButton.IsSelected = true;
alarmMenuButton.IsSelected = false;
systemMenuButton.IsSelected = false;
}
else if (selectId == 2)
{
allMenuButton.IsSelected = false;
shareMenuButton.IsSelected = false;
alarmMenuButton.IsSelected = true;
systemMenuButton.IsSelected = false;
}
else if (selectId == 3)
{
allMenuButton.IsSelected = false;
shareMenuButton.IsSelected = false;
alarmMenuButton.IsSelected = false;
systemMenuButton.IsSelected = true;
}
GetPushMessageList(showMesType);
}
///
/// 添加内容为空提示页面
///
void AddEmptyTipView()
{
emptyTipView = new FrameLayout()
{
Height = bodyScrolView.Height,
Width = bodyScrolView.Width,
};
bodyScrolView.AddChidren(emptyTipView);
var tipView = new EmptyTipView()
{
Gravity = Gravity.Center
};
emptyTipView.AddChidren(tipView);
}
///
/// 年份标记
///
string YearMark = "";
///
/// 加载报警信息RowView
///
///
///
void AddRowView(VerticalScrolViewLayout VerticalScrolViewMiddle, PushMessageInfo pushMessageInfo)
{
var rowView = new RowLayout()
{
Height = Application.GetRealHeight(65),
LineColor = CSS_Color.MainBackgroundColor,
};
VerticalScrolViewMiddle.AddChidren(rowView);
//标题
var btnTilte = new Button()
{
X = Application.GetRealWidth(16),
Y = Application.GetRealHeight(12),
Width = Application.GetRealWidth(320),
Height = Application.GetRealHeight(20),
TextAlignment = TextAlignment.CenterLeft,
TextColor = CSS_Color.FirstLevelTitleColor,
TextSize = CSS_FontSize.TextFontSize,
Text = pushMessageInfo.messageTitle
};
rowView.AddChidren(btnTilte);
//副标题
var btnSubtitle = new Button()
{
X = Application.GetRealWidth(16),
Y = btnTilte.Bottom + Application.GetRealHeight(4),
Width = Application.GetRealWidth(240),
Height = Application.GetRealHeight(17),
TextAlignment = TextAlignment.CenterLeft,
TextColor = CSS_Color.PromptingColor1,
TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
Text = pushMessageInfo.messageContent
};
rowView.AddChidren(btnSubtitle);
//日期
var btnDatetime = new Button()
{
X = Application.GetRealWidth(259),
Y = btnTilte.Bottom + Application.GetRealHeight(4),
Width = Application.GetRealWidth(100),
Height = Application.GetRealHeight(17),
TextAlignment = TextAlignment.CenterRight,
TextColor = CSS_Color.PromptingColor1,
TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
};
rowView.AddChidren(btnDatetime);
var lineView = new LineView(rowView.Height - Application.GetRealHeight(1));
rowView.AddChidren(lineView);
//删除按钮
var deleteBtn = new Button()
{
TextID = StringId.Del,
BackgroundColor = CSS_Color.AuxiliaryColor2,
TextColor = CSS_Color.MainBackgroundColor,
TextSize = CSS_FontSize.TextFontSize,
};
rowView.AddRightView(deleteBtn);
deleteBtn.MouseUpEventHandler = (sender, e) =>
{
DeleteThePush(pushMessageInfo, rowView);
};
btnDatetime.Text = GetUnixToDateTime(pushMessageInfo.createTime);
EventHandler eventHandler = (sender, e) =>
{
new Alert(pushMessageInfo.messageTitle, pushMessageInfo.messageContent, Language.StringByID(StringId.Close)).Show();
};
btnTilte.MouseUpEventHandler = eventHandler;
btnSubtitle.MouseUpEventHandler = eventHandler;
}
///
/// 时间格式转换处理
///
/// 毫秒时间戳
///
string GetUnixToDateTime(long time)
{
try
{
return Utlis.UnixToDateTimeWithFormatMS(time, "MM/dd HH:mm");
}
catch (Exception ex)
{
return "";
}
}
///
/// 删除推送消息
///
///
void DeleteThePush(PushMessageInfo pushMessageInfo, RowLayout rowView)
{
var waitPage = new Loading();
bodyView.AddChidren(waitPage);
waitPage.Start(Language.StringByID(StringId.PleaseWait));
new Thread(() =>
{
try
{
var result = new HttpServerRequest().PushSerivceDeleteMessage(pushMessageInfo.id);
if (result)
{
PushMessageInfoList.Remove(pushMessageInfo);
//删除成功
Application.RunOnMainThread(() =>
{
rowView.RemoveFromParent();
});
}
}
catch (Exception ex)
{
}
finally
{
Application.RunOnMainThread(() =>
{
if (waitPage != null)
{
waitPage.RemoveFromParent();
waitPage = null;
}
});
}
})
{ IsBackground = true }.Start();
}
///
/// 加载年份标题
///
///
///
void AddYearRowView(VerticalScrolViewLayout VerticalScrolViewMiddle, string yearStr)
{
var bgView = new FrameLayout()
{
Height = Application.GetRealHeight(57),
};
VerticalScrolViewMiddle.AddChidren(bgView);
var yearBtn = new Button()
{
X = Application.GetRealWidth(16),
Y = Application.GetRealHeight(16),
Width = Application.GetRealWidth(320),
Height = Application.GetRealHeight(33),
TextAlignment = TextAlignment.CenterLeft,
TextColor = CSS_Color.FirstLevelTitleColor,
TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel,
IsBold = true,
Text = yearStr
};
bgView.AddChidren(yearBtn);
}
///
/// 查询推送记录
///
///
void GetPushMessageList(int queryType = 0)
{
bodyScrolView.RemoveAll();
PushMessageInfoList.Clear();
YearMark = "";//标记清空
if (string.IsNullOrEmpty(UserInfo.Current.PushId)) {
AddEmptyTipView();
return;
}
var waitPage = new Loading();
bodyView.AddChidren(waitPage);
waitPage.Start(Language.StringByID(StringId.PleaseWait));
new Thread(() =>
{
try
{
var result = new HttpServerRequest().PushSerivceGetPushmessagelist(queryType);
if (result.Code == StateCode.SUCCESS)
{
PushMessageInfoList = Newtonsoft.Json.JsonConvert.DeserializeObject>(result.Data.ToString());
Application.RunOnMainThread(() =>
{
if (PushMessageInfoList != null && PushMessageInfoList.Count > 0)
{
ParseAndDisplayPushList();
PushSerivceMarkAllMessageRead();
}
else
{
AddEmptyTipView();
}
});
}
else
{
Application.RunOnMainThread(() =>
{
AddEmptyTipView();
});
IMessageCommon.Current.ShowErrorInfoAlter(result.Code);
}
}
catch (Exception ex)
{
}
finally
{
Application.RunOnMainThread(() =>
{
if (waitPage != null)
{
waitPage.RemoveFromParent();
waitPage = null;
}
});
}
})
{ IsBackground = true }.Start();
}
///
/// 解析和显示推送消息
///
void ParseAndDisplayPushList()
{
foreach (var info in PushMessageInfoList)
{
//年份解析 判断是否需要添加年份标题
var mesYear = Utlis.UnixToDateTimeYearMS(info.createTime);
if (string.IsNullOrEmpty(YearMark))
{
//刚开始YearMark标记为空,添加第一个年份标题
YearMark = mesYear;
AddYearRowView(bodyScrolView, YearMark);
}
else if (YearMark != mesYear)
{
//当前信息年份和之前的不一样,重新添加一个年份标题
YearMark = mesYear;
AddYearRowView(bodyScrolView, YearMark);
}
AddRowView(bodyScrolView, info);
}
}
#region 测试
#if DEBUG
///
///
///
void TestLoad()
{
PushMessageInfoList.Add(new PushMessageInfo()
{
messageTitle = "报警信息",
messageContent = "门锁被打开",
createTime = 1606900275,
});
PushMessageInfoList.Add(new PushMessageInfo()
{
messageTitle = "报警信息1",
messageContent = "门锁被打开",
createTime = 1606895454,
});
PushMessageInfoList.Add(new PushMessageInfo()
{
messageTitle = "报警信息2",
messageContent = "门锁被打开",
createTime = 1606895454,
});
PushMessageInfoList.Add(new PushMessageInfo()
{
messageTitle = "报警信息2019",
messageContent = "门锁被打开",
createTime = 1575277874,
});
PushMessageInfoList.Add(new PushMessageInfo()
{
messageTitle = "报警信息2019",
messageContent = "门锁被打开",
createTime = 1572685874,
});
PushMessageInfoList.Add(new PushMessageInfo()
{
messageTitle = "报警信息2018",
messageContent = "门锁被打开",
createTime = 1541149874,
});
PushMessageInfoList.Add(new PushMessageInfo()
{
messageTitle = "报警信息2017",
messageContent = "门锁被打开",
createTime = 1509613874,
});
PushMessageInfoList.Add(new PushMessageInfo()
{
messageTitle = "报警信息2017",
messageContent = "门锁被打开",
createTime = 1509613874,
});
PushMessageInfoList.Add(new PushMessageInfo()
{
messageTitle = "报警信息2017",
messageContent = "门锁被打开",
createTime = 1506935474,
});
ParseAndDisplayPushList();
}
#endif
#endregion
///
/// 标记所有推送消息已读
///
void PushSerivceMarkAllMessageRead() {
new Thread(() =>
{
var result = new HttpServerRequest().PushSerivceMarkAllMessageRead();
if (result)
{
Utlis.WriteLine("标记成功");
}
else
{
Utlis.WriteLine("标记失败");
}
})
{ IsBackground = true }.Start();
}
}
///
/// 推送消息类型详情
///
[System.Serializable]
public class PushMessageInfo
{
///
/// 记录id
///
public string id;
///
/// 推送Token记录Id
///
public string pushId;
///
/// 云端定义 推送类型;0:默认;1:报警;2:提示;3:新闻;4:推荐;
///
/// Default:分享与功能;Alarm:报警类;Prompt:系统消息
///
public string pushType;
///
/// 消息主题
///
public string messageTitle;
///
/// 消息内容
///
public string messageContent;
/////
///// 扩展数据
/////
//public string messageExpand;
/////
///// 消息类型;0:提示;1:报警;2:丰林可是对讲呼叫;3:强制下线推送
/////
//public string messageType;
///
/// 是否已读
///
public bool isRead;
///
/// 推送时间
///
public long createTime;
}
}