WJC
2020-04-02 94e4e5b9fd3da964c44b7b14227d6fe2bbb426d7
ZigbeeApp/Shared/Phone/Device/AC/ACControl.cs
@@ -13,7 +13,7 @@
        /// <summary>
        /// The action.
        /// </summary>
        public Action action;
        public Action<CommonDevice, Common.Room> action;
        /// <summary>
        /// 收藏按钮
@@ -22,7 +22,7 @@
        /// <summary>
        /// 传过来的设备
        /// </summary>
        private DeviceUI device;
        private CommonDevice device;
        /// <summary>
        /// 传过来的房间
        /// </summary>
@@ -125,15 +125,7 @@
        #endregion
        #region ◆ 接口___________________________
        /// <summary>
        /// 处理变化事件 --将弃用 改用DeviceInfoChange()
        /// </summary>
        /// <returns>The changed.</returns>
        /// <param name="common">Common.</param>
        public void Changed(CommonDevice common)
        {
        }
        /// <summary>
        /// 设备状态更新接口
        /// <para>type:如果为 DeviceInComingRespon:设备新上报</para>
@@ -153,11 +145,11 @@
                    try
                    {
                        var deviceUI = device;
                        if (deviceUI.CommonDevice == null)
                        if (deviceUI == null)
                        {
                            return;
                        }
                        if (deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint || deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr)
                        if (deviceUI.DeviceEpoint != common.DeviceEpoint || deviceUI.DeviceAddr != common.DeviceAddr)
                        {
                            return;
                        }
@@ -169,20 +161,18 @@
                            {
                                return;
                            }
                            deviceUI.CommonDevice.DeviceStatusReport = common.DeviceStatusReport;
                            deviceUI.DeviceStatusReport = common.DeviceStatusReport;
                            foreach(var attList in attriButeList)
                            {
                                var curTemp = (attList.AttriButeData / 100 < ACControlBase.Temperature_High && attList.AttriButeData / 100 > ACControlBase.Temperature_Low) ? attList.AttriButeData / 100 : ACControlBase.Temperature_Default;
                                switch (attList.AttributeId)
                                {
                                    case 0:
                                        ac.currentLocalTemperature = curTemp;
                                        ac.currentLocalTemperature = attList.AttriButeData / 100;
                                        ac.LastDateTime = DateTime.Now;
                                        indoorTemperatureBtn.Text = $"{Language.StringByID(R.MyInternationalizationString.Current)} {ac.currentLocalTemperature} ℃";
                                        //currentTemperatureBtn.Text = $"{ac.currentLocalTemperature} ℃";
                                        break;
                                    case 17:
                                        ac.currentCoolingSetpoint = curTemp;
                                        ac.currentCoolingSetpoint = attList.AttriButeData / 100;
                                        if (ac.currentSystemMode == 3 || ac.currentSystemMode == 8)
                                        {
                                            mArcScaleSeekBar.Progress = ac.currentCoolingSetpoint;
@@ -190,7 +180,7 @@
                                        ac.LastDateTime = DateTime.Now;
                                        break;
                                    case 18:
                                        ac.currentHeatingSetpoint = curTemp;
                                        ac.currentHeatingSetpoint = attList.AttriButeData / 100;
                                        if (ac.currentSystemMode == 4)
                                        {
                                            mArcScaleSeekBar.Progress = ac.currentHeatingSetpoint;
@@ -198,7 +188,7 @@
                                        ac.LastDateTime = DateTime.Now;
                                        break;
                                    case 4096:
                                        ac.currentAutoSetpoint = curTemp;
                                        ac.currentAutoSetpoint = attList.AttriButeData / 100;
                                        if (ac.currentSystemMode == 1)
                                        {
                                            mArcScaleSeekBar.Progress = ac.currentAutoSetpoint;
@@ -217,6 +207,8 @@
                                            fanModeBtn.IsSelected = false;
                                            FanSwingModeBtn.IsSelected = false;
                                            mArcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor);
                                            //如果是关闭空调的话,直接变暗即可
                                            return;
                                        }
                                        else if (ac.currentSystemMode == 1 || ac.currentSystemMode == 3 || ac.currentSystemMode == 4 || ac.currentSystemMode == 7 || ac.currentSystemMode == 8)
                                        {
@@ -236,14 +228,6 @@
                                        //过虑网清洗标志:42
                                        ac.CleanStatu = attList.AttriButeData == 42;
                                        cleanStatu.Visible = ac.CleanStatu;
                                        break;
                                    case 4099:
                                        var value = Convert.ToString(attList.AttriButeData, 2).PadLeft(16, '0');
                                        var modeStr = value.Substring(value.Length - 5, 5);
                                        for (int j = 0; j < modeStr.Length; j++)
                                        {
                                            ac.listSupportMode[j] = Convert.ToInt32(modeStr[j]) == 49 ? 1 : 0;
                                        }
                                        break;
                                }
                            }
@@ -299,16 +283,16 @@
                    {
                        var deviceUI = device;
                        //设备为空
                        if (deviceUI.CommonDevice == null)
                        if (deviceUI == null)
                        {
                            return;
                        }
                        //是否为当前设备
                        if (deviceUI.CommonDevice.DeviceEpoint != common.DeviceEpoint || deviceUI.CommonDevice.DeviceAddr != common.DeviceAddr)
                        if (deviceUI.DeviceEpoint != common.DeviceEpoint || deviceUI.DeviceAddr != common.DeviceAddr)
                        {
                            return;
                        }
                        if (deviceUI.CommonDevice.Type == DeviceType.Thermostat)
                        if (deviceUI.Type == DeviceType.Thermostat)
                        {
                            ac.IsOnline = common.IsOnline;
                            ac.LastDateTime = DateTime.Now;
@@ -321,22 +305,7 @@
                });
            }
        }
        /// <summary>
        /// Changeds the IL ogic status.
        /// </summary>
        /// <param name="logic">Logic.</param>
        public void ChangedILogicStatus(ZigBee.Device.Logic logic)
        {
            //throw new NotImplementedException();
        }
        /// <summary>
        /// Changeds the IS cene status.
        /// </summary>
        /// <param name="scene">Scene.</param>
        public void ChangedISceneStatus(Scene scene)
        {
            //throw new NotImplementedException();
        }
        #endregion
        #region ◆ 构造方法________________________
@@ -362,8 +331,8 @@
        public override void RemoveFromParent()
        {
            ZigBee.Device.ZbGateway.StatusList.Remove(this);
            //action();
            //action = null;
            action(device, room);
            action = null;
            RemoveUpdateControlDeviceStatuAction();
            HomePage.Instance.ScrollEnabled = true;
            if (IsDrawerLockMode)
@@ -382,12 +351,12 @@
        /// </summary>
        /// <param name="dev">Device.</param>
        /// <param name="room">Room.</param>
        public void Show(DeviceUI dev, Shared.Common.Room room)
        public void Show(CommonDevice dev, Shared.Common.Room room)
        {
            device = dev;
            zbGateway = this.device.CommonDevice.Gateway;
            zbGateway = this.device.Gateway;
            this.room = room;
            this.ac = device.CommonDevice as ZigBee.Device.AC;
            this.ac = device as ZigBee.Device.AC;
            AddTop();
            AddBodyView(device);
@@ -401,7 +370,7 @@
                //发送读取状态命令
                UserView.UserHomeView.ReadStatus(ac, () =>
                {
                    ReadDeviceAttributeLogic.Instance.SendACStatuComand(device.CommonDevice);
                    ReadDeviceAttributeLogic.Instance.SendACStatuComand(device);
                });
            }
            else
@@ -409,12 +378,11 @@
                //防止短时间内多次读取设备状态
                if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan)
                {
                    ReadDeviceAttributeLogic.Instance.SendACStatuComand(device.CommonDevice);
                    ReadDeviceAttributeLogic.Instance.SendACStatuComand(device);
                }
            }
            var de = Shared.Common.Room.LoveRoomDeviceUIFilePathList.Find((obj) => obj == device.FileName);
            if (de == null)
            if (UserCenter.HdlRoomLogic.Current.IsCollectInRoom(device)==false)
            {
                collectionBtn.IsSelected = false;
            }
