wxr
2024-05-20 efcffde735fa65ae34bae0bcc86313b74ed0e36c
HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Text;
using HDL_ON.DAL;
using HDL_ON.DAL.Server;
using HDL_ON.DriverLayer;
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
@@ -11,7 +12,11 @@
namespace HDL_ON.UI
{
    public partial class HomePage : VerticalRefreshLayout
#if __IOS__
    public partial class HomePage :  VerticalRefreshLayout
#else
    public partial class HomePage : VerticalScrolViewLayout
#endif
    {
        #region 控件列表
@@ -25,7 +30,7 @@
        /// <summary>
        /// 连接状态提示
        /// </summary>
        Button btnLinkStateTip;
        FrameLayout divLinkStateTip;
        /// <summary>
        /// 安防状态图标
        /// </summary>
@@ -65,15 +70,20 @@
        /// <summary>
        /// 切换显示功能类型区域
        /// </summary>
        FrameLayout changeView;
        /// <summary>
        /// 切换显示设备功能按钮
        /// </summary>
        Button btnChangeFunction;
        /// <summary>
        /// 切换显示场景功能按钮
        /// </summary>
        Button btnChangeScene;
        FrameLayout changeBaseView;
        //FrameLayout changeView;
        ///// <summary>
        ///// 切换显示设备功能按钮
        ///// </summary>
        //Button btnChangeFunction;
        ///// <summary>
        ///// 切换显示场景功能按钮
        ///// </summary>
        //Button btnChangeScene;
        ///// <summary>
        ///// 切换显示场组控按钮
        ///// </summary>
        //Button btnChangeGroupControl;
        /// <summary>
        /// 功能显示区域
        /// </summary>
@@ -87,22 +97,29 @@
        /// </summary>
        VerticalScrolViewLayout sceneFunctionView;
        /// <summary>
        /// 组控控制区域
        /// </summary>
        VerticalScrolViewLayout gcFunctionView;
        /// <summary>
        /// 功能区域集合
        /// </summary>
        List<FrameLayout> functionViews;
        #endregion
#endregion
        #region 区域变量
#region 区域变量
        /// <summary>
        /// 当前显示对控制类型是否是设备功能控制
        /// 0 功能
        /// 1 场景
        /// 2 群控
        /// </summary>
        bool CurShowTypeIsFunction = true;
        #endregion
        int CurShowTypeContent = 0;
#endregion
        #region 报警信息
        Button btnMsgBg;
        Button btnMsgTime;
        Button btnMsg;
#region 报警信息
        //Button btnMsgBg;
        //Button btnMsgTime;
        //Button btnMsg;
        Button btnMsgIcon;
        #endregion
@@ -112,6 +129,11 @@
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            this.VerticalScrollBarEnabled = false;
#if DEBUG
            DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl = true;
#endif
#if __IOS__
            //自动偏移取消
            if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
@@ -132,27 +154,44 @@
            MainPage.CurPageIndex = 0;
            try
            {
                this.BeginHeaderRefreshingAction = () =>
                bodyView.RemoveAll();
#if __IOS__
                bodyView.BeginHeaderRefreshingAction = () =>
                {
                    this.EndHeaderRefreshing();
                    bodyView.EndHeaderRefreshing();
                    Common.ApiUtlis.Ins.DownloadData();
                    LoadContentView();
                    if(!CurShowTypeIsFunction)
                    {
                        contentView.PageIndex = 1;
                    }
                    contentView.PageIndex = CurShowTypeContent;
                };
                #region topView
                bodyView.RemoveAll();
                topView = new FrameLayout()
                {
                    Height = Application.GetRealHeight(216),
                    Height = Application.GetRealHeight(113),//216),
                    BackgroundImagePath = DB_ResidenceData.Instance.residenceImage,
                };
                bodyView.AddChidren(topView);
#else
                VerticalRefreshLayout refreshLayout = new VerticalRefreshLayout()
                {
                    Height = Application.GetRealHeight(113),//216),
                    BackgroundImagePath = DB_ResidenceData.Instance.residenceImage,
                };
                bodyView.AddChidren(refreshLayout);
                refreshLayout.BeginHeaderRefreshingAction = () =>
                {
                    refreshLayout.EndHeaderRefreshing();
                    Common.ApiUtlis.Ins.DownloadData();
                    LoadContentView();
                    contentView.PageIndex = CurShowTypeContent;
                };
                topView = new FrameLayout()
                {
                    Height = Application.GetRealHeight(113),//216),
                };
                refreshLayout.AddChidren(topView);
#endif
                #region topView
                Button btnTop;
                btnTop = new Button()
@@ -174,59 +213,35 @@
                    IsBold = true
                };
                topView.AddChidren(btnResidenceName);
                btnLinkStateTip = new Button()
                divLinkStateTip = new FrameLayout()
                {
                    //X = Application.GetRealWidth(16),
                    Y = btnResidenceName.Bottom,
                    Height = Application.GetRealWidth(14),
                    BackgroundColor = CSS_Color.LinkTipFail,
                    TextAlignment = TextAlignment.Center,
                    Y = Application.GetRealHeight(113) - Application.GetRealWidth(24),
                    Height = Application.GetRealWidth(24),
                    BackgroundColor = 0xFFFF4747,
                    Visible = false,
                };
                topView.AddChidren(divLinkStateTip);
                Button btnLinkStateIcon = new Button()
                {
                    X = Application.GetRealWidth(16),
                    Gravity = Gravity.CenterVertical,
                    Width = Application.GetRealWidth(20),
                    Height = Application.GetRealWidth(20),
                    UnSelectedImagePath = "Collection/GatewayOnlineTipIcon.png"
                };
                divLinkStateTip.AddChidren(btnLinkStateIcon);
                var btnLinkStateTip = new Button()
                {
                    X = btnLinkStateIcon.Right + Application.GetRealWidth(4),
                    TextAlignment = TextAlignment.CenterLeft,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextID = StringId.NetworkAnomaly,
                };
                topView.AddChidren(btnLinkStateTip);
                //btnLinkStateTip.Width = btnLinkStateTip.GetTextWidth();
                divLinkStateTip.AddChidren(btnLinkStateTip);
                //更新链接状态icon颜色
                int ddd = 0;
#if DEBUG
                btnResidenceName.MouseUpEventHandler = (sender, e) =>
                {
                        var imageUrl = ImageUtlis.Current.GetSceneDefaultIconList();
                    if (imageUrl != null)
                    {
                    }
                    //if (UserInfo.Current.VerOpenDoorPw || string.IsNullOrEmpty(UserInfo.Current.doorPasswordString))
                    //{
                    //    var page = new DoorLockUnlockPage(new Function());
                    //    MainPage.BasePageView.AddChidren(page);
                    //    page.LoadView();
                    //    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                    //}
                    //else
                    //{
                    //    Control.Ins.OneKeyUnlocking(new Function(), UserInfo.Current.doorPasswordString);
                    //}
                //ddd++;
                //    Function function_online = FunctionList.List.GetLightList().Find((obj) => obj.sid == "0001017DB92D2602020100010101");
                //    if(ddd%2 == 0)
                //    {
                //        function_online.online = true;
                //    }
                //    else
                //    {
                //        function_online.online = false;
                //    }
                //    HomePage.LoadEvent_RefreshDevcieOnline(function_online);
                };
#endif
                environmentalView = new FrameLayout()
                {
                    Y = Application.GetRealHeight(1) + btnResidenceName.Bottom,
@@ -235,7 +250,7 @@
                topView.AddChidren(environmentalView);
                CheckLinkStatus();//2020-12-22
                #region 环境数据
#region 环境数据
                var tempSensorList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => obj.spk == SPK.SensorTemperature);
                var humiSensorList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => obj.spk == SPK.SensorHumidity);
                var enviList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => SPK.EvironmentSensorList().Contains(obj.spk));
