using System;
using Shared;
using HDL_ON.UI.CSS;
using System.Collections.Generic;
using System.Threading;
using HDL_ON.DAL.Server;
#if DEBUG
using Xamarin.Essentials;
#endif
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();
///
/// 页面关闭时间
///
Action backAction;
public override void RemoveFromParent()
{
UnregisterGetPushMessageAction();
base.RemoveFromParent();
backAction?.Invoke();
}
///
///
///
public MessageCenterPage()
{
bodyView = this;
BackgroundColor = CSS_Color.BackgroundColor;
}
///
///
///
///
public void LoadPage(Action backAction)
{
this.backAction = backAction;
new TopViewDiv(bodyView, Language.StringByID(StringId.MessageCenter)).LoadTopView();
AddTopMenuView();
AddMessageView();
MenuButtonSelect(showMesType);
RegisterGetPushMessageAction();
//测试代码
//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;
//测试提前当前推送ID
allMenuButton.ImageButton.MouseLongEventHandler = (sender, e) =>
{
#if DEBUG
CopyToClipboard("推送ID:" + OnAppConfig.Instance.PushId);
#else
//检测是否获取推送ID成功,提示推送注册是否正常
if (string.IsNullOrEmpty(OnAppConfig.Instance.PushId))
{
Utlis.ShowTip(Language.StringByID(StringId.PushException));
}
else
{
Utlis.ShowTip(Language.StringByID(StringId.PushNormal));
}
#endif
};
#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;
shareMenuButton.TextButton.IsMoreLines = true;
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 = true;
alarmMenuButton.IsSelected = true;
systemMenuButton.IsSelected = true;
}
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 TextButton()
{
X = Application.GetRealWidth(16),
Y = Application.GetRealHeight(12),
Width = Application.GetRealWidth(343),
Height = Application.GetRealWidth(20),
TextAlignment = TextAlignment.CenterLeft,
TextColor = CSS_Color.FirstLevelTitleColor,
TextSize = CSS_FontSize.TextFontSize,
Text = pushMessageInfo.messageContent,
//IsMoreLines = true,
};
rowView.AddChidren(btnTilte);
//
var needHeight = btnTilte.GetMoreLineNeedHeight();
btnTilte.IsMoreLines = true;
btnTilte.Height = needHeight;
rowView.Height = Application.GetRealHeight(45) + needHeight;
//副标题
var btnSubtitle = new TextButton()
{
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.messageTitle
};
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);
//2020-12-23 去掉点击弹窗事件
//EventHandler eventHandler = (sender, e) =>
//{
// new Alert(pushMessageInfo.messageTitle, pushMessageInfo.messageContent, Language.StringByID(StringId.Close)).Show();
//};
//rowView.MouseUpEventHandler = eventHandler;
//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 TextButton()
{
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,
};
bgView.AddChidren(yearBtn);
yearBtn.Text = yearStr + Language.StringByID(StringId.Years);
}
///
/// 查询推送记录
///
///
void GetPushMessageList(int queryType = 0)
{
bodyScrolView.RemoveAll();
if(PushMessageInfoList == null)
{
PushMessageInfoList = new List();
}
else
{
PushMessageInfoList.Clear();
}
YearMark = "";//标记清空
if (string.IsNullOrEmpty(OnAppConfig.Instance.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();
}
///
/// 注册收到推送监听
///
void RegisterGetPushMessageAction()
{
HDLCommon.GetPushMessageAction = () =>
{
if (bodyView != null)
{
//Utlis.WriteLine("GetPushMessageAction M收到推送");
GetPushMessageList(showMesType);
}
};
}
///
/// 取消收到推送监听
///
void UnregisterGetPushMessageAction()
{
HDLCommon.GetPushMessageAction = null;
}
#if DEBUG
///
/// 复制到剪切板
///
///
void CopyToClipboard(string text)
{
Clipboard.SetTextAsync(text);
Utlis.ShowTip(text + "\n" + Language.StringByID(StringId.CopySuccess));
}
#endif
}
///
/// 推送消息类型详情
///
[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;
}
}