HDL Home App 第二版本 旧平台金堂用 正在使用
chenqiyang
2022-06-22 dc0309e64f02227d8e1468b7326c07955f804612
ZigbeeApp/Shared/Phone/Category/Controls/DeviceRow/Base/DeviceRowCommon.cs
@@ -46,6 +46,10 @@
        /// </summary>
        private MostRightIconControl btnSwitch = null;
        /// <summary>
        /// 电池控件
        /// </summary>
        private IconViewControl btnBattery = null;
        /// <summary>
        /// 是否获取网关反馈的结果  0:没有获取得到  1:已经获取得到
        /// </summary>
        private int ResponeResult = 0;
@@ -53,6 +57,10 @@
        /// 判断是否有开关功能
        /// </summary>
        private bool isHadOpenSwitch = true;
        /// <summary>
        /// 当前选择的房间
        /// </summary>
        public Common.Room nowSelectRoom = null;
        #endregion
@@ -71,9 +79,11 @@
        /// 初始化控件
        /// </summary>
        /// <param name="i_device">设备对象</param>
        public virtual void InitControl(CommonDevice i_device)
        /// <param name="i_nowSelectRoom">当前选择的房间(有点用处)</param>
        public virtual void InitControl(CommonDevice i_device, Common.Room i_nowSelectRoom)
        {
            this.device = i_device;
            this.nowSelectRoom = i_nowSelectRoom;
            //设备图标背景控件
            this.frameIconBackGroud = new FrameLayout();
            frameIconBackGroud.Height = this.GetPictrueRealSize(112);
@@ -94,16 +104,21 @@
            Common.LocalDevice.Current.SetDeviceIconToControl(btnDeviceIcon, i_device);
            frameIconBackGroud.AddChidren(btnDeviceIcon);
            //重新绑定事件
            this.frameTable.ChangedChidrenBindMode(frameIconBackGroud, ChidrenBindMode.BindEventOnly);
            this.frameTable.ChangedChidrenBindMode(frameIconBackGroud, ChidrenBindMode.BindEvent);
            //设备名字
            this.btnDeviceName = new NormalViewControl(600, 60, true);
            if (this.device.Type == DeviceType.WindowCoveringDevice || this.device.Type == DeviceType.Airer)
            {
                //窗帘因为右边有三个按钮,所以需要缩小名字的宽度
                this.btnDeviceName.Width = Application.GetRealWidth(360);
            }
            btnDeviceName.X = Application.GetRealWidth(181);
            //当指定实际坐标时,这里需要的偏移量为2倍
            btnDeviceName.Y = Application.GetRealHeight(16) + this.chidrenYaxis * 2;
            btnDeviceName.Text = Common.LocalDevice.Current.GetDeviceEpointName(i_device);
            btnDeviceName.SelectedTextColor = Common.ZigbeeColor.Current.GXCTextSelectedColor;
            this.frameTable.AddChidren(btnDeviceName, ChidrenBindMode.BindEventOnly);
            this.frameTable.AddChidren(btnDeviceName, ChidrenBindMode.BindEvent);
            
            if (this.hadStatuFunction == false)
            {
@@ -121,7 +136,7 @@
                btnStatu.Y = Application.GetRealHeight(70) + this.chidrenYaxis * 2;
                btnStatu.TextSize = 10;
                btnStatu.TextColor = UserCenterColor.Current.TextGrayColor1;
                this.frameTable.AddChidren(btnStatu, ChidrenBindMode.BindEventOnly);
                this.frameTable.AddChidren(btnStatu, ChidrenBindMode.BindEvent);
            }
            //底线
@@ -136,18 +151,36 @@
            btnSwitch.UnSelectedImagePath = "Item/Switch.png";
            btnSwitch.SelectedImagePath = "Item/SwitchSelected.png";
            //电池控件
            if (this.device.Type == DeviceType.IASZone)
            {
                this.btnBattery = new IconViewControl(69);
                btnBattery.X = this.Width - Application.GetRealWidth(69 + 29);
                btnBattery.UnSelectedImagePath = "Item/Battery.png";
                btnBattery.Gravity = Gravity.CenterVertical;
                this.frameTable.AddChidren(btnBattery, ChidrenBindMode.BindEvent);
                if (chidrenYaxis != 0)
                {
                    btnBattery.Y += chidrenYaxis;
                }
                if (this.device.IsBatteryDown == false)
                {
                    btnBattery.Visible = false;
                }
            }
            //分享的房间,则不能编辑和删除
            if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false)
            if (this.nowSelectRoom.IsSharedRoom == false)
            {
                //编辑
                var btnEditor = this.AddEditorControl();
                btnEditor.ButtonClickEvent += (sender, e) =>
                {
                    var detailInfo = new MainPage.DeviceDetailInfoForm();
                    detailInfo.AddForm(i_device, HdlRoomLogic.Current.CurrentRoom);
                    detailInfo.FormCloseEvent += (curDevice, curRoom) =>
                    detailInfo.AddForm(i_device, this.nowSelectRoom);
                    detailInfo.FormCloseEvent += () =>
                    {
                        if (HdlRoomLogic.Current.CurrentRoom.IsLove == true)
                        if (this.nowSelectRoom.IsLove == true)
                        {
                            //当前是喜爱房间时
                            if (HdlRoomLogic.Current.IsCollectInRoom(this.device) == false)
@@ -159,7 +192,8 @@
                                return;
                            }
                        }
                        else if (HdlRoomLogic.Current.CurrentRoom.Id != curRoom.Id)
                        var curRoom = HdlRoomLogic.Current.GetRoomByDevice(this.device);
                        if (curRoom == null || this.nowSelectRoom.Id != curRoom.Id)
                        {
                            //回调控件被移除的事件
                            this.RowNeedRemoveEvent?.Invoke();
@@ -182,7 +216,7 @@
                    {
                        //移除收藏(不管什么情况,收藏都要移除)
                        HdlRoomLogic.Current.DeleteLoveDevice(i_device);
                        if (HdlRoomLogic.Current.CurrentRoom.IsLove == false)
                        if (this.nowSelectRoom.IsLove == false)
                        {
                            //从房间中移除
                            HdlRoomLogic.Current.DeleteDevice(i_device);
@@ -190,6 +224,8 @@
                        //回调控件被移除的事件
                        this.RowNeedRemoveEvent?.Invoke();
                        this.RemoveFromParent();
                        //上传空间区域信息
                        HdlRoomLogic.Current.SetRoomInfoToGateway();
                    };
                };
            }
@@ -237,6 +273,13 @@
                //等待网关回复后会重新刷新,不然一直是关闭状态
                isOpen = false;
            }
            //如果是传感器类,则默认是关的效果
            if (this.device.Type == DeviceType.PMSensor || this.device.Type == DeviceType.IASZone
                || this.device.Type == DeviceType.TemperatureSensor)
            {
                isOpen = false;
            }
            this.SetRowOpenStatu(isOpen);
        }