@@ -251,7 +266,7 @@
                            deviceId = enviTemp.deviceId,
                            attributes = new List<FunctionAttributes> { new FunctionAttributes { key = "value", state = humiAttr.state, curValue = humiAttr.curValue } },
                        };
                        humiSensorList.Add(newTemp);
                        humiSensorList.Add(newTemp);//020103CF594C3E00051F0001051F//   1650546588519424001
                    }
                    var tempAttr = enviTemp.attributes.Find((obj) => obj.key == "temperature");
                    if (tempAttr != null)
@@ -263,7 +278,7 @@
                            deviceId = enviTemp.deviceId,
                            attributes = new List<FunctionAttributes> { new FunctionAttributes { key = "value", state = tempAttr.state, curValue = tempAttr.curValue } },
                        };
                        tempSensorList.Add(newTemp);
                        tempSensorList.Add(newTemp);//020103CF594C3E00051F0001051F
                    }
                }
@@ -321,7 +336,10 @@
                    foreach (var temp in tempSensorList)
                    {
                        double tempValue = 0;
                        double.TryParse(temp.GetAttrState("temperature"), out tempValue);
                        if (temp.GetAttribute("temperature") != null)
                            double.TryParse(temp.GetAttrState("temperature"), out tempValue);
                        else
                            double.TryParse(temp.GetAttrState("value"), out tempValue);
                        if (tempValue > 0)
                        {
                            tempTotalValues += tempValue;
@@ -375,7 +393,10 @@
                    foreach (var humi in humiSensorList)
                    {
                        double humiValue = 0;
                        double.TryParse(humi.GetAttrState("humidity"), out humiValue);
                        if (humi.GetAttribute("temperature") != null)
                            double.TryParse(humi.GetAttrState("humidity"), out humiValue);
                        else
                            double.TryParse(humi.GetAttrState("value"), out humiValue);
                        if (humiValue > 0)
                        {
                            humiTotalValues += humiValue;
@@ -412,6 +433,7 @@
                btnPm25Values.Width = btnPm25Values.GetTextWidth();
                environmentalView.AddChidren(btnPm25Values);
                #endregion
                btnSecurityStatus = new Button()
                {
@@ -452,83 +474,132 @@
                }
                #region msg
                FrameLayout msgView;
                msgView = new FrameLayout()
                {
                    Y = Application.GetRealHeight(164),
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(343),
                    Height = Application.GetRealHeight(28),
                };
                topView.AddChidren(msgView);
#region msg
                //FrameLayout msgView;
                //msgView = new FrameLayout()
                //{
                //    Y = Application.GetRealHeight(164),
                //    Gravity = Gravity.CenterHorizontal,
                //    Width = Application.GetRealWidth(343),
                //    Height = Application.GetRealHeight(28),
                //};
                //topView.AddChidren(msgView);
                btnMsgBg = new Button()
                {
                    BackgroundColor = CSS_Color.MainColor,//0x3F4484F4,
                    Alpha = 0.4f,
                };
                msgView.AddChidren(btnMsgBg);
                //btnMsgBg = new Button()
                //{
                //    BackgroundColor = CSS_Color.MainColor,//0x3F4484F4,
                //    Alpha = 0.4f,
                //};
                //msgView.AddChidren(btnMsgBg);
                btnMsgIcon = new Button()
                {
                    X = Application.GetRealWidth(12),
                    Gravity = Gravity.CenterVertical,
                    X = Application.GetRealWidth(290),
                    Y = Application.GetRealHeight(35),
                    Width = Application.GetMinRealAverage(24),
                    Height = Application.GetMinRealAverage(24),
                    UnSelectedImagePath = "Collection/MsgIcon.png",
                    SelectedImagePath = "Collection/MsgIconTip.png",
                };
                msgView.AddChidren(btnMsgIcon);
                topView.AddChidren(btnMsgIcon);
                btnMsg = new Button()
                {
                    X = Application.GetRealWidth(10) + btnMsgIcon.Right,
                    Width = Application.GetRealWidth(240),
                    Text = "...",
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    TextAlignment = TextAlignment.CenterLeft,
                };
                msgView.AddChidren(btnMsg);
                //btnMsg = new Button()
                //{
                //    X = Application.GetRealWidth(10) + btnMsgIcon.Right,
                //    Width = Application.GetRealWidth(240),
                //    Text = "...",
                //    TextColor = CSS_Color.MainBackgroundColor,
                //    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                //    TextAlignment = TextAlignment.CenterLeft,
                //};
                //msgView.AddChidren(btnMsg);
                btnMsgTime = new Button()
                {
                    X = Application.GetRealWidth(299),
                    Width = Application.GetRealWidth(44),
                    Text = "00:00",
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    TextAlignment = TextAlignment.CenterLeft,
                };
                msgView.AddChidren(btnMsgTime);
                //btnMsgTime = new Button()
                //{
                //    X = Application.GetRealWidth(299),
                //    Width = Application.GetRealWidth(44),
                //    Text = "00:00",
                //    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                //    TextAlignment = TextAlignment.CenterLeft,
                //};
                //msgView.AddChidren(btnMsgTime);
                LoadEvent_GotoMessageCenterPage();
                #endregion
#endregion
                #endregion
#endregion
                #region 功能场景切换
#region 功能场景切换
                bodyView.AddChidren(new Button() { Height = Application.GetRealHeight(20), BackgroundColor = 0x00000000 });
                changeView = new FrameLayout()
                loadNavView();
                #endregion
                #region ContextView
                functionViews = new List<FrameLayout>();
                LoadContentView();
                #endregion
            }
            catch (Exception ex)
            {
                MainPage.Log($"HomePage LoadPage Error : {ex.Message}");
            }
        }
        void loadNavView()
        {
            if(changeBaseView == null)
            {
                changeBaseView = new FrameLayout()
                {
                    Gravity = Gravity.CenterHorizontal,
                    Height = Application.GetRealHeight(62),
                };
                bodyView.AddChidren(changeBaseView);
            }
            else
            {
                changeBaseView.RemoveAll();
            }
            if (contentView == null)
            {
                contentView = new PageLayout()
                {
                    Height = Application.GetRealHeight(310 + 30 + 10 + 100), //20为超出部分
                    IsShowPoint = false,
                };
                bodyView.AddChidren(contentView);
            }
            if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl && FunctionList.List.groupControls.Count > 0)
            {
                var changeView = new FrameLayout()
                {
                    //Y = Application.GetRealHeight(20) + topView.Bottom,
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(230),
                    Width = Application.GetRealWidth(334),
                    Height = Application.GetRealHeight(62),
                    BackgroundImagePath = "Collection/ChangeViewbg.png",
                };
                bodyView.AddChidren(changeView);
                changeBaseView.AddChidren(changeView);
                btnChangeFunction = new Button()
                var btnChangeFunction = new Button()
                {
                    X = Application.GetRealWidth(10),
                    Width = Application.GetRealWidth(114-10),
                    Width = Application.GetRealWidth(114 - 10),
                    TextID = StringId.Functions,
                    SelectedTextColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.PromptingColor1,
@@ -549,10 +620,10 @@
                };
                changeView.AddChidren(btnLine);
                btnChangeScene = new Button()
                var btnChangeScene = new Button()
                {
                    X = btnLine.Right,
                    Width = Application.GetRealWidth(114-10),
                    Width = Application.GetRealWidth(114 - 10),
                    TextID = StringId.Scenes,
                    SelectedTextColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.PromptingColor1,
@@ -560,315 +631,228 @@
                    TextAlignment = TextAlignment.Center,
                };
                changeView.AddChidren(btnChangeScene);
                #endregion
                #region ContextView
                contentView = new PageLayout()
                Button btnLine2 = new Button()
                {
                    //Y = changeView.Bottom,
                    Height = Application.GetRealHeight(310 + 30 + 10), //20为超出部分
                    IsShowPoint = false,
                    X = btnChangeScene.Right,
                    Gravity = Gravity.CenterVertical,
                    Width = Application.GetRealWidth(1),
                    Height = Application.GetRealHeight(14),
                    BackgroundColor = CSS_Color.PromptingColor1,
                };
                bodyView.AddChidren(contentView);
                changeView.AddChidren(btnLine2);
                functionViews = new List<FrameLayout>();
                LoadContentView();
                #endregion
            }
            catch (Exception ex)
            {
                MainPage.Log($"HomePage LoadPage Error : {ex.Message}");
            }
#if DEBUG
            FunctionList.List.Functions.Add(new Function
            {
                name = "测试梦幻窗帘",
                spk = SPK.CurtainDream,
                sid = "1234577",
                attributes = new List<FunctionAttributes> {
                    new FunctionAttributes(){ key = "on_off",curValue= "on",state = "on" },
                    new FunctionAttributes(){ key = "percent",curValue= "100",state = "100" },
                    new FunctionAttributes(){ key = "angle",curValue= "0",state = "0" },
                }
            });
            //FunctionList.List.Functions.Add(new Function
            //{
            //    name = "测试毫米波传感器",
            //    spk = SPK.SenesorMegahealth,
            //    attributes = new List<FunctionAttributes>
            //    {
            //        new FunctionAttributes(){ key = "enable",curValue = "true",state = "true" },
            //        new FunctionAttributes(){ key = "people_num",curValue = "0",state = "0" },
            //        new FunctionAttributes(){ key = "people_id",curValue = "1",state = "1" },
            //        new FunctionAttributes(){ key = "target_status",curValue = "0",state = "0" },//0空,1走,2跑,3坐,4跌倒,5站
            //        new FunctionAttributes(){ key = "people_status",curValue = "false",state = "false" },//状态  有人无人
            //        //new FunctionAttributes(){ key = "",curValue = "",state = "" },
            //        //new FunctionAttributes(){ key = "",curValue = "",state = "" },
            //        //new FunctionAttributes(){ key = "",curValue = "",state = "" },
            //    }
            //});
            FunctionList.List.Functions.Add(new Function
            {
                name = "测试温控器",
                spk = SPK.HvacCac,
                attributes = new List<FunctionAttributes>
                var btnChangeGroupControl = new Button()
                {
                    new FunctionAttributes(){ key = "on_off",curValue = "on",state = "on" },
                    new FunctionAttributes(){ key = "cac_valve",curValue = "on",state = "on" },//毛细阀
                    new FunctionAttributes(){ key = "fh_valve",curValue = "on",state = "on" },//地暖阀
                    new FunctionAttributes(){ key = "mode",curValue = "cool",state = "cool", value = new List<string>{ "cool","heat"} },
                    new FunctionAttributes(){ key = "set_temp",curValue = "20",state = "20",min = 16,max = 30 },
                    new FunctionAttributes(){ key = "room_temp",curValue = "20",state = "20" },
                    new FunctionAttributes(){ key = "dew_point_temp",curValue = "20",state = "20" },//露点温度
                    new FunctionAttributes(){ key = "surface_temp",curValue = "20",state = "20" },//表面温度
                    new FunctionAttributes(){ key = "energy_saving",curValue = "true",state = "true" },//节能
                    new FunctionAttributes(){ key = "room_humidity",curValue = "66",state = "66" },
                    //new FunctionAttributes(){ key = "",curValue = "",state = "" },
                }
            });
            //FunctionList.List.Functions.Add(new Function
            //{
            //    name = "门锁",
            //    spk = SPK.DoorLock,
            //    sid = "12345",
            //    attributes = new List<FunctionAttributes> {
            //        new FunctionAttributes(){ key = "door_status",curValue= "open",state = "open" },
            //        new FunctionAttributes(){ key = "normal_open",curValue= "true",state = "true" },
            //        new FunctionAttributes(){ key = "normal_open_countdown",curValue= "10",state = "10" },
            //        new FunctionAttributes(){ key = "local_id",curValue= "10",state = "10" },
            //        new FunctionAttributes(){ key = "door_volume",curValue= "10",state = "10" },
            //        new FunctionAttributes(){ key = "door_volume_step",curValue= "up",state = "up" },
            //        new FunctionAttributes(){ key = "battery_value",curValue= "100",state = "100" },
            //        new FunctionAttributes(){ key = "battery_percentage",curValue= "100",state = "100" },
            //        new FunctionAttributes(){ key = "battery_state",curValue= "high",state = "high" },
            //    }
            //});
            //FunctionList.List.Functions.Add(new Function
            //{
            //    name = "门锁1",
            //    spk = SPK.DoorLock,
            //    sid = "123",
            //    attributes = new List<FunctionAttributes> {
            //        new FunctionAttributes(){ key = "door_status",curValue= "open",state = "open" },
            //        new FunctionAttributes(){ key = "normal_open",curValue= "true",state = "true" },
            //        new FunctionAttributes(){ key = "normal_open_countdown",curValue= "10",state = "10" },
            //        new FunctionAttributes(){ key = "local_id",curValue= "10",state = "10" },
            //        new FunctionAttributes(){ key = "door_volume",curValue= "10",state = "10" },
            //        new FunctionAttributes(){ key = "door_volume_step",curValue= "up",state = "up" },
            //        new FunctionAttributes(){ key = "battery_value",curValue= "100",state = "100" },
            //        new FunctionAttributes(){ key = "battery_percentage",curValue= "100",state = "100" },
            //        new FunctionAttributes(){ key = "battery_state",curValue= "high",state = "high" },
            //    }
            //});
            //FunctionList.List.Functions.Add(new Function()
            //{
            //    spk = SPK.PanelSocket,
            //    name = "面板插座",
            //    attributes = new List<FunctionAttributes>
            //    {
            //        new FunctionAttributes(){ key = "on_off",curValue= "on",state = "on" },
            //        new FunctionAttributes(){ key = "on_off_usb",curValue= "on",state = "on" },
            //        new FunctionAttributes(){ key = "active_power",curValue= "220",state = "220" },
            //        new FunctionAttributes(){ key = "voltage",curValue= "5",state = "5" },
            //        new FunctionAttributes(){ key = "current",curValue= "110",state = "110" },
            //        new FunctionAttributes(){ key = "total_electricity",curValue= "123.33",state = "123.33" },
            //    }
            //});
            //FunctionList.List.Functions.Add(new Function()
            //{
            //    spk = SPK.SensorDryContact,
            //    name = "干接点",
            //    attributes = new List<FunctionAttributes>()
            //    {
            //        new FunctionAttributes(){ key = "status",curValue= "on",state = "on" },
            //    },
            //});
            //FunctionList.List.Functions.Add(new Function()
            //{
            //    spk = SPK.SensorPm25,
            //    name = "测试Pm2.5",
            //    attributes = new List<FunctionAttributes>()
            //    {
            //        new FunctionAttributes(){ key = "pm25",curValue= "70",state = "70" },
            //    },
            //    attrKeyConfigs = new List<AttrKeyConfig>()
            //    {
            //        new AttrKeyConfig (){
            //            key = "pm2.5",
            //            type = "interval" ,
            //            unit = "ug/m²",
            //            configs = new List<AttrKeyInfo>(){
            //               new AttrKeyInfo(){ start = "0",end = "75",color = "0xFFADE764", desc = "良好"},
            //               new AttrKeyInfo(){ start = "76",end = "150",color = "0xFFFFD154",desc = "轻/中度污染"},
            //               new AttrKeyInfo(){ start = "151",end = "500",color = "0xFFFF9D54",desc = "重度/严重污染"},
            //            }
            //        }
            //    },
            //});
            //FunctionList.List.Functions.Add(new Function()
            //{
            //    spk = SPK.SensorHelp,
            //    name = "测试紧急求助按钮",
            //    attributes = new List<FunctionAttributes>()
            //    {
            //        new FunctionAttributes(){ key = "status",curValue= "on",state = "on" },
            //        new FunctionAttributes(){ key = "alarm_status",curValue= "alarm",state = "alarm" },
            //        new FunctionAttributes(){ key = "battery_value",curValue= "200",state = "200" },
            //        new FunctionAttributes(){ key = "battery_percentage",curValue= "10",state = "10" },
            //        new FunctionAttributes(){ key = "battery_state",curValue= "low",state = "low" },
            //    },
            //});
            //FunctionList.List.Functions.Add(new Function()
            //{
            //    spk = SPK.AirSwitch,
            //    name = "智能空开",
            //    attributes = new List<FunctionAttributes>()
            //    {
            //        new FunctionAttributes(){ key = "on_off",curValue= "on",state = "on" },
            //    },
            //});
            //FunctionList.List.Functions.Add(new Function()
            //{
            //    spk = SPK.AirFreshStandard,
            //    name = "测试新风",
            //    attributes = new List<FunctionAttributes>()
            //    {
            //        new FunctionAttributes(){ key = "on_off",curValue= "on",state = "on" },
            //        new FunctionAttributes(){ key = "fan",curValue= "low",state = "low" ,value = new List<string>(){ "high", "medium", "low" } },
            //    },
            //});
                    X = btnLine2.Right,
                    Width = Application.GetRealWidth(114 - 10),
                    TextID = StringId.GroupControl,
                    SelectedTextColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.PromptingColor1,
                    TextSize = CSS_FontSize.TextFontSize,
                    TextAlignment = TextAlignment.Center,
                };
                changeView.AddChidren(btnChangeGroupControl);
            //FunctionList.List.Functions.Add(new Function()
            //{
            //    spk = SPK.HvacAirFreshJinmao,
            //    name = "测试金茂新风",
            //    attributes = new List<FunctionAttributes>()
            //    {
            //        new FunctionAttributes(){ key = "on_off",curValue= "on",state = "on" },
            //        new FunctionAttributes(){ key = "mode",curValue= "humidification",state = "humidification" ,value = new List<string>(){ "humidification", "fan" } },
            //        new FunctionAttributes(){ key = "energy",curValue= "true",state = "true" ,value = new List<string>(){ "true", "false" } },
            //        new FunctionAttributes(){ key = "fan",curValue= "level_1",state = "level_1" ,value = new List<string>(){ "level_1", "level_2", "level_3","auto" } },
            //        new FunctionAttributes(){ key = "humidity",curValue= "0",state = "0" ,value = new List<string>(){  },min = 0,max = 100 },
            //        new FunctionAttributes(){ key = "indoor_temp",curValue= "26",state = "26" ,value = new List<string>(){  },min = 0,max = 100 },
            //        new FunctionAttributes(){ key = "indoor_humidity",curValue= "0",state = "0" ,value = new List<string>(){  },min = 0,max = 100 },
            //        new FunctionAttributes(){ key = "filter_remain",curValue= "0",state = "0" ,value = new List<string>(){  },min = 0,max = 100 },
            //        new FunctionAttributes(){ key = "filter_timeout",curValue= "false",state = "false" ,value = new List<string>(){ "true", "false"  }},
            //    },
            //});
            //FunctionList.List.Functions.Add(new Function()
            //{
            //    spk = SPK.SensorGas,
            //    name = "燃气传感器",
            //    attributes = new List<FunctionAttributes>()
            //    {
            //        new FunctionAttributes(){ key = "enable",curValue= "true",state = "true" ,value = new List<string>(){ "true", "false" } },
            //        new FunctionAttributes(){ key = "status",curValue= "normal",state = "normal" ,value = new List<string>(){ "alarm", "normal" } },
            //    },
            //});
                btnChangeGroupControl.MouseUpEventHandler = (sender, e) => {
                    btnChangeFunction.IsSelected = false;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeFunction.IsBold = false;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                    btnChangeGroupControl.IsSelected = true;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeGroupControl.IsBold = true;
                    CurShowTypeContent = 2;
                    contentView.PageIndex = 2;
                };
            //FunctionList.List.Functions.Add(new Function() { spk = SPK.PjtIr, name = "测试投影仪",
            //                            attributes = new List<FunctionAttributes>() {
            //                                new FunctionAttributes(){ key = "on_off",curValue= "on",state = "on" },
            //                                new FunctionAttributes(){ key = "computer",value = new List<string>(){"电脑" } },
            //                                new FunctionAttributes(){ key = "video",value = new List<string>(){"视频" } },
            //                                new FunctionAttributes(){ key = "source",value = new List<string>(){"信号源" } },
            //                                new FunctionAttributes(){ key = "zoom+",value = new List<string>(){"变焦+" } },
            //                                new FunctionAttributes(){ key = "zoom-",value = new List<string>(){"变焦-" } },
            //                                new FunctionAttributes(){ key = "page+",value = new List<string>(){"画面+" } },
            //                                new FunctionAttributes(){ key = "page-",value = new List<string>(){"画面-" } },
            //                                new FunctionAttributes(){ key = "menu",value = new List<string>(){"菜单" } },
            //                                new FunctionAttributes(){ key = "ok",value = new List<string>(){"确认" } },
            //                                new FunctionAttributes(){ key = "up",value = new List<string>(){"上" } },
            //                                new FunctionAttributes(){ key = "left",value = new List<string>(){"左" } },
            //                                new FunctionAttributes(){ key = "right",value = new List<string>(){"右" } },
            //                                new FunctionAttributes(){ key = "down",value = new List<string>(){"下" } },
            //                                new FunctionAttributes(){ key = "exit",value = new List<string>(){"退出" } },
            //                                new FunctionAttributes(){ key = "volume+",value = new List<string>(){"音量+" } },
            //                                new FunctionAttributes(){ key = "volume-",value = new List<string>(){"音量-" } },
            //                                new FunctionAttributes(){ key = "mute",value = new List<string>(){"静音" } },
            //                                new FunctionAttributes(){ key = "auto",value = new List<string>(){"自动" } },
            //                                new FunctionAttributes(){ key = "pause",value = new List<string>(){"暂停" } },
            //                            }
            //});
                btnChangeFunction.MouseUpEventHandler = (sender, e) => {
                    btnChangeFunction.IsSelected = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeFunction.IsBold = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                    CurShowTypeContent = 0;
                    contentView.PageIndex = 0;
            //FunctionList.List.Functions.Add(new Function()
            //{
            //    spk = SPK.StbIr,
            //    name = "测试机顶盒",
            //    attributes = new List<FunctionAttributes>() {
            //                                new FunctionAttributes(){ key = "on_off",curValue= "on",state = "on" },
            //                                new FunctionAttributes(){ key = "computer",value = new List<string>(){"电脑" } },
            //                                new FunctionAttributes(){ key = "video",value = new List<string>(){"视频" } },
            //                                new FunctionAttributes(){ key = "source",value = new List<string>(){"信号源" } },
            //                                new FunctionAttributes(){ key = "zoom+",value = new List<string>(){"变焦+" } },
            //                                new FunctionAttributes(){ key = "zoom-",value = new List<string>(){"变焦-" } },
            //                                new FunctionAttributes(){ key = "page+",value = new List<string>(){"画面+" } },
            //                                new FunctionAttributes(){ key = "page-",value = new List<string>(){"画面-" } },
            //                                new FunctionAttributes(){ key = "menu",value = new List<string>(){"菜单" } },
            //                                new FunctionAttributes(){ key = "ok",value = new List<string>(){"确认" } },
            //                                new FunctionAttributes(){ key = "up",value = new List<string>(){"上" } },
            //                                new FunctionAttributes(){ key = "left",value = new List<string>(){"左" } },
            //                                new FunctionAttributes(){ key = "right",value = new List<string>(){"右" } },
            //                                new FunctionAttributes(){ key = "down",value = new List<string>(){"下" } },
            //                                new FunctionAttributes(){ key = "exit",value = new List<string>(){"退出" } },
            //                                new FunctionAttributes(){ key = "volume+",value = new List<string>(){"音量+" } },
            //                                new FunctionAttributes(){ key = "volume-",value = new List<string>(){"音量-" } },
            //                                new FunctionAttributes(){ key = "mute",value = new List<string>(){"静音" } },
            //                                new FunctionAttributes(){ key = "auto",value = new List<string>(){"自动" } },
            //                                new FunctionAttributes(){ key = "pause",value = new List<string>(){"暂停" } },
            //                            }
            //});
                    btnChangeGroupControl.IsSelected = false;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeGroupControl.IsBold = false;
                };
                btnChangeScene.MouseUpEventHandler = (sender, e) => {
                    btnChangeScene.IsSelected = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeScene.IsBold = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeFunction.IsSelected = false;
                    btnChangeFunction.IsBold = false;
                    CurShowTypeContent = 1;
                    contentView.PageIndex = 1;
            //FunctionList.List.Functions.Add(new Function()
            //{
            //    spk = SPK.TvIr,
            //    name = "测试电视",
            //    attributes = new List<FunctionAttributes>() {
            //                                new FunctionAttributes(){ key = "on_off",curValue= "on",state = "on" },
            //                                new FunctionAttributes(){ key = "computer",value = new List<string>(){"电脑" } },
            //                                new FunctionAttributes(){ key = "video",value = new List<string>(){"视频" } },
            //                                new FunctionAttributes(){ key = "source",value = new List<string>(){"信号源" } },
            //                                new FunctionAttributes(){ key = "zoom+",value = new List<string>(){"变焦+" } },
            //                                new FunctionAttributes(){ key = "zoom-",value = new List<string>(){"变焦-" } },
            //                                new FunctionAttributes(){ key = "page+",value = new List<string>(){"画面+" } },
            //                                new FunctionAttributes(){ key = "page-",value = new List<string>(){"画面-" } },
            //                                new FunctionAttributes(){ key = "menu",value = new List<string>(){"菜单" } },
            //                                new FunctionAttributes(){ key = "ok",value = new List<string>(){"确认" } },
            //                                new FunctionAttributes(){ key = "up",value = new List<string>(){"上" } },
            //                                new FunctionAttributes(){ key = "left",value = new List<string>(){"左" } },
            //                                new FunctionAttributes(){ key = "right",value = new List<string>(){"右" } },
            //                                new FunctionAttributes(){ key = "down",value = new List<string>(){"下" } },
            //                                new FunctionAttributes(){ key = "exit",value = new List<string>(){"退出" } },
            //                                new FunctionAttributes(){ key = "volume+",value = new List<string>(){"音量+" } },
            //                                new FunctionAttributes(){ key = "volume-",value = new List<string>(){"音量-" } },
            //                                new FunctionAttributes(){ key = "mute",value = new List<string>(){"静音" } },
            //                                new FunctionAttributes(){ key = "auto",value = new List<string>(){"自动" } },
            //                                new FunctionAttributes(){ key = "pause",value = new List<string>(){"暂停" } },
            //                            }
            //});
#endif
                    btnChangeGroupControl.IsSelected = false;
                    btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeGroupControl.IsBold = false;
                };
                contentView.PageChange = (sender, e) =>
                {
                    if (contentView.PageIndex == 0)
                    {
                        btnChangeFunction.IsSelected = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeFunction.IsBold = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeScene.IsSelected = false;
                        btnChangeScene.IsBold = false;
                        btnChangeGroupControl.IsSelected = false;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeGroupControl.IsBold = false;
                    }
                    else if (contentView.PageIndex == 1)
                    {
                        btnChangeScene.IsSelected = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeScene.IsBold = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeFunction.IsSelected = false;
                        btnChangeFunction.IsBold = false;
                        btnChangeGroupControl.IsSelected = false;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeGroupControl.IsBold = false;
                    }
                    else if (contentView.PageIndex == 2)
                    {
                        btnChangeFunction.IsSelected = false;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeFunction.IsBold = false;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeScene.IsSelected = false;
                        btnChangeScene.IsBold = false;
                        btnChangeGroupControl.IsSelected = true;
                        btnChangeGroupControl.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeGroupControl.IsBold = true;
                    }
                };
            }
            else
            {
                var changeView = new FrameLayout()
                {
                    //Y = Application.GetRealHeight(20) + topView.Bottom,
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(230),
                    Height = Application.GetRealHeight(62),
                    BackgroundImagePath = "Collection/ChangeViewbg.png",
                };
                changeBaseView.AddChidren(changeView);
                var btnChangeFunction = new Button()
                {
                    X = Application.GetRealWidth(10),
                    Width = Application.GetRealWidth(114 - 10),
                    TextID = StringId.Functions,
                    SelectedTextColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.PromptingColor1,
                    TextSize = CSS_FontSize.HeadlineFontSize,
                    TextAlignment = TextAlignment.Center,
                    IsSelected = true,
                    IsBold = true,
                };
                changeView.AddChidren(btnChangeFunction);
                Button btnLine = new Button()
                {
                    X = btnChangeFunction.Right,
                    Gravity = Gravity.CenterVertical,
                    Width = Application.GetRealWidth(1),
                    Height = Application.GetRealHeight(14),
                    BackgroundColor = CSS_Color.PromptingColor1,
                };
                changeView.AddChidren(btnLine);
                var btnChangeScene = new Button()
                {
                    X = btnLine.Right,
                    Width = Application.GetRealWidth(114 - 10),
                    TextID = StringId.Scenes,
                    SelectedTextColor = CSS_Color.MainColor,
                    TextColor = CSS_Color.PromptingColor1,
                    TextSize = CSS_FontSize.TextFontSize,
                    TextAlignment = TextAlignment.Center,
                };
                changeView.AddChidren(btnChangeScene);
                btnChangeFunction.MouseUpEventHandler = (sender, e) =>
                {
                    btnChangeFunction.IsSelected = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeFunction.IsBold = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeScene.IsSelected = false;
                    btnChangeScene.IsBold = false;
                    CurShowTypeContent = 0;
                    contentView.PageIndex = 0;
                };
                btnChangeScene.MouseUpEventHandler = (sender, e) =>
                {
                    btnChangeScene.IsSelected = true;
                    btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                    btnChangeScene.IsBold = true;
                    btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                    btnChangeFunction.IsSelected = false;
                    btnChangeFunction.IsBold = false;
                    CurShowTypeContent = 1;
                    contentView.PageIndex = 1;
                };
                contentView.PageChange = (sender, e) =>
                {
                    if (contentView.PageIndex == 0)
                    {
                        btnChangeFunction.IsSelected = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeFunction.IsBold = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeScene.IsSelected = false;
                        btnChangeScene.IsBold = false;
                    }
                    else if (contentView.PageIndex == 1)
                    {
                        btnChangeScene.IsSelected = true;
                        btnChangeScene.TextSize = CSS.CSS_FontSize.HeadlineFontSize;
                        btnChangeScene.IsBold = true;
                        btnChangeFunction.TextSize = CSS.CSS_FontSize.TextFontSize;
                        btnChangeFunction.IsSelected = false;
                        btnChangeFunction.IsBold = false;
                    }
                };
            }
            contentView.PageIndex = CurShowTypeContent;
        }
        /// <summary>
        /// 加载内容区域
        /// </summary>
        void LoadContentView()
        {
            if (!Common.ApiUtlis.Ins.DownloadDataComplete)
            if (!Common.ApiUtlis.Ins.DownloadDataComplete && !MainPage.NoLoginMode)
            {
                var waitPage = new Loading();
                MainPage.BaseView.AddChidren(waitPage);
@@ -886,8 +870,10 @@
                        {
                            if (contentView == null)
                            {
                                waitPage.Hide();
                                return;
                            }
                            loadNavView();
                            contentView.RemoveAll();
                            deviceFunctionView = new VerticalScrolViewLayout();
                            contentView.AddChidren(deviceFunctionView);
@@ -895,12 +881,11 @@
                            sceneFunctionView = new VerticalScrolViewLayout();
                            contentView.AddChidren(sceneFunctionView);
                            LoadSceneFunctionControlZone();
                            if (CurShowTypeIsFunction)
                            if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
                            {
                                contentView.PageIndex = 0;
                            }else
                            {
                                contentView.PageIndex = 1;
                                gcFunctionView = new VerticalScrolViewLayout();
                                contentView.AddChidren(gcFunctionView);
                                LoadGroupControlFunctionControlZone();
                            }
                            LoadEvent_ChangeShowedFunctionType();
@@ -909,6 +894,7 @@
                            GetUnreadPushMessages();
                            RegisterGetPushMessageAction();
                            contentView.PageIndex = CurShowTypeContent;
                            if (waitPage != null)
                            {
                                waitPage.RemoveFromParent();
@@ -932,15 +918,13 @@
                sceneFunctionView = new VerticalScrolViewLayout();
                contentView.AddChidren(sceneFunctionView);
                LoadSceneFunctionControlZone();
                if (CurShowTypeIsFunction)
                if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
                {
                    contentView.PageIndex = 0;
                    gcFunctionView = new VerticalScrolViewLayout();
                    contentView.AddChidren(gcFunctionView);
                    LoadGroupControlFunctionControlZone();
                }
                else
                {
                    contentView.PageIndex = 1;
                }
                contentView.PageIndex = CurShowTypeContent;
                LoadEvent_ChangeShowedFunctionType();
@@ -965,47 +949,20 @@
            try
            {
                int index = 0;
                var list = FunctionList.List.GetDeviceFunctionList();
                var list = new List<Function>();
                list.AddRange(FunctionList.List.GetDeviceFunctionList());
                //list.AddRange(FunctionList.List.groupControls);//加入群控
                foreach (var function in list)
                {
                    //音乐模块有主从关系,需要特殊处理
                    if (SPK.MusicSpkList().Contains( function.spk))
                    {
                        continue;
                        //var music = function as Music.A31MusicModel;
                        //var music = Music.A31MusicModel.A31MusicModelList.Find((obj) => obj.sid == function.sid);
                        //if (music == null)
                        //{
                        //    continue;
                        //}
                        //if (music.ServerClientType == -1)
                        //{
                        //    continue;
                        //}
                        //else if (music.ServerClientType == 1)
                        //{
                        //    if (!music.MainPlayCollection)
                        //    {
                        //        continue;
                        //    }
                        //}
                        //else
                        //{
                        //    if (!music.collect)
                        //    {
                        //        continue;
                        //    }
                        //}
                    }
                    else
                    //if (SPK.MusicSpkList().Contains( function.spk))
                    //{
                    //    continue;
                    //}
                    //else
                    {
                        if (!function.collect)
                            continue;
                        //if (function.roomIdList.Count == 0)//如何在房间已经移除了这个功能,则收藏界面也不会再显示
                        //{
                        //    function.collection = false;
                        //    continue;
                        //}
                    }
                    if (index % 2 == 0)
                    {
@@ -1029,28 +986,30 @@
                        Tag = function.sid
                    };
                    rowView.AddChidren(functionView);
                    var btnbg = new Button()
                    {
                        UnSelectedImagePath = "Collection/Functionbg.png",
                        SelectedImagePath = "Collection/FunctionOnbg.png",
                        Tag = function.sid
                    };
                    functionView.AddChidren(btnbg);
                    functionViews.Add(functionView);
                    LoadDeviceFunctionDiv(functionView, function);
                    //绿建人居环境,科技系统
                    if (function.spk == SPK.AcstParent)
                    {
                        LoadAcstDiv(functionView, function);
                    }
                    else //其他设备
                    {
                        var btnbg = new Button()
                        {
                            UnSelectedImagePath = "Collection/Functionbg.png",
                            SelectedImagePath = "Collection/FunctionOnbg.png",
                            Tag = function.sid
                        };
                        functionView.AddChidren(btnbg);
                        LoadDeviceFunctionDiv(functionView, function);
                        if (SPK.ArmSensorSpkList().Contains(function.spk))
                        {
                            btnbg.UnSelectedImagePath = "Collection/FunctionOnbg.png";
                            btnbg.SelectedImagePath = "Collection/FunctionArmOnbg.png";
                        }
                    }
                    index++;
                    if(SPK.ArmSensorSpkList().Contains(function.spk))
                    {
                        btnbg.UnSelectedImagePath = "Collection/FunctionOnbg.png";
                        btnbg.SelectedImagePath = "Collection/FunctionArmOnbg.png";
                    }
                    if (!function.online)
                    {
                        btnbg.UnSelectedImagePath = "Collection/FunctionOfflineBg.png";
                    }
                }
                if (index == 0)
@@ -1086,8 +1045,93 @@
            }
            deviceFunctionView.AddChidren(new Button { Height = Application.GetRealHeight(30) });
            #endregion
        }
        /// <summary>
        /// 加载群控功能显示区域
        /// </summary>
        void LoadGroupControlFunctionControlZone()
        {
            #region ContextView
            gcFunctionView.RemoveAll();
            var rowView = new FrameLayout();
            try
            {
                int index = 0;
                foreach (var function in FunctionList.List.groupControls)
                {
                    if (index % 2 == 0)
                    {
                        rowView = new FrameLayout()
                        {
                            Height = Application.GetRealWidth(140),
                        };
                        gcFunctionView.AddChidren(rowView);
                    }
                    var functionView_X = Application.GetRealWidth((182 + 7) * (index % 2));
                    if (index % 2 == 0)
                    {
                        functionView_X += Application.GetRealWidth(7);
                    }
                    var functionView = new FrameLayout()
                    {
                        X = functionView_X,
                        Width = Application.GetRealWidth(182),
                        Height = Application.GetRealWidth(140),
                        Radius = (uint)Application.GetRealWidth(12),
                        Tag = function.sid
                    };
                    rowView.AddChidren(functionView);
                    functionViews.Add(functionView);
                        var btnbg = new Button()
                        {
                            UnSelectedImagePath = "Collection/Functionbg.png",
                            SelectedImagePath = "Collection/FunctionOnbg.png",
                            Tag = function.sid
                        };
                        functionView.AddChidren(btnbg);
                        LoadDeviceFunctionDiv(functionView, function);
                    index++;
                }
                if (index == 0)
                {
                    var view = new FrameLayout();
                    gcFunctionView.AddChidren(view);
                    var btnNoCollectionBg = new Button()
                    {
                        Y = Application.GetRealHeight(20),
                        Gravity = Gravity.CenterHorizontal,
                        Width = Application.GetRealWidth(180),
                        Height = Application.GetRealWidth(180),
                        UnSelectedImagePath = "Collection/NoCollectionBg.png",
                    };
                    view.AddChidren(btnNoCollectionBg);
                    var btnNoCollectionTip = new Button()
                    {
                        Height = Application.GetRealHeight(42),
                        Y = btnNoCollectionBg.Bottom,
                        TextAlignment = TextAlignment.Center,
                        TextColor = CSS_Color.PromptingColor1,
                        TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                        //TextID = StringId.TipNoFunctionCollcetion,
                    };
                    view.AddChidren(btnNoCollectionTip);
                }
            }
            catch (Exception ex)
            {
                MainPage.Log("homepage error : " + ex.Message);
            }
            gcFunctionView.AddChidren(new Button { Height = Application.GetRealHeight(30) });
            #endregion
        }
        /// <summary>
        /// 加载场景功能显示区域
        /// </summary>
@@ -1235,7 +1279,8 @@
                };
                if (function.spk == SPK.SenesorMegahealth)
                if (function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose ||
                    function.spk == SPK.SensorPir || function.spk == SPK.SensorPirHold)
                {
                    btnIcon.UnSelectedImagePath = "FunctionIcon/Icon/HomeIcon/sensormegahealth.png";
                    btnIcon.SelectedImagePath = "FunctionIcon/Icon/HomeIcon/sensormegahealth.png";
@@ -1249,7 +1294,7 @@
                        switch (tempStatus.state)
                        {//0空,1走,2跑,3坐,4跌倒,5站
                            case "0":
                                function.lastState = Language.StringByID(StringId.SensorNormalState);
                                function.lastState = Language.StringByID(StringId.wuren);
                                break;
                            case "1":
                                function.lastState = Language.StringByID(StringId.SomeoneIn);
@@ -1290,7 +1335,49 @@
                        }
                        btnState.Text = function.lastState;
                    }
                    else
                    {
                        tempStatus = function.attributes.Find((sta) => sta.key == "people_status");
                        if (tempStatus != null)
                        {
                            switch (tempStatus.state)
                            {
                                case "true":
                                    function.lastState = Language.StringByID(StringId.Someone);
                                    break;
                                case "false":
                                    function.lastState = Language.StringByID(StringId.wuren);
                                    break;
                            }
                            btnState.Text = function.lastState;
                        }
                    }
                }
                else if(function.spk == SPK.SensorDryContact || function.spk == SPK.SensorDryContact2)
                {
                    btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
                    btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
                    btnName.TextColor = CSS_Color.MainBackgroundColor;
                    btnZone.TextColor = CSS_Color.MainBackgroundColor;
                    btnState.TextColor = CSS_Color.MainBackgroundColor;
                    var tempStatus = function.attributes.Find((sta) => sta.key == FunctionAttributeKey.ContactStatus);
                    if (tempStatus != null)
                    {
                        switch (tempStatus.state)
                        {
                            case "open":
                                function.lastState = Language.StringByID(StringId.DryBreak);
                                break;
                            case "close":
                                function.lastState = Language.StringByID(StringId.Shut);
                                break;
                        }
                        btnState.Text = function.lastState;
                    }
                }
                else
                {
                    btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
@@ -1312,7 +1399,8 @@
                    SelectedImagePath = "Collection/CollectionWhiteIcon.png",
                    UnSelectedImagePath = "Collection/CollectionIcon.png",
                };
                view.AddChidren(btnCollection);
                if (function.spk != SPK.GroupControl)//群控默认显示
                    view.AddChidren(btnCollection);
                //2020-12-16 如果是成员隐藏收藏功能
                //if (!DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
                //{
@@ -1323,7 +1411,8 @@
                if (//SPK.CurtainSpkList().Contains(function.spk))
                    function.spk == SPK.CurtainRoller || function.spk == SPK.CurtainShades ||
                    function.spk == SPK.CurtainDream ||
                    function.spk == SPK.CurtainSwitch || function.spk == SPK.CurtainTrietex )
                    function.spk == SPK.CurtainSwitch || function.spk == SPK.CurtainTrietex
                    )
                {
                    btnIcon.UnSelectedImagePath = "FunctionIcon/Curtain/CurtainIcon.png";
                    btnIcon.SelectedImagePath = "FunctionIcon/Curtain/CurtainOnIcon.png";
@@ -1338,6 +1427,7 @@
                        SelectedImagePath = "FunctionIcon/Curtain/CurtainCloseWhiteIcon_Shadow.png",
                    };
                    view.AddChidren(btnCurtainClose);
                    Button btnCurtainOpen;
                    btnCurtainOpen = new Button()
