using System;
using Newtonsoft.Json.Linq;
using Shared.Common;
using ZigBee.Device;
namespace Shared.Phone.UserCenter.DoorLock
{
public class DoorLockCommonLayout : EditorCommonForm
{
///
/// 构造函数
///
public DoorLockCommonLayout()
{
}
#region 变量申明
public new FrameLayout topFrameLayout = new FrameLayout { Height = Application.GetRealHeight(184), BackgroundColor = ZigbeeColor.Current.XMTopFrameLayout };
public FrameLayout midFrameLayout = new FrameLayout { Height = Application.GetRealHeight(1925 - 184), BackgroundColor = ZigbeeColor.Current.XMMidFrameLayout };
#region 底部有圆角布局
/// 背景阴影界面
///
public FrameLayout shadowRadiusFrameLayout = new FrameLayout { BackgroundColor = 0x0f000000 };
///
/// 设置圆角的界面
///
public FrameLayout bottomRadiusFrameLayout = new FrameLayout()
{
Height = Application.GetRealHeight(806),
Y = Application.GetRealHeight(930),
BackgroundColor = ZigbeeColor.Current.XMWhite,
};
///
/// 底部圆角中的取消按钮
///
public Button btnCancel = new Button
{
X = Application.GetRealWidth(81),
Y = Application.GetRealHeight(40),
Height = Application.GetRealHeight(58),
Width = Application.GetRealWidth(101),
Text = Language.StringByID(R.MyInternationalizationString.Cancel),
TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
TextSize = 14,
};
///
/// 底部圆角中的标题栏
///
public Button btnBottomTitle = new Button
{
X = Application.GetRealWidth(446 - 50),
Y = Application.GetRealHeight(35),
Height = Application.GetRealHeight(63),
Width = Application.GetRealWidth(284),
Text = Language.StringByID(R.MyInternationalizationString.MatchPerson),
TextColor = Shared.Common.ZigbeeColor.Current.XMBlack,
TextSize = 16,
};
///
/// 底部圆角中的确认按钮
///
public Button btnFinish = new Button
{
X = Application.GetRealWidth(919),
Y = Application.GetRealHeight(40),
Height = Application.GetRealHeight(58),
Width = Application.GetRealWidth(101),
Text = Language.StringByID(R.MyInternationalizationString.Complete),
TextColor = Shared.Common.ZigbeeColor.Current.XMOrange,
TextSize = 14,
};
///
/// 底部圆角中的标题栏下的线条
///
public Button line = new Button()
{
Y = Application.GetRealHeight(138),
Height = 1,
BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine,
};
#endregion
///
/// 标题栏布局
///
public FrameLayout titleFrameLayout = new FrameLayout
{
Y = Application.GetRealHeight(92),
X = Application.GetRealWidth(58 * 2),
Width = Application.GetRealWidth(1080 - 116),
Height = Application.GetRealHeight(69),
};
///
/// 标题返回布局
///
public FrameLayout btnBackFrameLayout = new FrameLayout
{
Width = Application.GetRealWidth(58 * 2),
};
///
/// 标题返回按键
///
public Button btnBack = new Button
{
Height = Application.GetRealHeight(51),
Width = Application.GetRealWidth(30),
X = Application.GetRealWidth(58),
Y = Application.GetRealHeight(98),
UnSelectedImagePath = "DoorLock/Left.png",
};
///
/// 标题下线
///
public Button btnTitleLine = new Button
{
Y = Application.GetRealHeight(181),
Height = 1,
BackgroundColor = Shared.Common.ZigbeeColor.Current.XMTitleLine,
};
///
/// 弹窗取消按键
///
public Button dialogBtnCancel = new Button
{
Width = Application.GetRealWidth(397),
Height = Application.GetRealHeight(127),
Y = Application.GetRealHeight(380),
TextID = R.MyInternationalizationString.Cancel,
TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
BackgroundColor = Shared.Common.ZigbeeColor.Current.XMMidFrameLayout,
};
#endregion
///
/// 门锁顶部布局
///
///
public void TopFrameLayout(FrameLayout frameLayout, string titleText)
{
this.AddChidren(topFrameLayout);
topFrameLayout.AddChidren(btnBackFrameLayout);
topFrameLayout.AddChidren(titleFrameLayout);
topFrameLayout.AddChidren(btnTitleLine);
var title = new Button()
{
TextAlignment = TextAlignment.CenterLeft,
Text = titleText,
TextColor = Shared.Common.ZigbeeColor.Current.XMTopTitleText,
Width = Application.GetRealWidth(1080 - 161),
Height = Application.GetRealWidth(69),
TextSize = 17,
IsBold = true,
X = Application.GetRealWidth(161 - 116),
};
titleFrameLayout.AddChidren(title);
btnBackFrameLayout.AddChidren(btnBack);
}
///
/// 门锁中部布局
///
///
public void MidFrameLayout(FrameLayout frameLayout)
{
midFrameLayout.Y = topFrameLayout.Bottom;
this.AddChidren(midFrameLayout);
}
///
/// 门锁底部布局
///
///
public void BottomFrameLayout(FrameLayout frameLayout)
{
var bottomFrameLayout1 = new FrameLayout()
{
Height = Application.GetRealHeight(806 - 50),
Y = Application.GetRealHeight(930 + 48),
BackgroundColor = ZigbeeColor.Current.XMWhite,
};
this.midFrameLayout.AddChidren(bottomFrameLayout1);
}
///
/// 门锁底部带圆角布局
///
///
public void BottomRadiusFrameLayout(FrameLayout frameLayout)
{
this.shadowRadiusFrameLayout.AddChidren(this.bottomRadiusFrameLayout);
this.bottomRadiusFrameLayout.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight);
this.bottomRadiusFrameLayout.AddChidren(btnCancel);
this.bottomRadiusFrameLayout.AddChidren(btnBottomTitle);
this.bottomRadiusFrameLayout.AddChidren(btnFinish);
this.bottomRadiusFrameLayout.AddChidren(line);
}
///
/// 远程控制权限处理
///
///
public void RemotePasswordDialog(ZigBee.Device.DoorLock doorLock, Button btnNext = null)
{
var dialog = new Dialog { };
var doorDialog = new Shared.Phone.UserCenter.DoorLock.DoorlockDialog(dialog, Language.StringByID(R.MyInternationalizationString.BindDoorLock));
doorDialog.Show();
doorDialog.dialogMidFraFrameLayout.Width = Application.GetRealWidth(677);
doorDialog.dialogMidFraFrameLayout.Height = Application.GetRealHeight(69);
doorDialog.dialogMidFraFrameLayout.X = Application.GetRealWidth(58);
doorDialog.dialogMidFraFrameLayout.Y = Application.GetRealHeight(213);
doorDialog.dialogMidFraFrameLayout.BackgroundColor = BackgroundColor = Shared.Common.ZigbeeColor.Current.XMBorder;
var editInputPasswordFrameLayout = new FrameLayout()
{
Width = Application.GetRealWidth(677) - 2,
Height = Application.GetRealHeight(69) - 2,
X = 1,
Y = 1,
BackgroundColor = Shared.Common.ZigbeeColor.Current.XMWhite,
};
doorDialog.dialogMidFraFrameLayout.AddChidren(editInputPasswordFrameLayout);
var editInputPassword = new EditText()
{
X = Application.GetRealHeight(25),
TextSize = 13,
PlaceholderTextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
PlaceholderText = Language.StringByID(R.MyInternationalizationString.InputUnlockPasswrd),
TextColor = Shared.Common.ZigbeeColor.Current.XMBlack,
TextAlignment = TextAlignment.BottomLeft,
IsNumberKeyboardType = true,
};
editInputPasswordFrameLayout.AddChidren(editInputPassword);
doorDialog.dialogBtnCancel.MouseUpEventHandler += (sender1, e1) =>
{
if (btnNext != null)
{
btnNext.IsSelected = false;
}
dialog.Close();
};
DateTime oldTime = DateTime.MaxValue;
doorDialog.dialogBtnConfirm.MouseUpEventHandler += async (sender1, e1) =>
{
Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); });
if (DateTime.Now < ZigBee.Device.DoorLock.minValue)
{
CommonPage.Loading.Hide();
this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.NoFiftySeconds));
return;
}
if (DateTime.Now >= oldTime && ZigBee.Device.DoorLock.RemoteUnlockCount == 0)
{
ZigBee.Device.DoorLock.RemoteUnlockCount = 5;
oldTime = DateTime.MaxValue;
}
if (ZigBee.Device.DoorLock.RemoteUnlockCount <= 0)
{
ZigBee.Device.DoorLock.minValue = DateTime.Now.AddSeconds(+15);
oldTime = ZigBee.Device.DoorLock.minValue;
CommonPage.Loading.Hide();
this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.AfterFiftySeconds));
return;
}
if (editInputPassword.Text.Length != 6)
{
ZigBee.Device.DoorLock.RemoteUnlockCount--;
string tipText = Language.StringByID(R.MyInternationalizationString.PasswordError) + "," + Language.StringByID(R.MyInternationalizationString.Surplus) + ZigBee.Device.DoorLock.RemoteUnlockCount.ToString() + Language.StringByID(R.MyInternationalizationString.Opportunity);
CommonPage.Loading.Hide();
this.ShowMassage(ShowMsgType.Tip, tipText);
return;
}
var verifyResult = await doorLock.VerifyPasswordAsync(editInputPassword.Text);
if (verifyResult != null)
{
if (verifyResult.result == 0)
{
System.Threading.Thread.Sleep(500);
doorLock.RemoteUnlockPassword = editInputPassword.Text;
ZigBee.Device.DoorLock.minValue = DateTime.MinValue;
ZigBee.Device.DoorLock.failedCount = 3;
ZigBee.Device.DoorLock.RemoteUnlockCount = 5;
oldTime = DateTime.MaxValue;
CommonPage.Loading.Hide();
dialog.Close();
if (btnNext != null)
{
btnNext.IsSelected = true;
}
if (!UserCenterResourse.AccountOption.DoorUnLockByRemote)
{
string msg = Language.StringByID(R.MyInternationalizationString.RemoteUnlockBindSucessTip).Replace("{0}", "\r\n");
var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msg, Language.StringByID(R.MyInternationalizationString.GoSetting));
alert.Show();
//使用确认型弹框时,的回调函数
alert.ConfirmClickEvent += () =>
{
var form = new UserCenter.UserMain.SecondAuthenticationForm();
form.AddForm();
};
}
doorLock.ReSave();
}
else
{
ZigBee.Device.DoorLock.RemoteUnlockCount--;
string tipText = Language.StringByID(R.MyInternationalizationString.OperrateFailed) + "," + Language.StringByID(R.MyInternationalizationString.Surplus) + ZigBee.Device.DoorLock.RemoteUnlockCount.ToString() + Language.StringByID(R.MyInternationalizationString.Opportunity);
CommonPage.Loading.Hide();
this.ShowMassage(ShowMsgType.Tip, tipText);
return;
}
}
else
{
CommonPage.Loading.Hide();
this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.GwResponseOvertime));
return;
}
};
doorDialog.flMain.MouseUpEventHandler += (sender11, e11) =>
{
if (btnNext != null)
{
btnNext.IsSelected = false;
}
dialog.Close();
};
}
///
/// 安全验证
///
/// 门锁设备
/// 二次验证的结果成功后的通知
public static void SecurityRequest(ZigBee.Device.DoorLock doorLock)
{
string msg = Language.StringByID(R.MyInternationalizationString.SetSecondarySecurityVerificationMode).Replace("{0}", "\r\n");
var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msg, Language.StringByID(R.MyInternationalizationString.GoSetting));
alert.Show();
//使用确认型弹框时,的回调函数
alert.ConfirmClickEvent += () =>
{
var form = new UserCenter.UserMain.SecondAuthenticationForm();
form.AddForm();
};
}
///
/// 绑定远程开锁权限窗口
///
///
///
public void BindRemoteUnlockDoorlock(Room room, CommonDevice devDoorLock, Button btnDoorLockTitle = null)
{
ZigBee.Device.DoorLock doorLock = devDoorLock as ZigBee.Device.DoorLock;
string msgRemoteUnlockRequest = Language.StringByID(R.MyInternationalizationString.BindRemoteUnlockDoorlock);
var alertRemoteUnlockRequest = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msgRemoteUnlockRequest, Language.StringByID(R.MyInternationalizationString.GoSetting));
alertRemoteUnlockRequest.Show();
//使用确认型弹框时,的回调函数
alertRemoteUnlockRequest.ConfirmClickEvent += () =>
{
var functionSetting = new Shared.Phone.UserCenter.DoorLock.FunctionSetting(room, devDoorLock);
Shared.Phone.UserView.HomePage.Instance.AddChidren(functionSetting);
Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
functionSetting.Show();
functionSetting.devicNameAction += (deviceRename) =>
{
if (!string.IsNullOrEmpty(deviceRename))
{
if (btnDoorLockTitle != null)
{
btnDoorLockTitle.Text = deviceRename;
}
}
};
};
}
///
/// 去个人中心,开启系统密码支持开锁权限
///
public void SystemSecondAuthentication()
{
string msgDoorUnLockByRemote = Language.StringByID(R.MyInternationalizationString.GoPersonalCenter).Replace("{0}", "\r\n");
var alertDoorUnLockByRemote = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msgDoorUnLockByRemote, Language.StringByID(R.MyInternationalizationString.GoSetting));
alertDoorUnLockByRemote.Show();
//使用确认型弹框时,的回调函数
alertDoorUnLockByRemote.ConfirmClickEvent += () =>
{
var form = new UserCenter.UserMain.SecondAuthenticationForm();
form.AddForm();
};
}
///
/// 远程开锁请求
///
/// 门锁设备
/// 二次验证的结果成功后的通知
/// 门锁开或关时进度显示
/// 门锁图片开/关显示
public void RemoteUnlockRequest(Room room, CommonDevice devDoorLock, Action action, Button progressButton = null, Button btnDoorLockPic = null, Button btnStatus = null, Button btnDoorLockTitle = null)
{
ZigBee.Device.DoorLock doorLock = devDoorLock as ZigBee.Device.DoorLock;
if (string.IsNullOrEmpty(doorLock.RemoteUnlockPassword))
{
BindRemoteUnlockDoorlock(room, devDoorLock, btnDoorLockTitle);
return;
}
if (!UserCenterResourse.AccountOption.DoorUnLockByRemote)
{
SystemSecondAuthentication();
return;
}
string msg = Language.StringByID(R.MyInternationalizationString.SureToOpenDoorLock);
var alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.Confirm, msg, Language.StringByID(R.MyInternationalizationString.DoorlockConfirm));
alert.Show();
//使用确认型弹框时,的回调函数
alert.ConfirmClickEvent += () =>
{
action = () =>
{
System.Threading.Tasks.Task.Run(async () =>
{
Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); });
try
{
Application.RunOnMainThread(() =>
{
if (progressButton != null)
{
progressButton.Y = Application.GetRealHeight(10);
}
if (btnDoorLockPic != null)
{
btnDoorLockPic.IsSelected = true;
}
if (btnStatus != null)
{
btnStatus.Text = Language.StringByID(R.MyInternationalizationString.Opening);
}
});
//远程开锁
var remoteControlResult = await doorLock.RemoteControlAsync(doorLock.RemoteUnlockPassword);
//远程开锁成功,返回默认响应
if (remoteControlResult != null && remoteControlResult.responseData != null)
{
if (remoteControlResult.responseData.status == 0)
{
ZigBee.Device.DoorLock.failedCount = 3;
Application.RunOnMainThread(() =>
{
if (progressButton != null)
{
progressButton.Y = Application.GetRealHeight(10);
}
if (btnDoorLockPic != null)
{
btnDoorLockPic.IsSelected = true;
}
if (btnStatus != null)
{
btnStatus.Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.DoorLockOpen);
this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.UnlockSuccess));
}
});
//开锁成功,默认5秒后门锁自动关锁,根据不同的门锁可能时间不同,这里以“H06C”门锁给的时间
System.Threading.Thread.Sleep(5000);
}
else
{
this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.UnlockFailed));
}
}
//用于远程开锁的门锁中的密码被删除情况
else if (remoteControlResult != null && remoteControlResult.IsPawDispear == true)
{
//远程开锁有3次连续操作失败的机会
ZigBee.Device.DoorLock.failedCount--;
if (ZigBee.Device.DoorLock.failedCount != 0)
{
this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.UnlockFailed));
}
else
{
//3次操作失败远程开锁失败后,重写设置远程开锁密码
Application.RunOnMainThread(() =>
{
this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.DoorlockPasswordDispear));
doorLock.RemoteUnlockPassword = "";
var functionSetting = new Shared.Phone.UserCenter.DoorLock.FunctionSetting(room, devDoorLock);
Shared.Phone.UserView.HomePage.Instance.AddChidren(functionSetting);
Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
functionSetting.Show();
functionSetting.devicNameAction += (deviceRename) =>
{
if (!string.IsNullOrEmpty(deviceRename))
{
if (btnDoorLockTitle != null)
{
btnDoorLockTitle.Text = deviceRename;
}
}
};
});
}
}
//远程开锁失败的情况
else
{
this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.GwResponseOvertime));
}
}
catch { }
finally
{
Application.RunOnMainThread(() =>
{
if (progressButton != null)
{
progressButton.Y = Application.GetRealHeight(347);
}
if (btnDoorLockPic != null)
{
btnDoorLockPic.IsSelected = false;
}
if (btnStatus != null)
{
btnStatus.Text = Language.StringByID(R.MyInternationalizationString.Current) + Language.StringByID(R.MyInternationalizationString.CLose);
}
CommonPage.Loading.Hide();
});
}
});
};
HdlCheckLogic.Current.CheckSecondarySecurity(action);
};
}
// 获取到到名称更改回调通知
public Action devicNameSecAction;
///
/// 当前选中的开锁方式
///
///
///
///
///
public void CurrentSelectUnlockMethod(Button btnAllMethod, Button btnMethodText, Button oldbutton, Button oldbuttonText)
{
btnAllMethod.IsSelected = true;
btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
btnMethodText.IsBold = true;
oldbutton = btnAllMethod;
oldbuttonText = btnMethodText;
}
///
/// 显示所有开锁方式的数据
///
///
///
///
public void DisplayAllUnlockMethod(int curIndex, Button btnAllMethod, Button btnMethodText)
{
switch (curIndex)
{
case 0:
btnAllMethod.UnSelectedImagePath = "DoorLock/AllMethod.png";
btnAllMethod.SelectedImagePath = "DoorLock/AllMethodOn.png";
btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.AllMethod);
break;
case 1:
btnAllMethod.UnSelectedImagePath = "DoorLock/Password.png";
btnAllMethod.SelectedImagePath = "DoorLock/PasswordOn.png";
btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.PasswordUnlock);
break;
case 2:
btnAllMethod.UnSelectedImagePath = "DoorLock/Fingerprint.png";
btnAllMethod.SelectedImagePath = "DoorLock/FingerprintOn.png";
btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.FingerprintUnlock);
break;
case 3:
btnAllMethod.UnSelectedImagePath = "DoorLock/proximityCard.png";
btnAllMethod.SelectedImagePath = "DoorLock/proximityCardOn.png";
btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.ProximithCardUnlock);
break;
}
}
#region ■ 一般方法___________________________
///
/// 显示错误信息窗口
///
///
public void ShowErrorMsg(string msg)
{
Application.RunOnMainThread(() =>
{
var contr = new ShowMsgControl(ShowMsgType.Error, msg);
contr.Show();
});
}
///
/// 显示Tip信息窗口
///
///
public void ShowTipMsg(string msg)
{
Application.RunOnMainThread(() =>
{
var contr = new ShowMsgControl(ShowMsgType.Tip, msg);
contr.Show();
CommonPage.Loading.Hide();
});
}
#endregion
}
}