@@ -251,31 +294,13 @@
            {
                this.btnStatu.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device);
            }
            if (this.btnDeviceName.IsSelected == isOpen)
            {
                //状态一样,则不需要处理
                return;
            }
            //设备名称控件
            this.btnDeviceName.IsSelected = isOpen;
            this.btnDeviceName.IsBold = isOpen;
            //设备的背景圆圈图
            if (isOpen == true)
            {
                this.frameIconBackGroud.BackgroundColor = Common.ZigbeeColor.Current.GXCSelectedBackgroundColor;
            }
            else
            {
                this.frameIconBackGroud.BackgroundColor = Common.ZigbeeColor.Current.GXCGrayBackgroundColor;
            }
            //设备图标控件
            this.btnDeviceIcon.IsSelected = isOpen;
            //开关控件
            if (this.btnSwitch != null)
            if (this.btnSwitch != null && this.btnSwitch.IsSelected != isOpen)
            {
                this.btnSwitch.IsSelected = isOpen;
            }
            //切换卡片状态特效
            this.SwitchRowStatuAppeal(isOpen);
        }
        /// <summary>
@@ -342,10 +367,9 @@
        /// 深度卡片信息的返回事件(底层专用)
        /// </summary>
        /// <param name="device">设备</param>
        /// <param name="room">房间</param>
        public void CardDetailInfoBackEvent(CommonDevice device, Common.Room room)
        public void CardDetailInfoBackEvent(CommonDevice device)
        {
            if (HdlRoomLogic.Current.CurrentRoom.IsLove == true)
            if (this.nowSelectRoom.IsLove == true)
            {
                //已经取消的收藏
                if (HdlRoomLogic.Current.IsCollectInRoom(device) == false)
@@ -361,7 +385,7 @@
            {   
                //如果这个设备改变了房间的话,回调卡片被删除的函数
                var nowRoom = HdlRoomLogic.Current.GetRoomByDevice(device);
                if (nowRoom == null || nowRoom.Id != HdlRoomLogic.Current.CurrentRoom.Id)
                if (nowRoom == null || nowRoom.Id != this.nowSelectRoom.Id)
                {
                    //回调控件被移除的事件
                    this.RowNeedRemoveEvent?.Invoke();
@@ -388,7 +412,7 @@
            this.ResponeResult = 0;
            HdlThreadLogic.Current.RunThread(() =>
            {
                int waitime = 30;
                int waitime = 40;
                while (waitime > 0)
                {
                    System.Threading.Thread.Sleep(100);
@@ -398,8 +422,15 @@
                        break;
                    }
                    waitime--;
                    //2秒的时候,还是接受不到的话,强制再次刷新设备状态
                    if (waitime == 20)
                    {
                        //从新发送获取设备的状态(强制)
                        this.device.HadReadDeviceStatu = false;
                        this.SendStatuComand();
                    }
                }
                if (waitime <= 0)
                if (waitime <= 0 && this.Parent != null)
                {
                    //没有获取得到结果
                    HdlThreadLogic.Current.RunMain(() =>
@@ -419,6 +450,43 @@
        public void SetHadGetResponeResultStatu()
        {
            this.ResponeResult = 1;
        }
        /// <summary>
        /// 接收网关回复的状态(true:已经接收到网关的回复 false:还没有接收到网关回复)
        /// </summary>
        /// <returns></returns>
        public bool ReceiveResponeResultStatu()
        {
            return this.ResponeResult == 1;
        }
        #endregion
        #region ■ 显示低电量_________________________
        /// <summary>
        /// 刷新电池电量状态
        /// </summary>
        public void RefreshBatteryStatu()
        {
            if (this.btnBattery == null) { return; }
            if (this.device.IsBatteryDown == true)
            {
                //电量低,显示图标
                if (this.btnBattery.Visible == false)
                {
                    this.btnBattery.Visible = true;
                }
            }
            else
            {
                //电量足够,隐藏图标
                if (this.btnBattery.Visible == true)
                {
                    this.btnBattery.Visible = false;
                }
            }
        }
        #endregion
@@ -446,6 +514,80 @@
        #endregion
        #region ■ 行闪烁特效_________________________
        /// <summary>
        /// 是否处于特效中
        /// </summary>
        private bool isAppeal = false;
        /// <summary>
        /// 开启行闪烁特效
        /// </summary>
        public void StartRowLightAppeal()
        {
            //设备状态必须刷新
            this.btnStatu.Text = HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device);
            if (this.isAppeal == true) { return; }
            this.isAppeal = true;
            HdlThreadLogic.Current.RunThread(() =>
            {
                //闪烁5秒,间隔400毫秒
                int count = 5000 / 400;
                bool isOpen = false;
                while (this.Parent != null && count >= 0)
                {
                    //闪烁特效
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        isOpen = !isOpen;
                        this.SwitchRowStatuAppeal(isOpen);
                    });
                    System.Threading.Thread.Sleep(400);
                    count--;
                }
                if (this.Parent != null && isOpen == false)
                {
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        //结束时,默认为打开特效
                        this.SwitchRowStatuAppeal(true);
                    }, ShowErrorMode.NO);
                }
                this.isAppeal = false;
            }, ShowErrorMode.NO);
        }
        /// <summary>
        /// 切换卡片状态特效
        /// </summary>
        public void SwitchRowStatuAppeal(bool isOpen)
        {
            if (this.btnDeviceName.IsSelected == isOpen)
            {
                //状态一样,则不需要处理
                return;
            }
            //设备名称控件
            this.btnDeviceName.IsSelected = isOpen;
            this.btnDeviceName.IsBold = isOpen;
            //设备的背景圆圈图
            if (isOpen == true)
            {
                this.frameIconBackGroud.BackgroundColor = Common.ZigbeeColor.Current.GXCSelectedBackgroundColor;
            }
            else
            {
                this.frameIconBackGroud.BackgroundColor = Common.ZigbeeColor.Current.GXCGrayBackgroundColor;
            }
            //设备图标控件
            this.btnDeviceIcon.IsSelected = isOpen;
        }
        #endregion
        #region ■ 控件摧毁___________________________
        /// <summary>