@@ -1374,7 +1464,7 @@
                {
                    btnIcon.UnSelectedImagePath = "FunctionIcon/Music/MusicIcon.png";
                    btnIcon.SelectedImagePath = "FunctionIcon/Music/MusicOnIcon.png";
                    btnCollection.Visible = false;
                    //btnCollection.Visible = false;
                    Button btnPower;
                    btnPower = new Button()
                    {
@@ -1388,7 +1478,7 @@
                    view.AddChidren(btnPower);
                    btnState.Text = function.GetAttrState("song_name");
                    btnState.Width = Application.GetRealWidth(90);
                    btnState.SelectedTextColor = CSS_Color.MainBackgroundColor;
                    btnState.TextColor = CSS_Color.MainBackgroundColor;//PromptingColor1
@@ -1408,10 +1498,10 @@
                            btnPower.IsSelected = true;
                            status = "on";
                        }
                       function.SetAttrState("on_off", status);
                        function.SetAttrState("on_off", status);
                        Dictionary<string, string> dic = new Dictionary<string, string>();
                        dic.Add("on_off", status);
                        Music.SendMethod.mMethod.SendControlCommand(function, dic);
                        Music.SendMethod.Current.SendControlCommand(function, dic);
                    };
                }
@@ -1422,7 +1512,7 @@
                    Button btnUp;
                    btnUp = new Button()
                    {
                        X = Application.GetRealWidth(84+3),
                        X = Application.GetRealWidth(84 + 3),
                        Y = Application.GetRealWidth(89),
                        Width = Application.GetRealWidth(38),
                        Height = Application.GetRealWidth(38),
@@ -1447,14 +1537,103 @@
                    LoadEvent_ControlClothesHanger(function, btnUp, btnDown);
                }
                else if (function.spk == SPK.SenesorMegahealth)
                //else if (function.spk == SPK.SenesorMegahealth || function.spk == SPK.SensorMmvPose)
                else if (SPK.ArmSensorSpkList().Contains(function.spk))
                {
                    //btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}.png";
                    //btnIcon.SelectedImagePath = "FunctionIcon/Icon/HomeIcon/sensormegahealth.png";
                    //btnIcon.IsSelected = true;
                    btnName.TextColor = CSS_Color.MainBackgroundColor;
                    btnZone.TextColor = CSS_Color.MainBackgroundColor;
                    btnState.SelectedTextColor = CSS_Color.MainBackgroundColor;
                    btnState.TextColor = CSS_Color.MainColor;//PromptingColor1
                    btnState.TextColor = CSS_Color.MainBackgroundColor;
                }
                //紧急求助
                else if (function.spk == SPK.SensorHelp)
                {
                    btnName.TextColor = CSS_Color.MainBackgroundColor;
                    btnName.SelectedTextColor = CSS_Color.MainBackgroundColor;
                    btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
                    btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
                }
                else if (function.spk == SPK.IpCam_Imou)
                {
                    btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
                    btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
                }
                else if (function.spk == SPK.VideoDoorLock)
                {
                    btnIcon.UnSelectedImagePath = UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.GetVideoDoorLockIcon(UI2.FuntionControlView.VideoDoorLock.CommonMethod.Comerom.collect);
                    //btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
                }
                else if (function.spk == SPK.AvZkAiks)
                {
                    //为了去掉开关按钮
                    btnIcon.UnSelectedImagePath = "AksIcon/yingyinzhongkong1.png";
                }
                else if (function.spk == SPK.GroupControl)
                {
                    btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
                    btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
                    if (function.spk == SPK.GroupControl)
                    {
                        Button btnClose;
                        Button btnOpen;
                        btnOpen = new Button()
                        {
                            X = Application.GetRealWidth(84),
                            Y = Application.GetRealWidth(89),
                            Width = Application.GetRealWidth(40),
                            Height = Application.GetRealWidth(40),
                            UnSelectedImagePath = "FunctionIcon/Light/LightScene/gp_all_on_home.png",
                            SelectedImagePath = "FunctionIcon/Light/LightScene/gp_all_on_home_click.png",
                        };
                        view.AddChidren(btnOpen);
                        btnClose = new Button()
                        {
                            X = btnOpen.Right,
                            Y = Application.GetRealWidth(89),
                            Width = Application.GetRealWidth(40),
                            Height = Application.GetRealWidth(40),
                            UnSelectedImagePath = "FunctionIcon/Light/LightScene/gp_all_off_home.png",
                            SelectedImagePath = "FunctionIcon/Light/LightScene/gp_all_off_home_click.png",
                        };
                        view.AddChidren(btnClose);
                        btnClose.MouseDownEventHandler = (sender, e) => {
                            btnClose.IsSelected = true;
                        };
                        btnClose.MouseUpEventHandler = (sender, e) => {
                            btnClose.IsSelected = false;
                            if (function.spk == SPK.GroupControl)
                            {
                                var d = new Dictionary<string, string>();
                                d.Add("on_off", "off");
                                (function as GroupControl).Control(d);
                            }
                        };
                        btnOpen.MouseDownEventHandler = (sender, e) => {
                            btnOpen.IsSelected = true;
                        };
                        btnOpen.MouseUpEventHandler = (sender, e) => {
                            btnOpen.IsSelected = false;
                            if (function.spk == SPK.GroupControl)
                            {
                                var d = new Dictionary<string, string>();
                                d.Add("on_off", "on");
                                (function as GroupControl).Control(d);
                            }
                        };
                    }
                }
                else if (function.spk == SPK.ElectricEnergy || function.spk == SPK.AirSwitch || function.spk == SPK.AirSwitchP3)
                {
                }
                else
                {
@@ -1469,7 +1648,6 @@
                        SelectedImagePath = "Public/SwitchOn.png",
                    };
                    view.AddChidren(btnSwitch);
                    btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
                    btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
                    LoadEvent_SwitchFunction(function, btnSwitch);
