xm
2021-12-01 6d73bf6e816570291865674bef8bce8972e4de3f
HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs
@@ -29,6 +29,8 @@
        /// </summary>
        FrameLayout sensorListView;
        VerticalScrolViewLayout sensorListContentView;
        /// <summary>
        /// 天气名称文本
        /// </summary>
@@ -153,7 +155,7 @@
                TextColor = CSS_Color.TextualColor,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                Text = "10°C",
                Text = $"{MainPage.cityInfo.highestTemperature}°C",
            };
            topWeatherView.AddChidren(btnTempUpperLimitText);
@@ -176,7 +178,7 @@
                TextColor = CSS_Color.TextualColor,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                Text = "2°C",
                Text = $"{MainPage.cityInfo.lowestTemperature}°C",
            };
            topWeatherView.AddChidren(btnTempLowerLimitText);
@@ -237,17 +239,18 @@
            contentView.AddChidren(btnRoomClickRow);
            #endregion
            sensorListView = new FrameLayout()
            sensorListContentView = new VerticalScrolViewLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(50),
                Height = Application.GetRealHeight(456),
                Height = Application.GetRealHeight(400),
                Radius = (uint)Application.GetRealWidth(12),
                BorderColor = 0x00000000,
                BorderWidth = 0,
            };
            contentView.AddChidren(sensorListView);
            contentView.AddChidren(sensorListContentView);
            sensorListView = new FrameLayout();
            sensorListContentView.AddChidren(sensorListView);
            LoadSenesorList();
@@ -271,22 +274,82 @@
            int index = 0;
            foreach (var sensor in FunctionList.List.GetEnvirSensorsList())
            {
                LoadSensorDiv(sensor, index);
                index++;
                if(SPK.EvironmentSensorList().Contains(sensor.spk))
                {
                    foreach (var seTemp in sensor.attributes)
                    {
                        var newTemp = new Function()
                        {
                            name = sensor.name,
                            sid = sensor.sid,
                            deviceId = sensor.deviceId,
                            roomIds = sensor.roomIds,
                            attributes = new List<FunctionAttributes> { new FunctionAttributes { key = "value", state = seTemp.state, curValue = seTemp.curValue }
                            , new FunctionAttributes {key = "spk",state = seTemp.key,curValue = seTemp.key }
                            //,new FunctionAttributes { key = "spk"}
                        }
                        };
                        switch (seTemp.key)
                        {
                            case "co2":
                                newTemp.spk = SPK.SensorCO2;
                                newTemp.SetAttrState("spk", "co2");
                                break;
                            case "pm25":
                                newTemp.spk = SPK.SensorPm25;
                                newTemp.SetAttrState("spk", "pm25");
                                break;
                            case "humidity":
                                newTemp.spk = SPK.SensorHumidity;
                                newTemp.SetAttrState("spk", "humidity");
                                break;
                            case "temperature":
                                newTemp.spk = SPK.SensorTemperature;
                                newTemp.SetAttrState("spk", "temperature");
                                break;
                            case "tvoc":
                                newTemp.spk = SPK.SensorTVOC;
                                newTemp.SetAttrState("spk", "tvoc");
                                break;
                            default:
                                continue;
                                break;
                        }
                        if (room.roomId == "" || sensor.roomIds.Contains(room.roomId))
                        {
                            LoadSensorDiv(newTemp, index);
                            index++;
                        }
                    }
                }
                else
                {
                    if (room.roomId == "" || sensor.roomIds.Contains(room.roomId))
                    {
                        LoadSensorDiv(sensor, index);
                        index++;
                    }
                }
                new System.Threading.Thread(() =>
                {
                    Control.Ins.SendReadCommand(sensor);
                })
                { IsBackground = true }.Start();
            }
            sensorListView.Height = Application.GetRealWidth(124 * (index + 1) / 2);
        }
        /// <summary>
        /// 加载传感器列表
        /// </summary>
        void LoadSensorDiv(Function sensor, int index)
        void LoadSensorDiv(Function sensor,int index)
        {
            var levelColorList = sensorTemp.GetLevelColorList(sensor.spk);
            var levelTextList = sensorTemp.GetLevelTextList(sensor.spk);
            if (room.roomId == "" || sensor.roomIds.Contains(room.roomId))
            {
                var sensorTag = sensor.sid;
                var sensorTag = sensor.spk + sensor.sid + sensor.deviceId;
                FrameLayout sensorView = new FrameLayout()
                {
                    X = Application.GetRealWidth(7),
@@ -319,6 +382,10 @@
                    case SPK.SensorTemperature:
                        imagePath = "FunctionIcon/EnvirSensor/TempBg.png";
                        iconPath = "FunctionIcon/EnvirSensor/TempIcon.png";
                        break;
                    case SPK.SensorHcho:
                        imagePath = "FunctionIcon/EnvirSensor/HchoBg.png";
                        iconPath = "FunctionIcon/EnvirSensor/HchoIcon.png";
                        break;
                }
                sensorView.BackgroundImagePath = imagePath;
@@ -370,12 +437,13 @@
                    Width = Application.GetRealWidth(100),
                    Height = Application.GetRealWidth(32),
                    TextAlignment = TextAlignment.CenterLeft,
                    TextColor = CSS_Color.FirstLevelTitleColor,//levelColorList[sensorTemp.GetCurLevel(sensor) - 1],
                    TextColor = sensorTemp.GetLevelColorList(sensor.spk)[sensorTemp.GetCurLevel(sensor) - 1],
                    TextSize = CSS_FontSize.SubheadingFontSize,
                    TextID = levelTextList[sensorTemp.GetCurLevel(sensor) - 1],
                    Tag = "SensorLevel",
                };
                sensorView.AddChidren(btnLevel);
                btnLevel.MouseUpEventHandler = (sender, e) =>
                {
                    #region 
@@ -410,18 +478,7 @@
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                    #endregion
                };
                //btnLevel.MouseUpEventHandler = (sender, e) =>
                //{
                //    LoadInfo(sensor);
                //};
                new System.Threading.Thread(() =>
                {
                    Control.Ins.SendReadCommand(sensor);
                })
                { IsBackground = true }.Start();
            }
        }
