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
///
HorizontalScrolViewLayout menuView;//2021-08-27 增加多了一个菜单按钮所以改为滚动控件
MenuButton allMenuButton;
MenuButton shareMenuButton;
MenuButton alarmMenuButton;
MenuButton systemMenuButton;
MenuButton propertyMenuButton;//增加物业通知按钮
FrameLayout messageView;
///
/// 显示的消息类型
/// 0全部 1分享与功能 2报警类 3系统信息 4物业公告
///
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 HorizontalScrolViewLayout()
{
Y = Application.GetRealHeight(64),
Height = Application.GetRealWidth(117),
BackgroundColor = CSS_Color.MainBackgroundColor,
HorizontalScrollBarEnabled = false//隐藏滚动条
};
bodyView.AddChidren(menuView);
//左padding View
menuView.AddChidren(new Button()
{
Width = Application.GetRealWidth(15),
BackgroundColor = CSS_Color.viewTranslucence
});
#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
#region 物业通知 2021-09-15增加
propertyMenuButton = new MenuButton()
{
X = systemMenuButton.Right,
Y = Application.GetRealWidth(16),
};
menuView.AddChidren(propertyMenuButton);
propertyMenuButton.ImageButton.SelectedImagePath = "Collection/MesCenter/PropertyOn.png";
propertyMenuButton.ImageButton.UnSelectedImagePath = "Collection/MesCenter/Property.png";
propertyMenuButton.TextButton.TextID = StringId.Propertynotice;
propertyMenuButton.TextButton.IsMoreLines = true;
Action propertyAction = () =>
{
MenuButtonSelect(4);
};
propertyMenuButton.SelectAction = propertyAction;
#endregion
//右paddingView
menuView.AddChidren(new Button()
{
Width = Application.GetRealWidth(15),
BackgroundColor = CSS_Color.viewTranslucence
});
}
///
/// 中间信息内容
///
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系统信息 4物业通知
void MenuButtonSelect(int selectId)
{
showMesType = selectId;
if (selectId == 0)
{
allMenuButton.IsSelected = true;
shareMenuButton.IsSelected = true;
alarmMenuButton.IsSelected = true;
systemMenuButton.IsSelected = true;
propertyMenuButton.IsSelected = true;
}
else if (selectId == 1)
{
allMenuButton.IsSelected = false;
shareMenuButton.IsSelected = true;
alarmMenuButton.IsSelected = false;
systemMenuButton.IsSelected = false;
propertyMenuButton.IsSelected = false;
}
else if (selectId == 2)
{
allMenuButton.IsSelected = false;
shareMenuButton.IsSelected = false;
alarmMenuButton.IsSelected = true;
systemMenuButton.IsSelected = false;
propertyMenuButton.IsSelected = false;
}
else if (selectId == 3)
{
allMenuButton.IsSelected = false;
shareMenuButton.IsSelected = false;
alarmMenuButton.IsSelected = false;
systemMenuButton.IsSelected = true;
propertyMenuButton.IsSelected = false;
}
else if (selectId == 4)
{
allMenuButton.IsSelected = false;
shareMenuButton.IsSelected = false;
alarmMenuButton.IsSelected = false;
systemMenuButton.IsSelected = false;
propertyMenuButton.IsSelected = true;
}
menuView.ScrollToX(selectId * Application.GetRealWidth(40));
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);
EventHandler eventHandler = (sender, e) =>
{
OnClickPushMessageInfo(pushMessageInfo);
//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 delPush = new PushMsgIdObj()
{
msgId = pushMessageInfo.id,
pushType = pushMessageInfo.pushType
};
var result = new HttpServerRequest().PushSerivceDeleteMessage(delPush);
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());
//2021-08-28 改为分页接口
var mPushMesList = Newtonsoft.Json.JsonConvert.DeserializeObject(result.Data.ToString());
if (mPushMesList != null)
{
PushMessageInfoList = mPushMesList.list;
}
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);
}
}
///
/// 获取物业通知详情
///
///
void GetPropertyNoticeDetails(string noticeId)
{
var waitPage = new Loading();
bodyView.AddChidren(waitPage);
waitPage.Start(Language.StringByID(StringId.PleaseWait));
new Thread(() =>
{
try
{
var result = new HttpServerRequest().GetPropertyNoticeDetails(noticeId);
if (result.Code == StateCode.SUCCESS)
{
var mPushNoticeInfo = Newtonsoft.Json.JsonConvert.DeserializeObject(result.Data.ToString());
if (mPushNoticeInfo != null)
{
Application.RunOnMainThread(() =>
{
new WebViewDialog().LoadPageWithHtmlStr(mPushNoticeInfo.title, mPushNoticeInfo.content);
});
}
}
}
catch (Exception ex)
{
}
finally
{
Application.RunOnMainThread(() =>
{
if (waitPage != null)
{
waitPage.RemoveFromParent();
waitPage = null;
}
});
}
})
{ IsBackground = true }.Start();
}
///
/// 通知信息点击事件
///
///
void OnClickPushMessageInfo(PushMessageInfo pushMessageInfo)
{
if (pushMessageInfo.pushType == PushType.Notice.ToString())
{
//Utlis.WriteLine("物业通知");
string noticeId = GetNoticeId(pushMessageInfo.messageExpand);
if (!string.IsNullOrEmpty(noticeId))
{
GetPropertyNoticeDetails(noticeId);
}
else
{
Utlis.WriteLine("noticeId null");
}
}
else
{
Utlis.WriteLine("其它通知类型");
}
}
///
/// 解析messageExpand 提取targetId
///
///
///
string GetNoticeId(string messageExpand)
{
try
{
if (!string.IsNullOrEmpty(messageExpand))
{
var mMessageExpandInfo = Newtonsoft.Json.JsonConvert.DeserializeObject(messageExpand);
if (mMessageExpandInfo != null)
{
var mExpantContentInfo = Newtonsoft.Json.JsonConvert.DeserializeObject(mMessageExpandInfo.expantContent);
if(mExpantContentInfo != null)
{
return mExpantContentInfo.targetId;
}
}
}
return null;
}
catch
{
return null;
}
}
#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;
}
///
// 推送消息分页对象
///
public class PushMessageInfoList : BasePagingObj
{
public List list = new List();
}
///
/// 物业公告详情
///
[System.Serializable]
public class PushNoticeInfo
{
///
/// 消息ID
///
public string noticeId;
///
/// 消息标题
///
public string title;
///
/// 富文本内容
///
public string content;
}
///
/// 推送扩展信息
///
[System.Serializable]
public class MessageExpandInfo
{
///
/// expantContent
///
public string expantContent;
}
///
/// 推送扩展信息
///
[System.Serializable]
public class ExpantContentInfo
{
///
/// targetId
///
public string targetId;
///
/// messageType
///
public string messageType;
}
}