@@ -1491,13 +1669,15 @@
                };
                var skipControlPageEvent = new PublicAssmebly().LoadEvent_SkipFunctionControlPage(function, btnCollection, btnName, btnZone);
                var skipControlPageEvent = new PublicAssmebly().LoadEvent_SkipFunctionControlPage(function, btnCollection, btnName, btnZone, UI2.FuntionControlView.VideoDoorLock.CommonMethod.Comerom.collect,()=> {
                    this.LoadDeviceFunctionControlZone();//删除设备后重新刷新UI
                });
                view.MouseUpEventHandler = skipControlPageEvent;
                btnName.MouseUpEventHandler = skipControlPageEvent;
                btnIcon.MouseUpEventHandler = skipControlPageEvent;
                btnState.MouseUpEventHandler = skipControlPageEvent;
                //不需要更新状态的动能列表
                if(!SPK.NotStatusSpkList.Contains(function.spk))
                //不需要更新状态的功能列表
                if(!SPK.NotStatusSpkList.Contains(function.spk) || function.spk != SPK.IpCam_Imou)
                {
                    UpdataFunctionStates(function);
                }
@@ -1512,7 +1692,7 @@
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    TextAlignment = TextAlignment.CenterLeft,
                    Tag = "OnlineTag",
                    Visible = !function.online
                    Visible = !function.isOnline()
                };
                view.AddChidren(btnOffline);