@@ -458,7 +426,7 @@
        /// <summary>
        /// AddBodyView
        /// </summary>
        public void AddBodyView(DeviceUI device)
        public void AddBodyView(CommonDevice device)
        {
            bodyFrameLayout = new FrameLayout()
            {
@@ -501,7 +469,7 @@
                Width = Application.GetRealWidth(600),
                Height = Application.GetRealHeight(60),
                Gravity = Gravity.CenterHorizontal,
                Text = device.CommonDevice.DeviceEpointName,
                Text = Common.LocalDevice.Current.GetDeviceEpointName(device),
                TextColor = ZigbeeColor.Current.GXCTextBlackColor,
                TextSize = 15,
                IsBold=true
@@ -520,18 +488,27 @@
            };
            itemView.AddChidren(indoorTemperatureBtn);
            mArcScaleSeekBar = new ArcScaleSeekBar
            var mArcScaleSeekBarFL = new FrameLayout
            {
                Y = Application.GetRealHeight(412),
                Width = Application.GetRealWidth(671),
                Height = Application.GetRealHeight(671),
                Width = Application.GetMinRealAverage(671),
                Height = Application.GetMinRealAverage(671),
                Gravity = Gravity.CenterHorizontal
            };
            itemView.AddChidren(mArcScaleSeekBarFL);
            mArcScaleSeekBar = new ArcScaleSeekBar
            {
                Width = Application.GetMinRealAverage(671),
                Height = Application.GetMinRealAverage(671),
                Gravity = Gravity.CenterHorizontal,
                MinValue = ACControlBase.Temperature_Low,
                MaxValue = ACControlBase.Temperature_High,
                Progress = ACControlBase.GetCurrentModeTemperature(ac),
                IsClickable = ACControlBase.IsOpen(ac)
                IsClickable = ACControlBase.IsOpen(ac),
                ProgressBarUnitSring = string.Empty
            };
            itemView.AddChidren(mArcScaleSeekBar);
            mArcScaleSeekBarFL.AddChidren(mArcScaleSeekBar);
            if(ACControlBase.IsOpen(ac))
            {
                mArcScaleSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCArcScaleSeekBarStartColor, ZigbeeColor.Current.GXCArcScaleSeekBarEndColor);
@@ -561,35 +538,47 @@
            currentModeBtn = new Button()
            {
                Y = Application.GetRealHeight(565),
                Height = Application.GetRealHeight(80),
                Y = Application.GetMinRealAverage(187),
                Height = Application.GetRealHeight(50),
                Width = Application.GetRealWidth(200),
                TextColor = ZigbeeColor.Current.GXCTextBlackColor,
                Gravity = Gravity.CenterHorizontal,
                Text = ACControlBase.GetModeNameByModeId(ac.currentSystemMode),
                TextSize=12
                TextSize = 12
            };
            itemView.AddChidren(currentModeBtn);
            mArcScaleSeekBarFL.AddChidren(currentModeBtn);
            reduceTemperatureBtn = new Button()
            {
                X = Application.GetRealWidth(268),
                Y = Application.GetRealHeight(650),
                X = Application.GetMinRealAverage(132),
                Y = Application.GetMinRealAverage(268),
                Width = Application.GetMinRealAverage(80),
                Height = Application.GetMinRealAverage(80),
                UnSelectedImagePath = "AC/Reduce.png"
            };
            itemView.AddChidren(reduceTemperatureBtn);
            mArcScaleSeekBarFL.AddChidren(reduceTemperatureBtn);
            addTemperatureBtn = new Button()
            {
                X = Application.GetRealWidth(610),
                Y = Application.GetRealHeight(650),
                X = Application.GetMinRealAverage(452),
                Y = Application.GetMinRealAverage(268),
                Width = Application.GetMinRealAverage(80),
                Height = Application.GetMinRealAverage(80),
                UnSelectedImagePath = "AC/Add.png"
            };
            itemView.AddChidren(addTemperatureBtn);
            mArcScaleSeekBarFL.AddChidren(addTemperatureBtn);
            var uintBtn = new Button
            {
                Y = Application.GetMinRealAverage(369),
                Height = Application.GetRealHeight(60),
                Width = Application.GetRealWidth(100),
                TextColor = ZigbeeColor.Current.GXCTextBlackColor,
                Gravity = Gravity.CenterHorizontal,
                Text = "℃",
                TextSize = 18
            };
            mArcScaleSeekBarFL.AddChidren(uintBtn);
            FanSwingModeBtn = new Button()
            {
@@ -601,7 +590,6 @@
                SelectedImagePath = ACControlBase.GetFanSwingModeSelectedImagePathByFanSwingModeId(ac.currentFanSwingMode),
                IsSelected = ACControlBase.IsOpen(ac)
            };
            itemView.AddChidren(FanSwingModeBtn);
            modeBtn = new Button()
            {
@@ -638,6 +626,18 @@
                IsSelected = ACControlBase.IsOpen(ac)
            };
            itemView.AddChidren(fanModeBtn);
            if (ac.UseSwingFunction)
            {
                itemView.AddChidren(FanSwingModeBtn);
            }
            else
            {
                modeBtn.X = Application.GetRealWidth(207);
                switchBtn.X = Application.GetRealWidth(444);
                fanModeBtn.X = Application.GetRealWidth(677);
            }
            var roomBG = new Button
            {
@@ -881,6 +881,12 @@
        /// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
        private void ShowChangeMode_MouseUpEvent(object sender, MouseEventArgs mouseEventArgs)
        {
            if (HadSupportModel() == false)
            {
                CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.AC_Model_None));
                return;
            }
            int modeItem_X = 80;
            int modeItem_Height = 150;
            int modeItem_Width = 449;
@@ -1051,13 +1057,32 @@
                ACControlBase.ShowACIsCloseTip();
                return;
            }
            modeBtn.IsSelected = true;
            modeBtn.SelectedImagePath = ACControlBase.GetModeSelectedImagePathByMode(acMode);
            modeBtn.UnSelectedImagePath = ACControlBase.GetModeUnSelectedImagePathByMode(acMode);
            modeBtn.UnSelectedImagePath = ACControlBase.GetModeUnSelectedImagePathByMode(acMode);
            modeBtn.IsSelected = true;
            currentModeBtn.Text = ACControlBase.GetModeNameByMode(acMode);
            ac.currentSystemMode = (int)acMode;
            mArcScaleSeekBar.Progress = ACControlBase.GetCurrentModeTemperature(ac);
            ac.SetSystemModeAsync(acMode);
        }
        /// <summary>
        /// 是否配置了模式
        /// </summary>
        /// <returns></returns>
        private bool HadSupportModel()
        {
            bool hadMode = false;
            foreach (var m in ac.listSupportMode)
            {
                if (m == 1)
                {
                    hadMode = true;
                    break;
                }
            }
            return hadMode;
        }
        #endregion
