using System;
|
using System.Text;
|
using System.Text.RegularExpressions;
|
using Shared.Common;
|
|
namespace Shared.Phone.UserCenter.DoorLock
|
{
|
/// <summary>
|
/// 显示一个信息框
|
/// </summary>
|
public class ShowDoorLockMsgControl
|
{
|
#region ■ 变量声明___________________________
|
/// <summary>
|
/// 点击失效回调的事件
|
/// </summary>
|
public Action<string> InvalidTimeAction = null;
|
/// <summary>
|
/// 点击取消的回调事件
|
/// </summary>
|
public Action CancelClickEvent = null;
|
/// <summary>
|
/// 点击自动化的回调事件
|
/// </summary>
|
public Action LogicClickEvent = null;
|
/// <summary>
|
/// 点击确认的回调事件
|
/// </summary>
|
public Action InvalidClickEvent = null;
|
/// <summary>
|
/// 点击确认的回调事件
|
/// </summary>
|
public Action ConfirmClickEvent = null;
|
/// <summary>
|
/// 点击弹窗背景回调事件
|
/// </summary>
|
public Action MsgControlClickEvent = null;
|
/// <summary>
|
/// 信息类型
|
/// </summary>
|
private DoorLockMsgType msgType = DoorLockMsgType.Confirm;
|
/// <summary>
|
/// 弹窗背景
|
/// </summary>
|
public FrameLayout MsgControlFrameLayout = null;
|
/// <summary>
|
/// 消息
|
/// </summary>
|
private string msgText = string.Empty;
|
/// <summary>
|
/// 确认按钮的文本
|
/// </summary>
|
private string buttonOkText = null;
|
/// <summary>
|
/// 失效时间编辑
|
/// </summary>
|
private EditText editInvalidTime = null;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 显示一个需要确认的信息框
|
/// </summary>
|
/// <param name="i_msgType">信息类型</param>
|
/// <param name="i_msg">信息</param>
|
/// <param name="buttonText">确认按钮的文本</param>
|
public ShowDoorLockMsgControl(DoorLockMsgType i_msgType, string i_msg, string buttonText = null)
|
{
|
//确认按钮文本
|
this.buttonOkText = buttonText == null ? Language.StringByID(R.MyInternationalizationString.OkMsg) : buttonText;
|
this.msgType = i_msgType;
|
this.msgText = i_msg;
|
}
|
|
#endregion
|
|
#region ■ 显示消息___________________________
|
|
/// <summary>
|
/// 显示
|
/// </summary>
|
public void Show()
|
{
|
try
|
{
|
//初始化控件
|
this.InitMsgControl();
|
}
|
catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
|
}
|
|
#endregion
|
|
#region ■ 初始化控件_________________________
|
|
/// <summary>
|
/// 初始化控件
|
/// </summary>
|
private void InitMsgControl()
|
{
|
//添加界面
|
var nowForm = UserView.HomePage.Instance.GetChildren(UserView.HomePage.Instance.ChildrenCount - 1);
|
if (nowForm == null || (nowForm is ViewGroup) == false)
|
{
|
return;
|
}
|
//主控件
|
MsgControlFrameLayout = new FrameLayout();
|
MsgControlFrameLayout.BackgroundColor = UserCenterColor.Current.DialogBackColor;
|
((ViewGroup)nowForm).AddChidren(MsgControlFrameLayout);
|
MsgControlFrameLayout.MouseDownEventHandler += (sender, e) =>
|
{
|
if (msgType == DoorLockMsgType.InValid)
|
{
|
return;
|
}
|
|
//移除界面
|
MsgControlFrameLayout.RemoveFromParent();
|
//回调函数
|
this.MsgControlClickEvent?.Invoke();
|
this.MsgControlClickEvent = null;
|
};
|
|
//白色背景框
|
var frameBack = new FrameLayout();
|
frameBack.BackgroundColor = UserCenterColor.Current.White;
|
frameBack.Gravity = Gravity.CenterHorizontal;
|
frameBack.Radius = (uint)Application.GetRealHeight(17);
|
if (msgType == DoorLockMsgType.CancelNomallyOpenModeWithLogic)
|
{
|
frameBack.Height = Application.GetRealHeight(409 + 127);
|
frameBack.Width = Application.GetRealWidth(850);
|
frameBack.Y = Application.GetRealHeight(648);
|
}
|
else
|
{
|
frameBack.Height = Application.GetRealHeight(478);
|
frameBack.Width = Application.GetRealWidth(792);
|
frameBack.Y = Application.GetRealHeight(706);
|
}
|
MsgControlFrameLayout.AddChidren(frameBack);
|
|
//标题
|
var btnTitle = new NormalViewControl(frameBack.Width, Application.GetRealHeight(65), false);
|
btnTitle.Y = Application.GetRealHeight(68);
|
btnTitle.TextColor = 0xff333443;
|
btnTitle.TextAlignment = TextAlignment.Center;
|
btnTitle.TextSize = 16;
|
frameBack.AddChidren(btnTitle);
|
if (msgType == DoorLockMsgType.Confirm || msgType == DoorLockMsgType.DoorLockLogic || msgType == DoorLockMsgType.NomallyOpenMode || msgType == DoorLockMsgType.CancelNomallyOpenModeWithLogic)
|
{
|
btnTitle.TextID = R.MyInternationalizationString.NormalTip;
|
}
|
else if (msgType == DoorLockMsgType.InValid)
|
{
|
btnTitle.TextID = R.MyInternationalizationString.DoorLockInValidSetting;
|
}
|
else if (msgType == DoorLockMsgType.NomallyOpenMode)
|
{
|
btnTitle.TextID = R.MyInternationalizationString.CancelNomallyMode;
|
}
|
|
if (msgType == DoorLockMsgType.InValid)
|
{
|
InitInValidTimeDialog(frameBack);
|
}
|
else if (msgType == DoorLockMsgType.CancelNomallyOpenModeWithLogic)
|
{
|
CancelNormallyOpenModeWithLogicDialog(frameBack);
|
}
|
else
|
{
|
//消息
|
var btnMsg = new NormalViewControl(frameBack.Width - Application.GetRealWidth(55 * 2), Application.GetRealHeight(180), false);
|
btnMsg.Y = Application.GetRealHeight(141);
|
btnMsg.IsMoreLines = true;
|
btnMsg.TextAlignment = TextAlignment.Center;
|
btnMsg.TextColor = UserCenterColor.Current.TextGrayColor1;
|
btnMsg.Gravity = Gravity.CenterHorizontal;
|
frameBack.AddChidren(btnMsg);
|
btnMsg.Text = msgText;
|
}
|
|
if (msgType == DoorLockMsgType.Confirm || msgType == DoorLockMsgType.NomallyOpenMode || msgType == DoorLockMsgType.CancelNomallyOpenModeWithLogic)
|
{
|
//初始化确认类型的底部按钮
|
this.InitBottomConfirmButton(MsgControlFrameLayout, frameBack);
|
}
|
else if (msgType == DoorLockMsgType.InValid)
|
{
|
//失效设置的底部按钮
|
this.InitBottomInvalidTimeButton(MsgControlFrameLayout, frameBack);
|
}
|
else if (msgType == DoorLockMsgType.DoorLockLogic)
|
{
|
//失效设置的底部按钮
|
this.InitBottomLogicButton(MsgControlFrameLayout, frameBack);
|
}
|
}
|
|
/// <summary>
|
/// 取消常开模式带有自动化的弹窗显示
|
/// </summary>
|
/// <param name="frameMain"></param>
|
/// <param name="frameBack"></param>
|
private void CancelNormallyOpenModeWithLogicDialog(FrameLayout frameBack)
|
{
|
//消息
|
var btnMsg = new NormalViewControl(frameBack.Width - Application.GetRealWidth(55 * 2), Application.GetRealHeight(63), false);
|
btnMsg.Y = Application.GetRealHeight(173);
|
btnMsg.IsMoreLines = true;
|
btnMsg.TextAlignment = TextAlignment.Center;
|
btnMsg.TextColor = UserCenterColor.Current.TextGrayColor1;
|
btnMsg.Gravity = Gravity.CenterHorizontal;
|
frameBack.AddChidren(btnMsg);
|
btnMsg.Text = msgText;
|
|
var alarmMsg = Language.StringByID(R.MyInternationalizationString.XingTip);//.Replace("{0}", "\r\n");
|
var btnAlarmMsg = new NormalViewControl(frameBack.Width - Application.GetRealWidth(55 * 2), Application.GetRealHeight(104), false);
|
btnAlarmMsg.Y = Application.GetRealHeight(259);
|
btnAlarmMsg.IsMoreLines = true;
|
btnAlarmMsg.TextAlignment = TextAlignment.Center;
|
btnAlarmMsg.TextColor = ZigbeeColor.Current.XMAlarmText;
|
btnAlarmMsg.Gravity = Gravity.CenterHorizontal;
|
frameBack.AddChidren(btnAlarmMsg);
|
btnAlarmMsg.Text = alarmMsg;
|
}
|
|
/// <summary>
|
/// 失效时间设置的弹窗显示
|
/// </summary>
|
/// <param name="frameMain"></param>
|
/// <param name="frameBack"></param>
|
private void InitInValidTimeDialog(FrameLayout frameBack)
|
{
|
//消息
|
string[] msgArray = msgText.Split(new string[] { "{0}" }, StringSplitOptions.RemoveEmptyEntries);
|
var btnMsg1 = new Button()
|
{
|
Width = Application.GetRealWidth(389),
|
Height = Application.GetRealHeight(180),
|
Y = Application.GetRealHeight(141),
|
IsMoreLines = false,
|
TextColor = UserCenterColor.Current.TextGrayColor1,
|
TextAlignment = TextAlignment.CenterRight,
|
Text = msgArray[0],
|
};
|
frameBack.AddChidren(btnMsg1);
|
|
//失效时间设置
|
var editTextFrameLayout = new FrameLayout()
|
{
|
Width = Application.GetRealWidth(132),
|
Height = Application.GetRealHeight(81 + 40 * 2),
|
Y = Application.GetRealHeight(184 - 40),
|
X = btnMsg1.Right,
|
};
|
frameBack.AddChidren(editTextFrameLayout);
|
editInvalidTime = new EditText()
|
{
|
Height = Application.GetRealHeight(81),
|
X = Application.GetRealWidth(132),
|
Y = Application.GetRealHeight(40),
|
Gravity = Gravity.Center,
|
Radius = (uint)Application.GetMinRealAverage(17),
|
BackgroundColor = ZigbeeColor.Current.XMPEditTextBackground,
|
TextColor = ZigbeeColor.Current.XMBlack,
|
TextAlignment = TextAlignment.Center,
|
TextSize = 14,
|
Text = DoorLockCommonInfo.NormallyOpenModeInvalidTime.ToString(),
|
PlaceholderTextColor = ZigbeeColor.Current.XMGray3,
|
IsNumberKeyboardType = true,
|
};
|
editTextFrameLayout.AddChidren(editInvalidTime);
|
editInvalidTime.TextChangeEventHandler += (sender, e) =>
|
{
|
if (!string.IsNullOrEmpty((sender as EditText).Text))
|
{
|
var textFir = (sender as EditText).Text.Substring(0, 1);
|
if ((sender as EditText).Text.Length > 1)
|
{
|
if (textFir == "0")
|
{
|
editInvalidTime.Text = (sender as EditText).Text.Substring(1, 1);
|
}
|
}
|
if (int.Parse((sender as EditText).Text) > 72)
|
{
|
string msg0 = Language.StringByID(R.MyInternationalizationString.InvalidTimeMoreThan72);
|
var alert = new ShowMsgControl(ShowMsgType.Normal, msg0, Language.StringByID(R.MyInternationalizationString.confrim));
|
alert.Show();
|
editInvalidTime.Text = "72";
|
}
|
}
|
};
|
|
var btnMsg2 = new Button()
|
{
|
Width = Application.GetRealWidth(271),
|
Height = Application.GetRealHeight(180),
|
Y = Application.GetRealHeight(141),
|
X = editTextFrameLayout.Right,
|
IsMoreLines = false,
|
TextColor = UserCenterColor.Current.TextGrayColor1,
|
TextAlignment = TextAlignment.CenterLeft,
|
Text = msgArray[1]
|
};
|
frameBack.AddChidren(btnMsg2);
|
}
|
|
/// <summary>
|
/// 失效设置的底部按钮
|
/// </summary>
|
/// <param name="frameMain"></param>
|
/// <param name="frameBack"></param>
|
private void InitBottomLogicButton(FrameLayout frameMain, FrameLayout frameBack)
|
{
|
//自动化按钮
|
var btnDoorLockLogic = new BottomLeftClickButton(Application.GetRealWidth(396), Application.GetRealHeight(127));
|
frameBack.AddChidren(btnDoorLockLogic);
|
btnDoorLockLogic.InitControl(Language.StringByID(R.MyInternationalizationString.DoorLockLogic));
|
btnDoorLockLogic.ButtonClickEvent += (sender, e) =>
|
{
|
//移除界面
|
frameMain.RemoveFromParent();
|
//回调函数
|
this.LogicClickEvent?.Invoke();
|
this.LogicClickEvent = null;
|
};
|
|
//失效设置按钮
|
var btnInvalid = new BottomRightClickButton(frameBack.Width - btnDoorLockLogic.Width, btnDoorLockLogic.Height);
|
frameBack.AddChidren(btnInvalid);
|
btnInvalid.InitControl(buttonOkText);
|
btnInvalid.ButtonClickEvent += (sender, e) =>
|
{
|
//移除界面
|
frameMain.RemoveFromParent();
|
//回调函数
|
this.InvalidClickEvent?.Invoke();
|
this.InvalidClickEvent = null;
|
};
|
}
|
|
/// <summary>
|
/// 失效时间的底部按钮
|
/// </summary>
|
/// <param name="frameMain"></param>
|
/// <param name="frameBack"></param>
|
private void InitBottomInvalidTimeButton(FrameLayout frameMain, FrameLayout frameBack)
|
{
|
//确定按钮
|
var btnConfirm = new BottomRightClickButton(frameBack.Width, Application.GetRealHeight(127));
|
frameBack.AddChidren(btnConfirm);
|
btnConfirm.InitControl(buttonOkText);
|
btnConfirm.ButtonClickEvent += (sender, e) =>
|
{
|
string textValue = string.Empty;
|
if (editInvalidTime != null)
|
{
|
textValue = editInvalidTime.Text.Trim();
|
if (this.CheckInvalidTime(textValue.TrimStart('0')) == false)
|
{
|
return;
|
}
|
}
|
//移除界面
|
frameMain.RemoveFromParent();
|
if (msgType == DoorLockMsgType.InValid)
|
{
|
if (InvalidTimeAction != null)
|
{
|
InvalidTimeAction(textValue);
|
}
|
}
|
else
|
{
|
//回调函数
|
this.ConfirmClickEvent?.Invoke();
|
this.ConfirmClickEvent = null;
|
}
|
};
|
}
|
|
/// <summary>
|
/// 初始化确认类型的底部按钮
|
/// </summary>
|
/// <param name="frameMain"></param>
|
/// <param name="frameBack"></param>
|
private void InitBottomConfirmButton(FrameLayout frameMain, FrameLayout frameBack)
|
{
|
//取消按钮
|
var btnCancel = new BottomLeftClickButton(Application.GetRealWidth(396), Application.GetRealHeight(127));
|
frameBack.AddChidren(btnCancel);
|
var bottomLeftText = Language.StringByID(R.MyInternationalizationString.uCancel);
|
if (msgType == DoorLockMsgType.NomallyOpenMode || msgType == DoorLockMsgType.CancelNomallyOpenModeWithLogic)
|
{
|
bottomLeftText = Language.StringByID(R.MyInternationalizationString.KeepNomallyMode);
|
}
|
btnCancel.InitControl(bottomLeftText);
|
btnCancel.ButtonClickEvent += (sender, e) =>
|
{
|
//移除界面
|
frameMain.RemoveFromParent();
|
//回调函数
|
this.CancelClickEvent?.Invoke();
|
this.CancelClickEvent = null;
|
};
|
|
//确定按钮
|
var btnConfirm = new BottomRightClickButton(frameBack.Width - btnCancel.Width, btnCancel.Height);
|
frameBack.AddChidren(btnConfirm);
|
btnConfirm.InitControl(buttonOkText);
|
btnConfirm.ButtonClickEvent += (sender, e) =>
|
{
|
string textValue = string.Empty;
|
if (editInvalidTime != null)
|
{
|
textValue = editInvalidTime.Text.Trim();
|
if (this.CheckInvalidTime(textValue.TrimStart('0')) == false)
|
{
|
return;
|
}
|
}
|
//移除界面
|
frameMain.RemoveFromParent();
|
if (msgType == DoorLockMsgType.InValid)
|
{
|
if (InvalidTimeAction != null)
|
{
|
InvalidTimeAction(textValue);
|
}
|
}
|
else
|
{
|
//回调函数
|
this.ConfirmClickEvent?.Invoke();
|
this.ConfirmClickEvent = null;
|
}
|
};
|
}
|
|
/// <summary>
|
/// 检测失效时间
|
/// </summary>
|
/// <param name="tetxValue"></param>
|
/// <returns></returns>
|
private bool CheckInvalidTime(string tetxValue)
|
{
|
if (tetxValue == string.Empty)
|
{
|
var msg = Language.StringByID(R.MyInternationalizationString.InvalidTimeIsEmpty);
|
var msgContr = new ShowMsgControl(ShowMsgType.Error, msg);
|
msgContr.Show();
|
return false;
|
}
|
foreach (var c in tetxValue)
|
{
|
if (char.IsNumber(c) == false)
|
{
|
return false;
|
}
|
}
|
if (tetxValue.Length >= 3)
|
{
|
var msg = Language.StringByID(R.MyInternationalizationString.InvalidTimeMoreThan72);
|
var msgContr = new ShowMsgControl(ShowMsgType.Error, msg);
|
msgContr.Show();
|
return false;
|
}
|
|
int value = Convert.ToInt32(tetxValue);
|
if (value <= 0)
|
{
|
var msg = Language.StringByID(R.MyInternationalizationString.InvalidTimeLessThan1);
|
var msgContr = new ShowMsgControl(ShowMsgType.Error, msg);
|
msgContr.Show();
|
return false;
|
}
|
if (value > 72)
|
{
|
var msg = Language.StringByID(R.MyInternationalizationString.InvalidTimeMoreThan72);
|
var msgContr = new ShowMsgControl(ShowMsgType.Error, msg);
|
msgContr.Show();
|
return false;
|
}
|
return true;
|
}
|
|
#endregion
|
|
/// <summary>
|
/// 信息显示的类型
|
/// </summary>
|
public enum DoorLockMsgType
|
{
|
/// <summary>
|
/// 确认类型
|
/// </summary>
|
Confirm = 1,
|
/// <summary>
|
/// 失效设置
|
/// </summary>
|
InValid = 2,
|
/// <summary>
|
/// 逻辑类型
|
/// </summary>
|
DoorLockLogic = 3,
|
/// <summary>
|
/// 常开模式
|
/// </summary>
|
NomallyOpenMode = 4,
|
/// <summary>
|
/// 取消带有逻辑的常开模式
|
/// </summary>
|
CancelNomallyOpenModeWithLogic = 5,
|
}
|
}
|
}
|