@@ -1522,6 +1702,97 @@
                MainPage.Log("homepage LoadControlView error : " + ex.Message);
            }
        }
        /// <summary>
        /// 加载绿建科技系统卡片
        /// </summary>
        void LoadAcstDiv(FrameLayout view1, Function function)
        {
            var view = new FrameLayout()
            {
                X = Application.GetRealWidth(10),
                Y = Application.GetRealHeight(5),
                Width = Application.GetRealWidth(160),
                Height = Application.GetRealHeight(105),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Radius = (uint)Application.GetRealWidth(15),
            };
            view1.AddChidren(view);
            Button btnName;
            btnName = new Button()
            {
                X = Application.GetRealWidth(11),
                Y = Application.GetRealWidth(10),
                TextID = StringId.Acst,
                IsBold = true,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                Height = Application.GetRealWidth(24),
                Width = Application.GetRealWidth(140),
                TextAlignment = TextAlignment.CenterLeft,
            };
            view.AddChidren(btnName);
            var btnLogo = new Button()
            {
                Y = Application.GetRealHeight(65),
                UnSelectedImagePath = "FunctionIcon/Acst/LvJianLogo.png",
                SelectedImagePath = "FunctionIcon/Acst/LvJianLogo.png",
                Width = Application.GetRealWidth(80),
                Height = Application.GetRealHeight(37),
            };
            view.AddChidren(btnLogo);
            Button btnFunctionViewBg;
            btnFunctionViewBg = new Button()
            {
                Height = Application.GetRealWidth(100),
                Width = Application.GetRealWidth(102),
                UnSelectedImagePath = "FunctionIcon/FunctionBg/AcstFunctionBg.png",
            };
            view.AddChidren(btnFunctionViewBg);
            btnFunctionViewBg.MouseUpEventHandler = (sender, e) => {
                var page = new AcstParentPage();
                MainPage.BasePageView.AddChidren(page);
                page.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            //Button btnAcstPower = new Button()
            //{
            //    X = Application.GetRealWidth(115),
            //    Y = Application.GetRealHeight(70),
            //    Width = Application.GetRealWidth(32),
            //    Height = Application.GetRealWidth(32),
            //    SelectedImagePath = "Public/PowerOpen.png",
            //    UnSelectedImagePath = "Public/PowerClose.png",
            //    IsSelected = function.trait_on_off.curValue.ToString() == "on",
            //};
            //view.AddChidren(btnAcstPower);
            //btnAcstPower.MouseUpEventHandler = (sender, e) => {
            //    btnAcstPower.IsSelected = !btnAcstPower.IsSelected;
            //    new System.Threading.Thread(() =>
            //    {
            //        string onoff = btnAcstPower.IsSelected ? "on" : "off";
            //        Dictionary<string, string> d = new Dictionary<string, string>();
            //        d.Add(FunctionAttributeKey.OnOff, onoff);
            //        foreach (var temp in FunctionList.List.GetAcstParentList())
            //        {
            //            Control.Ins.SendWriteCommand(temp, d);
            //        }
            //    })
            //    { IsBackground = true }.Start();
            //};
        }
        /// <summary>
        /// 加载场景控制卡片
@@ -1614,11 +1885,14 @@
                LoadEvent_ControlScene(btnCoverd, btnName, btnZone, btnShowDelay, scene);
                btnSettingIcon.MouseUpEventHandler = (sender, e) => {
                    Action backAction = () => {
                btnSettingIcon.MouseUpEventHandler = (sender, e) =>
                {
                    Action backAction = () =>
                    {
                        //LoadSceneFunctionControlZone();
                    };
                    Action refreshAction = () => {
                    Action refreshAction = () =>
                    {
                        btnName.Text = scene.name;
                        btnZone.Text = scene.GetRoomListName();
                        //view.BackgroundImagePath = (scene as Scene).ImagePath;
@@ -1627,7 +1901,7 @@
                    };
                    var aep = new SceneEditPage(scene, backAction);
                    MainPage.BasePageView.AddChidren(aep);
                    aep.LoadPage( refreshAction);
                    aep.LoadPage(refreshAction);
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                };
                //场景正在倒计时执行中