@@ -473,13 +530,16 @@
                    btnTitle.Text = Language.StringByID(StringId.Temp) + "(°C)";
                    break;
                case SPK.SensorTVOC:
                    btnTitle.Text = "TVOC(PPM)";
                    btnTitle.Text = "TVOC(PPB)";
                    break;
                case SPK.SensorCO2:
                    btnTitle.Text = "CO2(PPM)";
                    break;
                case SPK.SensorHumidity:
                    btnTitle.Text = Language.StringByID(StringId.Humidity) + "(%)";
                    break;
                case SPK.SensorHcho:
                    btnTitle.Text = Language.StringByID(StringId.Formaldehyde) +"(mg/m3)";
                    break;
            }
@@ -711,46 +771,117 @@
        {
            Application.RunOnMainThread(() =>
            {
                if (bodyView != null)
                try
                {
                    for (int i = 0; i < bodyView.sensorListView.ChildrenCount; i++)
                    if (bodyView != null)
                    {
                        var sensorTag = updateTemp.sid;
                        var view = bodyView.sensorListView.GetChildren(i);
                        if (view.GetType() == typeof(FrameLayout))
                        if (SPK.EvironmentSensorList().Contains(updateTemp.spk ))
                        {
                            if (view.Tag.ToString() != sensorTag)
                            foreach (var seTemp in updateTemp.attributes)
                            {
                                continue;
                            }
                            for (int j = 0; j < (view as FrameLayout).ChildrenCount; j++)
                            {
                                var btn = (view as FrameLayout).GetChildren(j);
                                if (btn.GetType() == typeof(Button))
                                var newTemp = new Function()
                                {
                                    if (btn.Tag != null)
                                    name = updateTemp.name,
                                    sid = updateTemp.sid,
                                    deviceId = updateTemp.deviceId,
                                    attributes = new List<FunctionAttributes> { new FunctionAttributes { key = "value", state = seTemp.state ,curValue = seTemp.curValue} },
                                };
                                switch (seTemp.key)
                                {
                                    case "co2":
                                        newTemp.spk = SPK.SensorCO2;
                                        break;
                                    case "pm25":
                                        newTemp.spk = SPK.SensorPm25;
                                        break;
                                    case "humidity":
                                        newTemp.spk = SPK.SensorHumidity;
                                        break;
                                    case "temperature":
                                        newTemp.spk = SPK.SensorTemperature;
                                        break;
                                    case "tvoc":
                                        newTemp.spk = SPK.SensorTVOC;
                                        break;
                                    case "hcho":
                                        newTemp.spk = SPK.SensorHcho;
                                        break;
                                }
                                if(!string.IsNullOrEmpty(newTemp.spk))
                                {
                                    LoadEvent_UpdataStatus(newTemp);
                                }
                            }
                        }
                        for (int i = 0; i < bodyView.sensorListView.ChildrenCount; i++)
                        {
                            var sensorTag = updateTemp.spk + updateTemp.sid + updateTemp.deviceId;
                            var view = bodyView.sensorListView.GetChildren(i);
                            if (view.GetType() == typeof(FrameLayout))
                            {
                                if (view.Tag.ToString() != sensorTag)
                                {
                                    continue;
                                }
                                for (int j = 0; j < (view as FrameLayout).ChildrenCount; j++)
                                {
                                    var btn = (view as FrameLayout).GetChildren(j);
                                    if (btn.GetType() == typeof(Button))
                                    {
                                        var tag = btn.Tag.ToString();
                                        if (tag == "SensorValues")
                                        if (btn.Tag != null)
                                        {
                                            (btn as Button).Text = updateTemp.GetAttrState(FunctionAttributeKey.Value);
                                        }
                                        else if (tag == "SensorLevel")
                                        {
                                            (btn as Button).TextID = bodyView.sensorTemp.GetLevelTextList(updateTemp.spk)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
                                            (btn as Button).TextColor = bodyView.sensorTemp.GetLevelColorList(updateTemp.spk)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
                                            FunctionAttributes attr = updateTemp.GetAttribute(FunctionAttributeKey.Value);
                                            if(attr == null)
                                            {
                                                switch(updateTemp.spk)
                                                {
                                                    case SPK.SensorCO2:
                                                        attr = updateTemp.GetAttribute(FunctionAttributeKey.Co2);
                                                        break;
                                                    case SPK.SensorTemperature:
                                                        attr = updateTemp.GetAttribute(FunctionAttributeKey.Temperature);
                                                        break;
                                                    case SPK.SensorTVOC:
                                                        attr = updateTemp.GetAttribute(FunctionAttributeKey.Tvoc);
                                                        break;
                                                    case SPK.SensorPm25:
                                                        attr = updateTemp.GetAttribute(FunctionAttributeKey.Pm25);
                                                        break;
                                                    case SPK.SensorHcho:
                                                        attr = updateTemp.GetAttribute(FunctionAttributeKey.Hcho);
                                                        break;
                                                    case SPK.SensorHumidity:
                                                        attr = updateTemp.GetAttribute(FunctionAttributeKey.Humidity);
                                                        break;
                                                }
                                            }
                                            var tag = btn.Tag.ToString();
                                            if (tag == "SensorValues")
                                            {
                                                (btn as Button).Text = attr.state;// updateTemp.GetAttrState(FunctionAttributeKey.Value);
                                            }
                                            else if (tag == "SensorLevel")
                                            {
                                                (btn as Button).TextID = bodyView.sensorTemp.GetLevelTextList(updateTemp.spk)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
                                                (btn as Button).TextColor = bodyView.sensorTemp.GetLevelColorList(updateTemp.spk)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
                                            }
                                        }
                                    }
                                }
                                else if (btn.GetType() == typeof(ArcSeekBar))
                                {
                                    (btn as ArcSeekBar).ProgressBarColor = bodyView.sensorTemp.GetLevelColorList(updateTemp.spk)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
                                    else if (btn.GetType() == typeof(ArcSeekBar))
                                    {
                                        (btn as ArcSeekBar).ProgressBarColor = bodyView.sensorTemp.GetLevelColorList(updateTemp.spk)[bodyView.sensorTemp.GetCurLevel(updateTemp) - 1];
                                    (btn as ArcSeekBar).Progress = (96 / bodyView.sensorTemp.GetLevelColorList(updateTemp.spk).Count) * bodyView.sensorTemp.GetCurLevel(updateTemp);
                                        (btn as ArcSeekBar).Progress = (96 / bodyView.sensorTemp.GetLevelColorList(updateTemp.spk).Count) * bodyView.sensorTemp.GetCurLevel(updateTemp);
                                    }
                                }
                            }
                        }
                    }
                }catch(Exception ex )
                {
                    MainPage.Log($"更新环境传感器界面异常:{ex.Message}");
                }
            });
        }