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; } }