黄学彪
2020-12-17 9f326f4000847e6167d8166fa2f6a66f53cb3734
ZigbeeApp/Shared/Phone/MainPage/ControlForm/DeviceColorLightDetailCardForm.cs
@@ -1,5 +1,4 @@
using Shared.Common;
using Shared.Phone.Device.DeviceLogic;
using Shared.Phone.UserCenter;
using System;
using System.Collections.Generic;
@@ -32,10 +31,6 @@
        /// </summary>
        private bool isProgressing = false;
        /// <summary>
        /// 能否发送进度值
        /// </summary>
        private bool canSetProgressValue = true;
        /// <summary>
        /// 是否已经初始化了控件(因为底层有可能会刷新整个界面)
        /// </summary>
        private bool hadInitControl = false;
@@ -62,7 +57,7 @@
            if (((LightBase)this.device).OnOffStatus == 1)
            {
                //亮度 XX
                this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uBrightness) + "  " + HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device));
                this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uBrightness) + "  " + HdlDeviceCommonLogic.Current.GetMainPageDeviceStatuText(this.device));
            }
            else
            {
@@ -73,13 +68,14 @@
            //彩灯控件
            this.waveSeekBar = new WaveSeekBar();
            waveSeekBar.Y = Application.GetRealHeight(377);
            waveSeekBar.Width = Application.GetMinRealAverage(271);
            waveSeekBar.Height = Application.GetMinRealAverage(533);
            waveSeekBar.Width = this.GetPictrueRealSize(271);
            waveSeekBar.Height = this.GetPictrueRealSize(533);
            waveSeekBar.Gravity = Gravity.CenterHorizontal;
            waveSeekBar.WavePadding = Application.GetRealWidth(8);
            waveSeekBar.MaxValue = 100;
            waveSeekBar.Progress = (int)(((DimmableLight)this.device).Level * 1.0 / MaxLevel * 100);
            waveSeekBar.CornerRadius = Application.GetRealHeight(58);
            waveSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarColor_Start, ZigbeeColor.Current.GXCWaveSeekBarColor_End);
            frameWhiteBack.AddChidren(waveSeekBar);
            //开关
@@ -98,17 +94,9 @@
            //设置初始状态
            this.IsLightOpen = ((LightBase)this.device).OnOffStatus == 1;
            this.canSetProgressValue = this.IsLightOpen;
            if (IsLightOpen == true)
            {
                btnSwitch.IsSelected = true;
                waveSeekBar.IsClickable = true;
                waveSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarColor_Start, ZigbeeColor.Current.GXCWaveSeekBarColor_End);
            }
            else
            {
                waveSeekBar.IsClickable = false;
                waveSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor);
            }
            //彩灯控件里面的那个显示百分比的控件
@@ -155,7 +143,17 @@
                //变更进度百分比的显示
                btnProgress.Y = progressY + waveSeekBar.NowProgressY;
                btnProgress.Text = value + "%";
                nowProgressValue = value;
                if (Common.Config.Instance.Home.IsVirtually == false)
                {
                    nowProgressValue = value;
                }
                else
                {
                    //如果住宅为虚拟住宅,直接改缓存
                    ((DimmableLight)this.device).Level = value * MaxLevel / 100;
                    //亮度 XX
                    this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uBrightness) + "  " + HdlDeviceCommonLogic.Current.GetMainPageDeviceStatuText(this.device));
                }
            };
            if (this.hadInitControl == true)