@@ -1356,7 +1381,7 @@
                return;
            }
            var tempDevice = (CommonDevice)objValue;
            if (tempDevice.DeviceEpoint != this.device.CommonDevice.DeviceEpoint || tempDevice.DeviceAddr != this.device.CommonDevice.DeviceAddr)
            if (tempDevice.DeviceEpoint != this.device.DeviceEpoint || tempDevice.DeviceAddr != this.device.DeviceAddr)
            {
                //不是当前设备的推送,则不处理
                return;
@@ -1393,9 +1418,9 @@
            UserView.HomePage.Instance.AddChidren(detailInfo);
            UserView.HomePage.Instance.PageIndex += 1;
            detailInfo.Show(device, room);
            detailInfo.EditAction = (d,r) =>
            detailInfo.EditAction += (curDev, curRoom) =>
            {
                Show(device, room);
                Show(curDev, curRoom);
            };
        }
@@ -1412,12 +1437,12 @@
        {
            if (collectionBtn.IsSelected)
            {
                Shared.Common.Room.Lists[0].DeleteDevice(device.FileName);
                UserCenter.HdlRoomLogic.Current.DeleteLoveDevice(device);
                collectionBtn.IsSelected = false;
            }
            else
            {
                Shared.Common.Room.Lists[0].AddDevice(device.FileName);
                UserCenter.HdlRoomLogic.Current.AddLoveDevice(device);
                collectionBtn.IsSelected = true;
            }
        }