using Shared; using System; using System.Collections.Generic; using System.Text; using HDL_ON.UI.CSS; using HDL_ON.Entity; using HDL_ON.DriverLayer; using HDL_ON.UI.Music; using HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock; namespace HDL_ON.UI { /// /// 视频门锁的控制界面 /// public class VideoDoorLockPage : FrameLayout { #region ■ 变量声明___________________________ /// /// 设备 /// private Function device; /// /// 上一级界面的设备名字控件 /// private Button btnDeviceName; /// /// 上一级界面的房间名字控件 /// private Button btnRoomName; /// /// 头部布局 /// private TopView topView; /// /// 当前设备名称 /// private Button btnCurrDeviceName; /// /// 区域 /// private Button btnCurrDeviceRoom; /// /// 电量父控件 /// private FrameLayout cellFrame; /// /// 电量 /// private Button btnCell; /// /// 电量进度条 /// private DiyArcSeekBar cellDiyArcSeekBar; /// ///收藏图标 /// private Button btnCollectIcon; /// /// 门锁状态 /// private Button btnDoorLockIcon; Button btnDoorlockStatus; /// /// 实时视频 /// private CustomFrameLayout rtvFL; /// /// 临时密码 /// private CustomFrameLayout pswFL; /// /// 历史记录 /// private CustomFrameLayout recordFL; /// /// 表示来自那个界面 /// private CommonMethod.Comerom comerom; /// /// 删除设备后需要更新界面的回调 /// public Action action; #endregion /// /// 构造函数 /// /// 设备 /// 上一级界面的设备名字控件(注:不能传null,没有可以传new Button()) /// 上一级界面的房间名字控件(注:不能传null,没有可以传new Button()) public VideoDoorLockPage(Function function, Button btnDeviceName, Button btnRoomName, CommonMethod.Comerom comerom, Action action) { this.device = function; this.btnDeviceName = btnDeviceName; this.btnRoomName = btnRoomName; this.comerom = comerom; this.action = action; } public void Show() { //初始化UI this.InitUI(); //初始化事件 this.EventListener(); //读取数据 this.ReadData(); } /// /// 初始化界面 /// private void InitUI() { #region ---界面布局--- this.BackgroundColor = MusicColor.ViewColor; this.topView = new TopView(); this.topView.setBtn.Visible = true; this.topView.topNameBtn.TextID = StringId.shipinmensuo; this.AddChidren(topView.TopFLayoutView()); var middleFl = new FrameLayout { Y = topView.fLayout.Bottom, Height = Application.GetRealHeight(H_W.H - H_W.T_Height), }; this.AddChidren(middleFl); var whiteFl = new FrameLayout { Y = Application.GetRealHeight(24), X = Application.GetRealWidth(24), Height = Application.GetRealHeight(526), Width = Application.GetRealWidth(327), BackgroundImagePath = "MusicIcon/playBj.png", Name = "fl", }; middleFl.AddChidren(whiteFl); btnCollectIcon = new Button { X = Application.GetRealWidth(264), Y = Application.GetRealHeight(14), Width = Application.GetRealWidth(40), Height = Application.GetRealWidth(40), UnSelectedImagePath = "MusicIcon/collect.png", SelectedImagePath = "MusicIcon/collectSelected.png", IsSelected = this.device.collect, Name = "collect" }; whiteFl.AddChidren(btnCollectIcon); btnCurrDeviceName = new Button { TextSize = TextSize.Text24, TextColor = MusicColor.Text18Color, Width = Application.GetRealWidth(160), Height = Application.GetRealHeight(33), Y = Application.GetRealHeight(16), X = Application.GetRealWidth(16), Text = this.device.name, TextAlignment = TextAlignment.CenterLeft, }; whiteFl.AddChidren(btnCurrDeviceName); btnCurrDeviceRoom = new Button { TextSize = TextSize.Text12, TextColor = MusicColor.MusicNoTxetColor, Width = Application.GetRealWidth(160), Height = Application.GetRealHeight(17), Y = btnCurrDeviceName.Bottom + Application.GetRealHeight(4), X = Application.GetRealWidth(16), Text = this.device.GetRoomListName(), TextAlignment = TextAlignment.CenterLeft, }; whiteFl.AddChidren(btnCurrDeviceRoom); cellFrame = new FrameLayout { X = btnCurrDeviceRoom.Right + Application.GetRealWidth(20), Y = btnCurrDeviceName.Bottom + Application.GetRealHeight(5), Width = Application.GetRealWidth(30), Height = Application.GetRealHeight(16), }; whiteFl.AddChidren(cellFrame); cellDiyArcSeekBar = new DiyArcSeekBar { X = Application.GetRealWidth(3), Y = Application.GetRealHeight(3), Width = cellFrame.Width + Application.GetRealWidth(-6), Height = cellFrame.Height + Application.GetRealHeight(-6), Progress = 60, ProgressBarColor = MusicColor.MusicNoTxetColor, MaxValue = 100, MinValue = 0, //IsCanMove = false, //IsCanScrolled=false, }; //cellFrame.AddChidren(cellDiyArcSeekBar); btnCell = new Button { TextSize = TextSize.Text10, TextColor = MusicColor.TextColor, Text = "60" + "%", TextAlignment = TextAlignment.Center, UnSelectedImagePath = "FunctionIcon/DoorLock/Cell.png", }; cellFrame.AddChidren(btnCell); #if __IOS__ //btnCell.Padding = new Padding(0,0,0,0); btnCell.Width += 5; cellFrame.Width += 5; #else #endif //门锁状态 btnDoorLockIcon = new Button { X = Application.GetRealWidth(65), Y = Application.GetRealHeight(108), Width = Application.GetRealWidth(198), Height = Application.GetRealWidth(200), UnSelectedImagePath = "FunctionIcon/DoorLock/UnLocked.png", SelectedImagePath = "FunctionIcon/DoorLock/UnLocking.png", }; whiteFl.AddChidren(btnDoorLockIcon); this.CalculatedPosition();//重新计算宽度 btnDoorlockStatus = new Button() { Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(62), Y = btnDoorLockIcon.Bottom, TextAlignment = TextAlignment.Center, Gravity = Gravity.CenterHorizontal, TextID = StringId.DoorlockOpen, TextColor = CSS_Color.WarningColor, TextSize = 16, }; whiteFl.AddChidren(btnDoorlockStatus); int heightY = btnDoorLockIcon.Bottom + Application.GetRealHeight(133); //实时视频 rtvFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout); whiteFl.AddChidren(rtvFL); rtvFL.Y = heightY; rtvFL.X = Application.GetRealWidth(26); rtvFL.AddImageView(); rtvFL.AddTextButtonView(); rtvFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/RTV.png"; rtvFL.GetTextButton().TextID = StringId.shishishipin; //临时密码 pswFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout); whiteFl.AddChidren(pswFL); pswFL.Y = heightY; pswFL.X = rtvFL.Right + Application.GetRealWidth(CustomFrameLayout.interval); pswFL.AddImageView(); pswFL.AddTextButtonView(); pswFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/OneOpenLock.png"; pswFL.GetTextButton().TextID = StringId.linshimima1; if (device.omodel.Contains("CS-DL30F-V100")) { rtvFL.Visible = rtvFL.Enable = false; pswFL.X = Application.GetRealWidth(26); } //历史记录 recordFL = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout); whiteFl.AddChidren(recordFL); recordFL.Y = heightY; recordFL.X = pswFL.Right + Application.GetRealWidth(CustomFrameLayout.interval); recordFL.AddImageView(); recordFL.AddTextButtonView(); recordFL.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/HistoryList.png"; recordFL.GetTextButton().TextID = StringId.lishijilu; if (!DB_ResidenceData.Instance.CurrentRegion.isOtherShare) { //用户管理 CustomFrameLayout userManagerView = new CustomFrameLayout(CustomFrameLayout.widthFrameLayout, CustomFrameLayout.heightFrameLayout); whiteFl.AddChidren(userManagerView); userManagerView.Y = heightY; userManagerView.X = recordFL.Right + Application.GetRealWidth(CustomFrameLayout.interval); userManagerView.AddImageView(); userManagerView.AddTextButtonView(); userManagerView.GetImageButton().UnSelectedImagePath = "FunctionIcon/DoorLock/DoorlockUserManager.png"; userManagerView.GetTextButton().TextID = StringId.UserManagement; userManagerView.SetClickListener((fl, btnImage, btnText) => { var page = new VideoDoorlockUserListPage(device); MainPage.BasePageView.AddChidren(page); page.LoadPage(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }); } #endregion } /// /// 注册事件 /// private void EventListener() { //返回 this.topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { this.RemoveFromParent(); }; //设置 this.topView.clickSetBtn.MouseUpEventHandler += (sender, e) => { CommonMethod.Current.MainThread(() => { //调用秀绕的界面 var infoView = new UI.FunctionBaseInfoSetPage(this.device, () => { if (this.btnDeviceName == null || this.btnRoomName == null || this.device == null) { return; } ////刷新显示 this.btnDeviceName.Text = this.device.name; this.btnRoomName.Text = this.device.GetRoomListName(); this.btnCurrDeviceName.Text = this.device.name; this.btnCurrDeviceRoom.Text = this.device.GetRoomListName(); this.CalculatedPosition();//重新计算宽度 }); infoView.actionDel += () => { //解绑设备后 this.RemoveFromParent(); this.action?.Invoke(); }; MainPage.BasePageView.AddChidren(infoView); infoView.LoadPage(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }); }; //收藏 this.btnCollectIcon.MouseUpEventHandler += (sender, e) => { btnCollectIcon.IsSelected = this.device.collect = !btnCollectIcon.IsSelected; this.device.CollectFunction(); }; int delayTimeMaxValue = 0;// var startTime = DateTime.Now; //实时视频 this.rtvFL.SetClickListener((fl, btnStateImage, btnStateText) => { bool isDeyayClick = false; var clickTime = DateTime.Now; if ((clickTime - startTime).TotalMilliseconds > delayTimeMaxValue) { delayTimeMaxValue = 2*1000; startTime = clickTime; isDeyayClick = true; } if (!isDeyayClick) { return; } CommonMethod.Current.SkipRTVActivity(this.device.sid, this.device.deviceId, this.device.spk, false); }); var lastClickTime = DateTime.MinValue; //临时密码 this.pswFL.SetClickListener((fl, btnStateImage, btnStateText) => { if (lastClickTime.AddSeconds(3) > DateTime.Now) { return; } lastClickTime = DateTime.Now; CommonMethod.Current.SkipPSWActivity(this.device.deviceId); }); //历史记录 this.recordFL.SetClickListener((fl, btnStateImage, btnStateText) => { if (lastClickTime.AddSeconds(3) > DateTime.Now) { return; } lastClickTime = DateTime.Now; //VideoDoorlockHistoryPage historyPage = new VideoDoorlockHistoryPage(device); //MainPage.BasePageView.AddChidren(historyPage); //historyPage.LoadPage(); //MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; var waitPage = new Loading(); this.AddChidren(waitPage); waitPage.Start(""); new System.Threading.Thread(() => { try { Application.RunOnMainThread(() => { CommonMethod.Current.SkipRecordActivity(this.device.deviceId); }); }catch(Exception ex) { } finally { Application.RunOnMainThread(() => { waitPage.Hide(); }); } }) { IsBackground = true }.Start(); }); } /// /// 初始数据 /// private void ReadData() { CommonMethod.Current.Loading.Start(); CommonMethod.Current.SunThread(() => { try { var videoDoorLockInfo = VideDoorLockSend.Current.GetVideoDoorLockState(this.device); var cellInfo = VideDoorLockSend.Current.GetCellValue(this.device); CommonMethod.Current.MainThread(() => { //this.cellDiyArcSeekBar.Progress = i; //更新电量值 this.btnCell.Text = cellInfo.remain + "%"; if(videoDoorLockInfo.doorStatus == "open") { this.btnDoorLockIcon.IsSelected = true; this.btnDoorlockStatus.TextID = StringId.DoorlockOpen; this.btnDoorlockStatus.TextColor = CSS_Color.WarningColor; } else { this.btnDoorLockIcon.IsSelected = false; this.btnDoorlockStatus.TextID = StringId.DoorlockClose; this.btnDoorlockStatus.TextColor = 0xFF000000; } }); } catch { } finally { Application.RunOnMainThread(() => { CommonMethod.Current.Loading.Hide(); }); } }); } /// /// 重新计算宽度(设备名称,房间控件) /// private void CalculatedPosition() { this.btnCurrDeviceName.Width = this.btnCurrDeviceName.GetTextWidth(); this.btnCurrDeviceName.Width += 10; if (this.btnCurrDeviceName.GetTextWidth() > this.btnCollectIcon.X) { //重新计算宽度 this.btnCurrDeviceName.Width = this.btnCollectIcon.X + Application.GetRealWidth(-10); } this.btnCurrDeviceRoom.Width = this.btnCurrDeviceRoom.GetTextWidth(); this.btnCurrDeviceRoom.Width += 10; if (this.btnCurrDeviceRoom.GetTextWidth() > this.btnCollectIcon.X) { //重新计算宽度 this.btnCurrDeviceRoom.Width = this.btnCollectIcon.X + Application.GetRealWidth(-20 - 10); } this.cellFrame.X = this.btnCurrDeviceRoom.Right + Application.GetRealWidth(20); } /// /// 更新状态 /// public void UpdateState(PushMessageType pushMessageType) { CommonMethod.Current.MainThread(() => { if (pushMessageType == PushMessageType.Alarm) { //门锁电池值 if (this.btnCell != null) { //videoDoorLockPage.btnCell.Text = ""; } } else { if (this.btnDoorLockIcon != null && !this.btnDoorLockIcon.IsSelected) { this.btnDoorLockIcon.IsSelected = false; } } }); } } /// /// 自己弄一个FrameLayout /// class CustomFrameLayout : FrameLayout { public const int widthFrameLayout = 48; public const int heightFrameLayout = 53; public const int yFrameLayout = 442; public const int xFrameLayout = 41; public const int interval = 30;//行中的列间隔值 public CustomFrameLayout(int width, int height, int x = 0, int y = 0) { this.Width = Application.GetRealWidth(width); this.Height = Application.GetRealHeight(height); this.X = Application.GetRealWidth(x); this.Y = Application.GetRealHeight(y); } Button btnStateImage = new Button { Width = Application.GetRealWidth(32), Height = Application.GetRealWidth(32), Gravity = Gravity.TopCenter, Name = "btnStateImage", }; Button btnStateText = new Button { Y = Application.GetRealHeight(4), Width = Application.GetRealWidth(100), Height = Application.GetRealWidth(20), TextID = StringId.dangqianmenweiguan, TextSize = TextSize.Text12, TextColor = MusicColor.TextCancelColor, TextAlignment = TextAlignment.Center, Gravity = Gravity.CenterHorizontal, Name = "btnStateText", IsMoreLines = true, }; public void AddImageView() { this.AddChidren(btnStateImage); } public void AddTextButtonView() { btnStateText.Y += btnStateImage.Bottom; this.AddChidren(btnStateText); } public Button GetImageButton() { //if (!this.AddWithout(this.btnStateImage)) //{ // this.AddImageView(); //} return this.btnStateImage; } public Button GetTextButton() { //if (!this.AddWithout(this.btnStateText)) //{ // this.AddTextButtonView(); //} return this.btnStateText; } /// /// 事件监听方法 /// /// 回调(第一个是父类对象;第二个是图标对象;第三个是状态对象 /// 注意:在SetClickListener()前面调用AddImageView()才有效 /// 注意:在SetClickListener()前面调用AddImageView()才有效 public void SetClickListener(Action action) { EventHandler click = (sender, e) => { action?.Invoke(this, btnStateImage, btnStateText); }; this.MouseUpEventHandler += click; btnStateImage.MouseUpEventHandler += click; btnStateText.MouseUpEventHandler += click; } /// /// 在父布局查找子控件是否存在 /// /// 查找对象 /// 存在为true,否则为false private bool AddWithout(View btn) { if (this.ChildrenCount <= 0 || btn == null) { return false; } for (int i = 0; i < this.ChildrenCount; i++) { View view = this.GetChildren(i); if (view == null) { continue; } if (view is Button) { if (view.Name == btn.Name) { return true; } } } return false; } } }