@@ -165,14 +163,19 @@
            }
            this.hadInitControl = true;
            if (Config.Instance.Home.IsVirtually == true)
            {
                //虚拟住宅
                return;
            }
            //开一个线程,监视是否滑动的滑动条,每秒检测一次
            HdlThreadLogic.Current.RunThread(() =>
            {
                while (this.Parent != null)
                {
                    System.Threading.Thread.Sleep(1000);
                    if (nowProgressValue == oldProgressValue
                    || this.canSetProgressValue == false)
                    if (nowProgressValue == oldProgressValue)
                    {
                        //值一样
                        continue;
@@ -194,52 +197,54 @@
        /// <param name="isOpen"></param>
        private void SetSwitchCommand(bool isOpen)
        {
            //当按下开关按钮时,不能再发送进度值
            this.canSetProgressValue = false;
            //获取当前亮度
            int level = Convert.ToInt32(this.device.GetType().InvokeMember("Level", System.Reflection.BindingFlags.GetField, null, this.device, null));
            //如果住宅是虚拟住宅
            if (Common.Config.Instance.Home.IsVirtually == true)
            {
                ((LightBase)this.device).OnOffStatus = isOpen == true ? 1 : 0;
                if (((LightBase)this.device).OnOffStatus == 1 && level == 0)
                {
                    //如果当前是打开状态,并且亮度为0的话,则需要变成100%亮度
                    this.device.GetType().InvokeMember("Level", System.Reflection.BindingFlags.SetField, null, this.device, new object[] { 100 });
                }
                //刷新开关状态
                this.RefreshSwitchStatu(isOpen);
                return;
            }
            //检测是否获取网关反馈的结果,如果网关没有回复,则会弹出消息
            this.StartCheckResponeResult(this.listControl, (result) =>
            {
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //没有接收到网关回复
                    if (result == false)
                    bool statu = ((LightBase)this.device).OnOffStatus == 1;
                    //接收到网关回复
                    if (result == true)
                    {
                        bool statu = ((LightBase)this.device).OnOffStatus == 1;
                        //刷新开关状态
                        this.RefreshSwitchStatu(statu);
                        if (statu == true)
                        {
                            //等待结果结束后,彩灯控件可以滑动
                            waveSeekBar.IsClickable = true;
                        }
                        //状态取反
                        listControl[0].IsSelected = statu;
                    }
                });
            });
            //状态取反
            listControl[0].IsSelected = !listControl[0].IsSelected;
            //发送等待的时间内,不能滑动彩灯控件
            waveSeekBar.IsClickable = false;
            if (isOpen == true)
            {
                waveSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarColor_Start, ZigbeeColor.Current.GXCWaveSeekBarColor_End);
            }
            else
            {
                waveSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor);
            }
            if (isOpen == true)
            {
                //打开
                this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uOpen1));
                this.device.SwitchControl(1);
                if (level == 0)
                {
                    //如果当前是打开状态,并且亮度为0的话,则需要变成100%亮度
                    this.device.GetType().InvokeMember("SetLevel", System.Reflection.BindingFlags.InvokeMethod, null, this.device, new object[] { 254 });
                }
                else
                {
                    this.device.SwitchControl(1);
                }
            }
            else
            {
                //关闭
                this.SetStatuText(Language.StringByID(R.MyInternationalizationString.Close));
                this.device.SwitchControl(0);
            }
        }
@@ -256,17 +261,14 @@
        /// <returns></returns>
        public override bool CheckResponeResultStatu(ReceiveComandDiv comandDiv, CommonDevice report)
        {
            if (comandDiv == ReceiveComandDiv.A节点控制反馈)
            {
                return true;
            }
            else if (comandDiv == ReceiveComandDiv.A设备属性上报)
            if (comandDiv == ReceiveComandDiv.A设备属性上报)
            {
                HdlThreadLogic.Current.RunMain(() =>
                {
                    //刷新开关状态
                    this.RefreshSwitchStatu(((LightBase)this.device).OnOffStatus == 1);
                });
                return true;
            }
            return false;
        }
@@ -284,17 +286,18 @@
            if (isOpen == true)
            {
                //亮度是必须要刷新的  亮度 XX
                this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uBrightness) + "  " + HdlDeviceOtherLogic.Current.GetDeviceStatu(this.device));
                if (this.isProgressing == false)
                {
                    //当进度值在手动变更中时,不接收推送
                    waveSeekBar.Progress = (int)(((DimmableLight)this.device).Level * 1.0 / MaxLevel * 100);
                }
                this.SetStatuText(Language.StringByID(R.MyInternationalizationString.uBrightness) + "  " + HdlDeviceCommonLogic.Current.GetMainPageDeviceStatuText(this.device));
            }
            if (isOpen == false && this.IsLightOpen == true)
            {
                //状态不一样,才变更字样:关闭
                this.SetStatuText(Language.StringByID(R.MyInternationalizationString.Close));
            }
            if (this.isProgressing == false)
            {
                //当进度值在手动变更中时,不接收推送
                waveSeekBar.Progress = (int)(((DimmableLight)this.device).Level * 1.0 / MaxLevel * 100);
            }
            if (listControl[0].IsSelected != isOpen)
@@ -303,23 +306,7 @@
                listControl[0].IsSelected = isOpen;
            }
            //状态不一样才变更
            if (this.IsLightOpen != isOpen)
            {
                if (isOpen == true)
                {
                    waveSeekBar.IsClickable = true;
                    waveSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarColor_Start, ZigbeeColor.Current.GXCWaveSeekBarColor_End);
                }
                else
                {
                    waveSeekBar.IsClickable = false;
                    waveSeekBar.SetProgressBarColors(ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor, ZigbeeColor.Current.GXCWaveSeekBarUnSelectedColor);
                }
            }
            this.IsLightOpen = isOpen;
            //回复的结果说,处于打开状态才能发送
            this.canSetProgressValue = this.IsLightOpen;
        }
        #endregion