wxr
2021-07-01 43b0d5870d528f23ecd6aeceb6cfd4325188b46f
HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -1,20 +1,31 @@
using System;
using System;
using System.Collections.Generic;
using System.Text;
using HDL_ON.DAL;
using HDL_ON.DriverLayer;
using HDL_ON.Entity;
using HDL_ON.UI.CSS;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Shared;
namespace HDL_ON.UI
{
    public partial class HomePage : FrameLayout
    public partial class HomePage : VerticalRefreshLayout
    {
        #region 控件列表
        static FrameLayout bodyView;
        static HomePage bodyView;
        //FrameLayout bodyView;
        /// <summary>
        /// 顶部信息区域
        /// </summary>
        FrameLayout topView;
        /// <summary>
        /// 连接状态提示
        /// </summary>
        Button btnLinkStateTip;
        /// <summary>
        ///住宅名称显示
        /// </summary>
@@ -24,17 +35,25 @@
        /// </summary>
        FrameLayout environmentalView;
        /// <summary>
        /// 当前温度信息
        /// 当前温度信息-室外
        /// </summary>
        Button btnTempValues;
        TextButton btnTempValues;
        /// <summary>
        /// 当前湿度信息
        /// 当前湿度信息-室外
        /// </summary>
        Button btnHumidityValues;
        TextButton btnHumidityValues;
        /// <summary>
        /// 当前温度信息-室内
        /// </summary>
        TextButton btnIndoorTempValues;
        /// <summary>
        /// 当前湿度信息-室内
        /// </summary>
        TextButton btnIndoorHumiValues;
        /// <summary>
        /// 当前pm2.5状态
        /// </summary>
        Button btnPm25Values;
        TextButton btnPm25Values;
        /// <summary>
        /// 切换显示功能类型区域
        /// </summary>
@@ -60,17 +79,9 @@
        /// </summary>
        VerticalScrolViewLayout sceneFunctionView;
        /// <summary>
        /// 灯光区域集合
        /// 功能区域集合
        /// </summary>
        static Dictionary<string, FrameLayout> LightViews;
        /// <summary>
        /// 空调区域集合
        /// </summary>
        static Dictionary<string, FrameLayout> AcViews;
        /// <summary>
        /// 窗帘区域集合
        /// </summary>
        static Dictionary<string, FrameLayout> CurtainViews;
        List<FrameLayout> functionViews;
        #endregion
        #region 区域变量
@@ -80,249 +91,532 @@
        bool CurShowTypeIsFunction = true;
        #endregion
        #region 报警信息
        Button btnMsgBg;
        Button btnMsgTime;
        Button btnMsg;
        Button btnMsgIcon;
        #endregion
        public HomePage()
        {
            bodyView = this;
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            this.VerticalScrollBarEnabled = false;
#if __IOS__
            //自动偏移取消
            if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
            {
                (this.uiView as UIKit.UIScrollView).ContentInsetAdjustmentBehavior = UIKit.UIScrollViewContentInsetAdjustmentBehavior.Never;
            }
#endif
        }
        public override void RemoveFromParent()
        {
            UnregisterGetPushMessageAction();
            base.RemoveFromParent();
        }
        public void LoadPage()
        {
            #region topView
            topView = new FrameLayout()
            MainPage.CurPageIndex = 0;
            try
            {
                Height = Application.GetRealHeight(216),
                BackgroundImagePath = DB_ResidenceData.residenceData.residenceImage,
            };
            bodyView.AddChidren(topView);
                this.BeginHeaderRefreshingAction = () =>
                {
                    this.EndHeaderRefreshing();
                    Common.ApiUtlis.Ins.DownloadData();
                    LoadContentView();
                };
            Button btnTop;
            btnTop = new Button()
                #region topView
                bodyView.RemoveAll();
                topView = new FrameLayout()
                {
                    Height = Application.GetRealHeight(216),
                    BackgroundImagePath = DB_ResidenceData.Instance.residenceImage,
                };
                bodyView.AddChidren(topView);
                Button btnTop;
                btnTop = new Button()
                {
                    BackgroundColor = CSS_Color.DialogTransparentColor2,
                };
                topView.AddChidren(btnTop);
                btnLinkStateTip = new Button()
                {
                    X = Application.GetRealWidth(16),
                    Y = Application.GetRealHeight(46),
                    Width = Application.GetRealWidth(6),
                    Height = Application.GetRealWidth(6),
                    BackgroundColor = CSS_Color.LinkTipFail,
                    Radius = (uint)Application.GetRealWidth(3),
                };
                topView.AddChidren(btnLinkStateTip);
                //更新链接状态icon颜色
                CheckLinkStatus();//2020-12-22
                btnResidenceName = new Button()
                {
                    X = Application.GetRealWidth(26),
                    Y = Application.GetRealHeight(32),
                    Width = Application.GetRealWidth(300),
                    Height = Application.GetRealHeight(33),
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel,
                    TextAlignment = TextAlignment.CenterLeft,
                    Text = DB_ResidenceData.Instance.CurrentRegion.homeName,
                    IsBold = true
                };
                topView.AddChidren(btnResidenceName);
#if DEBUG
                //搜索网关
                btnResidenceName.MouseUpEventHandler = (sender, e) =>
                {
                };
#endif
                environmentalView = new FrameLayout()
                {
                    Y = Application.GetRealHeight(1) + btnResidenceName.Bottom,
                    Height = Application.GetRealHeight(32),
                };
                topView.AddChidren(environmentalView);
                #region 环境数据
                var tempSensorList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => obj.spk == SPK.SensorTemperature);
                var humiSensorList = FunctionList.List.GetEnvirSensorsList().FindAll((obj) => obj.spk == SPK.SensorHumidity);
                var btnEnvirValuesTitle = new Button() {
                    X = Application.GetRealWidth(12),
                    Gravity = Gravity.CenterVertical,
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    TextID = StringId.Outdoor,
                    TextAlignment = TextAlignment.CenterLeft,
                };
                if (tempSensorList.Count > 0 || humiSensorList.Count > 0)
                {
                    btnEnvirValuesTitle.TextID = StringId.InOutdoor;
                }
                btnEnvirValuesTitle.Width = Application.GetRealWidth(8) + btnEnvirValuesTitle.GetTextWidth();
                environmentalView.AddChidren(btnEnvirValuesTitle);
                Button btnTempIcon = new Button()
                {
                    X = btnEnvirValuesTitle.Right,
                    Gravity = Gravity.CenterVertical,
                    Width = Application.GetMinRealAverage(16),
                    Height = Application.GetMinRealAverage(16),
                    UnSelectedImagePath = "Public/DeviceInfoIcon/TempIcon.png",
                };
                environmentalView.AddChidren(btnTempIcon);
                btnTempValues = new TextButton()
                {
                    X = btnTempIcon.Right + Application.GetRealWidth(4),
                    Gravity = Gravity.CenterVertical,
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    Text = MainPage.cityInfo.temperature + "°",
                    TextAlignment = TextAlignment.CenterLeft,
                };
                btnTempValues.Width = btnTempValues.GetTextWidth();
                environmentalView.AddChidren(btnTempValues);
                btnIndoorTempValues = new TextButton()
                {
                    X = btnTempValues.Right,
                    Gravity = Gravity.CenterVertical,
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    TextAlignment = TextAlignment.CenterLeft,
                    Text = ""
                };
                if (tempSensorList.Count > 0)
                {
                    btnIndoorTempValues.Text = "/--°";
                    double tempTotalValues = 0;
                    foreach (var temp in tempSensorList)
                    {
                        double tempValue = 0;
                        double.TryParse(temp.GetAttrState(FunctionAttributeKey.Value), out tempValue);
                        tempTotalValues += tempValue;
                    }
                    if (tempTotalValues > 0)
                    {
                        btnIndoorTempValues.Text = "/" + tempTotalValues + "°";
                    }
                }
                btnIndoorTempValues.Width = btnIndoorTempValues.GetTextWidth();
                environmentalView.AddChidren(btnIndoorTempValues);
                Button btnHumidityIcon = new Button()
                {
                    X = btnIndoorTempValues.Right + Application.GetRealWidth(8),
                    Gravity = Gravity.CenterVertical,
                    Width = Application.GetMinRealAverage(16),
                    Height = Application.GetMinRealAverage(16),
                    UnSelectedImagePath = "Public/DeviceInfoIcon/HumidityIcon.png",
                };
                environmentalView.AddChidren(btnHumidityIcon);
                btnHumidityValues = new TextButton()
                {
                    X = btnHumidityIcon.Right + Application.GetRealWidth(4),
                    Gravity = Gravity.CenterVertical,
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    Text = MainPage.cityInfo.humidity + "%",
                    TextAlignment = TextAlignment.CenterLeft,
                };
                btnHumidityValues.Width = btnHumidityValues.GetTextWidth();
                environmentalView.AddChidren(btnHumidityValues);
                btnIndoorHumiValues = new TextButton()
                {
                    X = btnHumidityValues.Right,
                    Gravity = Gravity.CenterVertical,
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    TextAlignment = TextAlignment.CenterLeft,
                    Text = ""
                };
                if (tempSensorList.Count > 0)
                {
                    btnIndoorHumiValues.Text = "/--%";
                    double humiTotalValues = 0;
                    foreach (var humi in humiSensorList)
                    {
                        double humiValue = 0;
                        double.TryParse(humi.GetAttrState(FunctionAttributeKey.Value), out humiValue);
                        humiTotalValues += humiValue;
                    }
                    if (humiTotalValues > 0)
                    {
                        btnIndoorHumiValues.Text = "/" + humiTotalValues + "%";
                    }
                }
                btnIndoorHumiValues.Width = btnIndoorHumiValues.GetTextWidth();
                environmentalView.AddChidren(btnIndoorHumiValues);
                Button btnPm25Icon = new Button()
                {
                    X = btnIndoorHumiValues.Right + Application.GetRealWidth(4),
                    Gravity = Gravity.CenterVertical,
                    Width = Application.GetMinRealAverage(16),
                    Height = Application.GetMinRealAverage(16),
                    UnSelectedImagePath = "Public/DeviceInfoIcon/Pm25Icon.png",
                };
                environmentalView.AddChidren(btnPm25Icon);
                btnPm25Values = new TextButton()
                {
                    X = btnPm25Icon.Right + Application.GetRealWidth(4),
                    Gravity = Gravity.CenterVertical,
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                    Text = MainPage.cityInfo.pm25,
                    TextAlignment = TextAlignment.CenterLeft,
                };
                btnPm25Values.Width = btnPm25Values.GetTextWidth();
                environmentalView.AddChidren(btnPm25Values);
                #endregion
                #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);
                btnMsgIcon = new Button()
                {
                    X = Application.GetRealWidth(12),
                    Gravity = Gravity.CenterVertical,
                    Width = Application.GetMinRealAverage(24),
                    Height = Application.GetMinRealAverage(24),
                    UnSelectedImagePath = "Collection/MsgIcon.png",
                    SelectedImagePath = "Collection/MsgIconTip.png",
                };
                msgView.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);
                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
                #region 功能场景切换
                bodyView.AddChidren(new Button() { Height = Application.GetRealHeight(20), BackgroundColor = 0x00000000 });
                changeView = new FrameLayout()
                {
                    //Y = Application.GetRealHeight(20) + topView.Bottom,
                    Gravity = Gravity.CenterHorizontal,
                    Width = Application.GetRealWidth(230),
                    Height = Application.GetRealHeight(62),
                    BackgroundImagePath = "Collection/ChangeViewbg.png",
                };
                bodyView.AddChidren(changeView);
                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);
                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);
                #endregion
                #region ContextView
                contentView = new PageLayout()
                {
                    //Y = changeView.Bottom,
                    Height = Application.GetRealHeight(310 + 30 + 10), //20为超出部分
                    IsShowPoint = false,
                };
                bodyView.AddChidren(contentView);
                functionViews = new List<FrameLayout>();
                LoadContentView();
                #endregion
            }
            catch (Exception ex)
            {
                BackgroundColor = CSS_Color.DialogTransparentColor2,
            };
            topView.AddChidren(btnTop);
                MainPage.Log($"HomePage LoadPage Error : {ex.Message}");
            }
            btnResidenceName = new Button()
#if DEBUG
            //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>(){"暂停" } },
            //                            }
            //});
            //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>(){"暂停" } },
            //                            }
            //});
            //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
        }
        /// <summary>
        /// 加载内容区域
        /// </summary>
        void LoadContentView()
        {
            if (!Common.ApiUtlis.Ins.DownloadDataComplete)
            {
                X = Application.GetRealWidth(16),
                Y = Application.GetRealHeight(32),
                Width = Application.GetRealWidth(200),
                Height = Application.GetRealHeight(33),
                TextColor = CSS.CSS_Color.MainBackgroundColor,
                TextSize = CSS.CSS_FontSize.EmphasisFontSize_FirstLevel,
                TextAlignment = TextAlignment.CenterLeft,
                Text = DB_ResidenceData.residenceData.residenceName,
                IsBold = true
            };
            topView.AddChidren(btnResidenceName);
                var waitPage = new Loading();
                MainPage.BaseView.AddChidren(waitPage);
                waitPage.Start(Language.StringByID(StringId.PleaseWait));
            environmentalView = new FrameLayout()
                new System.Threading.Thread(() =>
                {
                    try
                    {
                        while (!Common.ApiUtlis.Ins.DownloadDataComplete)
                        {
                            System.Threading.Thread.Sleep(400);
                        }
                        Application.RunOnMainThread(() =>
                        {
                            if (contentView == null)
                            {
                                return;
                            }
                            contentView.RemoveAll();
                            deviceFunctionView = new VerticalScrolViewLayout();
                            contentView.AddChidren(deviceFunctionView);
                            LoadDeviceFunctionControlZone();
                            sceneFunctionView = new VerticalScrolViewLayout();
                            contentView.AddChidren(sceneFunctionView);
                            LoadSceneFunctionControlZone();
                            contentView.PageIndex = 0;
                            LoadEvent_ChangeShowedFunctionType();
                            // 查询未读消息并显示
                            GetUnreadPushMessages();
                            RegisterGetPushMessageAction();
                            waitPage.Hide();
                        });
                    }
                    catch (Exception ex) {
                        MainPage.Log($"刷新主页异常:{ex.Message}");
                    }
                    finally { }
                })
                { IsBackground = true }.Start();
            }
            else
            {
                Y = Application.GetRealHeight(1) + btnResidenceName.Bottom,
                Height = Application.GetRealHeight(32),
            };
            topView.AddChidren(environmentalView);
            #region 环境数据
            Button btnTempIcon = new Button()
            {
                X = Application.GetRealWidth(12),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(16),
                Height = Application.GetMinRealAverage(16),
                UnSelectedImagePath = "Public/InfoIcon/TempIcon.png",
            };
            environmentalView.AddChidren(btnTempIcon);
            btnTempValues = new Button()
            {
                X = btnTempIcon.Right + Application.GetRealWidth(4),
                Width = Application.GetRealWidth(30),
                Gravity = Gravity.CenterVertical,
                TextColor = CSS.CSS_Color.MainBackgroundColor,
                TextSize = CSS.CSS_FontSize.PromptFontSize_FirstLevel,
                Text = "--°",
                TextAlignment = TextAlignment.CenterLeft,
            };
            environmentalView.AddChidren(btnTempValues);
            Button btnHumidityIcon = new Button()
            {
                X = btnTempValues.Right + Application.GetRealWidth(2),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(16),
                Height = Application.GetMinRealAverage(16),
                UnSelectedImagePath = "Public/InfoIcon/HumidityIcon.png",
            };
            environmentalView.AddChidren(btnHumidityIcon);
            btnHumidityValues = new Button()
            {
                X = btnHumidityIcon.Right + Application.GetRealWidth(4),
                Width = Application.GetRealWidth(30),
                Gravity = Gravity.CenterVertical,
                TextColor = CSS.CSS_Color.MainBackgroundColor,
                TextSize = CSS.CSS_FontSize.PromptFontSize_FirstLevel,
                Text = "--%",
                TextAlignment = TextAlignment.CenterLeft,
            };
            environmentalView.AddChidren(btnHumidityValues);
            Button btnPm25Icon = new Button()
            {
                X = btnHumidityValues.Right + Application.GetRealWidth(2),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(16),
                Height = Application.GetMinRealAverage(16),
                UnSelectedImagePath = "Public/InfoIcon/Pm25Icon.png",
            };
            environmentalView.AddChidren(btnPm25Icon);
            btnPm25Values = new Button()
            {
                X = btnPm25Icon.Right + Application.GetRealWidth(4),
                Width = Application.GetRealWidth(30),
                Gravity = Gravity.CenterVertical,
                TextColor = CSS.CSS_Color.MainBackgroundColor,
                TextSize = CSS.CSS_FontSize.PromptFontSize_FirstLevel,
                Text = "--",
                TextAlignment = TextAlignment.CenterLeft,
            };
            environmentalView.AddChidren(btnPm25Values);
            #endregion
                deviceFunctionView = new VerticalScrolViewLayout();
                contentView.AddChidren(deviceFunctionView);
                LoadDeviceFunctionControlZone();
                sceneFunctionView = new VerticalScrolViewLayout();
                contentView.AddChidren(sceneFunctionView);
                LoadSceneFunctionControlZone();
                contentView.PageIndex = 0;
            #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);
                LoadEvent_ChangeShowedFunctionType();
            var btngb = new Button()
            {
                BackgroundColor = CSS.CSS_Color.MainColor,//0x3F4484F4,//
                Alpha = 0.4f,
            };
            msgView.AddChidren(btngb);
                // 查询未读消息并显示
                GetUnreadPushMessages();
                RegisterGetPushMessageAction();
            Button btnMsgIcon;
            btnMsgIcon = new Button()
            {
                X = Application.GetRealWidth(12),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(24),
                Height = Application.GetMinRealAverage(24),
                UnSelectedImagePath = "Collection/MsgIcon.png",
                SelectedImagePath = "Collection/MsgIconTip.png",
            };
            msgView.AddChidren(btnMsgIcon);
            }
            Button btnMsg;
            btnMsg = new Button()
            {
                X = Application.GetRealWidth(10) + btnMsgIcon.Right,
                Width = Application.GetRealWidth(240),
                Text = "无",
                TextColor = CSS.CSS_Color.MainBackgroundColor,
                TextSize = CSS.CSS_FontSize.PromptFontSize_FirstLevel,
                TextAlignment = TextAlignment.CenterLeft,
            };
            msgView.AddChidren(btnMsg);
            Button btnMsgTime;
            btnMsgTime = new Button()
            {
                X = Application.GetRealWidth(299),
                Width = Application.GetRealWidth(44),
                Text = "00:00",
                TextSize = CSS.CSS_FontSize.PromptFontSize_FirstLevel,
                TextAlignment = TextAlignment.CenterLeft,
            };
            msgView.AddChidren(btnMsgTime);
            #endregion
            #endregion
            #region 功能场景切换
            changeView = new FrameLayout()
            {
                Y = Application.GetRealHeight(20) + topView.Bottom,
                Gravity = Gravity.CenterHorizontal,
                Width = Application.GetRealWidth(230),
                Height = Application.GetRealHeight(62),
                BackgroundImagePath = "Collection/ChangeViewbg.png",
            };
            bodyView.AddChidren(changeView);
            btnChangeFunction = new Button()
            {
                Width = Application.GetRealWidth(114),
                TextID = StringId.Functions,
                SelectedTextColor = CSS.CSS_Color.MainColor,
                TextColor = CSS.CSS_Color.PromptingColor1,
                TextSize = CSS.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.CSS_Color.PromptingColor1,
            };
            changeView.AddChidren(btnLine);
            btnChangeScene = new Button()
            {
                X = btnLine.Right,
                Width = Application.GetRealWidth(114),
                TextID = StringId.Scenes,
                SelectedTextColor = CSS.CSS_Color.MainColor,
                TextColor = CSS.CSS_Color.PromptingColor1,
                TextSize = CSS.CSS_FontSize.TextFontSize,
                TextAlignment = TextAlignment.Center,
            };
            changeView.AddChidren(btnChangeScene);
            #endregion
            #region ContextView
            contentView = new PageLayout()
            {
                Y = changeView.Bottom + Application.GetRealHeight(10),
                Height = Application.GetRealHeight(310 + 30), //20为超出部分
            };
            bodyView.AddChidren(contentView);
            LightViews = new Dictionary<string, FrameLayout>();
            AcViews = new Dictionary<string, FrameLayout>();
            CurtainViews = new Dictionary<string, FrameLayout>();
            deviceFunctionView = new VerticalScrolViewLayout();
            contentView.AddChidren(deviceFunctionView);
            LoadDeviceFunctionControlZone();
            sceneFunctionView = new VerticalScrolViewLayout();
            contentView.AddChidren(sceneFunctionView);
            LoadSceneFunctionControlZone();
            contentView.PageIndex = 0;
            #endregion
            LoadEvent_ChangeShowedFunctionType();
            //刷新功能状态
            DB_ResidenceData.residenceData.RefreshResidenceFunctionStatus();
        }
        /// <summary>
@@ -332,21 +626,51 @@
        {
            #region ContextView
            deviceFunctionView.RemoveAll();
            LightViews.Clear();
            AcViews.Clear();
            CurtainViews.Clear();
            functionViews.Clear();
            var rowView = new FrameLayout();
            try
            {
                int index = 0;
                foreach (var function in DB_ResidenceData.residenceData.functionList.GetAllDeviceFunctionList())
                var list = FunctionList.List.GetDeviceFunctionList();
                foreach (var function in list)
                {
                    if (!function.collection)
                        continue;
                    if (function.roomIdList.Count == 0)//如何在房间已经移除了这个功能,则收藏界面也不会再显示
                    //音乐模块有主从关系,需要特殊处理
                    if (function.Spk_Prefix == FunctionCategory.Music)
                    {
                        function.collection = false;
                        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 (!function.collect)
                            continue;
                        //if (function.roomIdList.Count == 0)//如何在房间已经移除了这个功能,则收藏界面也不会再显示
                        //{
                        //    function.collection = false;
                        //    continue;
                        //}
                    }
                    if (index % 2 == 0)
                    {
@@ -370,37 +694,49 @@
                        Tag = function.sid
                    };
                    rowView.AddChidren(functionView);
                    var btnbg = new Button()
                    {
                        UnSelectedImagePath = "Collection/Functionbg.png",
                        SelectedImagePath = "Collection/FunctionOnbg.png",
                        Tag = function.sid
                    };
                    functionView.AddChidren(btnbg);
                    switch (function.functionCategory)
                    {
                        case FunctionType.Light:
                            #region 灯光 Light
                            LightViews.Add(function.sid, functionView);
                            #endregion
                            break;
                        case FunctionType.Curtain:
                            #region 窗帘
                            CurtainViews.Add(function.sid, functionView);
                            #endregion
                            break;
                        case FunctionType.AC:
                            #region 空调 AC
                            AcViews.Add(function.sid, functionView);
                            #endregion
                            break;
                    }
                    functionViews.Add(functionView);
                    LoadDeviceFunctionDiv(functionView, function);
                    index++;
                }
                if (index == 0)
                {
                    var view = new FrameLayout();
                    deviceFunctionView.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 erorr : " + ex.Message);
                MainPage.Log("homepage error : " + ex.Message);
            }
            deviceFunctionView.AddChidren(new Button { Height = Application.GetRealHeight(30) });
            #endregion
@@ -416,15 +752,15 @@
            try
            {
                int index = 0;
                foreach (var function in DB_ResidenceData.residenceData.functionList.scenes)
                foreach (var scene in FunctionList.List.scenes)
                {
                    if (!function.collection)
                    if (!scene.collect)
                        continue;
                    if (function.roomIdList.Count == 0)//如何在房间已经移除了这个功能,则收藏界面也不会再显示
                    {
                        function.collection = false;
                        continue;
                    }
                    //if (scene.roomIds.Count == 0)//如何在房间已经移除了这个功能,则收藏界面也不会再显示
                    //{
                    //    scene.collect = false;
                    //    continue;
                    //}
                    if (index % 2 == 0)
                    {
                        sceneFunctionView.AddChidren(new Button() { Height = Application.GetRealHeight(7) });
@@ -435,26 +771,52 @@
                        sceneFunctionView.AddChidren(rowView);
                        sceneFunctionView.AddChidren(new Button() { Height = Application.GetRealHeight(7) });
                    }
                    var functionView_X = Application.GetRealWidth((16 + 164) * (index % 2) +16);
                    var functionView_X = Application.GetRealWidth((16 + 164) * (index % 2) + 16);
                    var functionView = new FrameLayout()
                    {
                        X = functionView_X,
                        Width = Application.GetRealWidth(164),
                        Height = Application.GetRealWidth(122),
                        Tag = function.sid,
                        BackgroundImagePath = (function as Scene).ImagePath,
                        Tag = scene.sid,
                        BackgroundImagePath = scene.ImagePath,
                    };
                    rowView.AddChidren(functionView);
                    //functionView.Radius = (uint)Application.GetRealWidth(12);
                    //functionView.BorderColor = CSS_Color.BackgroundColor;
                    //functionView.BorderWidth = 1;
                    //2020-12-03 修改图片加载方法
                    ImageUtlis.Current.LoadLocalOrNetworkImages((scene as Scene).ImagePath, functionView);
                    LoadSceneFunctionDiv(functionView, function);
                    LoadSceneFunctionDiv( functionView, scene);
                    index++;
                }
            }
                if (index == 0)
                {
                    var view = new FrameLayout();
                    sceneFunctionView.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.TipNoSceneCollcetion,
                    };
                    view.AddChidren(btnNoCollectionTip);
                }
            }
            catch (Exception ex)
            {
                MainPage.Log("homepage erorr : " + ex.Message);
@@ -464,7 +826,7 @@
        }
        /// <summary>
        /// 加载控制卡片
        /// 加载功能控制卡片
        /// </summary>
        void LoadDeviceFunctionDiv(FrameLayout view, Function function)
        {
@@ -480,6 +842,11 @@
                };
                view.AddChidren(btnIcon);
                btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
                btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
                Button btnName;
                btnName = new Button()
                {
@@ -487,8 +854,8 @@
                    Y = Application.GetRealWidth(10) + btnIcon.Bottom,
                    Text = function.name,
                    IsBold = true,
                    TextColor = CSS.CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS.CSS_FontSize.TextFontSize,
                    TextColor = CSS_Color.FirstLevelTitleColor,
                    TextSize = CSS_FontSize.TextFontSize,
                    Height = Application.GetRealWidth(24),
                    Width = Application.GetRealWidth(140),
                    TextAlignment = TextAlignment.CenterLeft,
@@ -502,10 +869,10 @@
                    Y = btnName.Bottom,
                    Height = Application.GetRealWidth(18),
                    Width = Application.GetRealWidth(113),
                    TextColor = CSS.CSS_Color.PromptingColor1,
                    TextSize = CSS.CSS_FontSize.PromptFontSize_SecondaryLevel,
                    TextColor = CSS_Color.PromptingColor1,
                    TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                    TextAlignment = TextAlignment.CenterLeft,
                    SelectedTextColor = CSS.CSS_Color.MainBackgroundColor,
                    SelectedTextColor = CSS_Color.MainBackgroundColor,
                    Text = function.GetRoomListName()
                };
                view.AddChidren(btnZone);
@@ -517,14 +884,18 @@
                    Y = btnZone.Bottom,
                    Height = Application.GetRealWidth(18),
                    Width = Application.GetRealWidth(113),
                    SelectedTextColor = CSS.CSS_Color.MainBackgroundColor,
                    SelectedTextColor = CSS_Color.MainBackgroundColor,
                    TextColor = 0x00000000,
                    TextSize = CSS.CSS_FontSize.PromptFontSize_SecondaryLevel,
                    TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                    TextAlignment = TextAlignment.CenterLeft,
                    Tag = "state",
                    Text = function.lastState
                };
                view.AddChidren(btnState);
                if (function.spk != SPK.LightSwitch)
                {
                    view.AddChidren(btnState);
                }
                Button btnCollection;
                btnCollection = new Button()
@@ -537,67 +908,239 @@
                    UnSelectedImagePath = "Collection/CollectionIcon.png",
                };
                view.AddChidren(btnCollection);
                //2020-12-16 如果是成员隐藏收藏功能
                //if (!DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
                //{
                //    view.AddChidren(btnCollection);
                //}
                Button btnSwitch;
                btnSwitch = new Button()
                LoadEvent_FunctionCollection(btnCollection, function);
                if (//SPK.CurtainSpkList().Contains(function.spk))
                    function.spk == SPK.CurtainRoller || function.spk == SPK.CurtainShades ||
                    function.spk == SPK.CurtainSwitch || function.spk == SPK.CurtainTrietex )
                {
                    X = Application.GetRealWidth(122),
                    Y = Application.GetRealWidth(92),
                    Width = Application.GetMinRealAverage(48),
                    Height = Application.GetMinRealAverage(36),
                    UnSelectedImagePath = "Public/Switch.png",
                    SelectedImagePath = "Public/SwitchOn.png",
                    btnIcon.UnSelectedImagePath = "FunctionIcon/Curtain/CurtainIcon.png";
                    btnIcon.SelectedImagePath = "FunctionIcon/Curtain/CurtainOnIcon.png";
                    Button btnCurtainClose;
                    btnCurtainClose = new Button()
                    {
                        X = Application.GetRealWidth(84),
                        Y = Application.GetRealWidth(89),
                        Width = Application.GetRealWidth(44),
                        Height = Application.GetRealWidth(44),
                        UnSelectedImagePath = "FunctionIcon/Curtain/CurtainCloseBlueIcon_Shadow.png",
                        SelectedImagePath = "FunctionIcon/Curtain/CurtainCloseWhiteIcon_Shadow.png",
                    };
                    view.AddChidren(btnCurtainClose);
                    Button btnCurtainOpen;
                    btnCurtainOpen = new Button()
                    {
                        X = btnCurtainClose.Right,
                        Y = Application.GetRealWidth(89),
                        Width = Application.GetRealWidth(44),
                        Height = Application.GetRealWidth(44),
                        UnSelectedImagePath = "FunctionIcon/Curtain/CurtainOpenBlueIcon_Shadow.png",
                        SelectedImagePath = "FunctionIcon/Curtain/CurtainOpenWhiteIcon_Shadow.png",
                    };
                    view.AddChidren(btnCurtainOpen);
                    LoadEvent_ControlCurtain(function, btnCurtainClose, btnCurtainOpen);
                }
                else if (function.spk == SPK.ElectricTV || function.spk == SPK.TvIr || function.spk == SPK.TvXmIr
                    || function.spk == SPK.StbIr || function.spk == SPK.PjtIr)
                {
                    //btnIcon.UnSelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_blue.png";
                    //btnIcon.SelectedImagePath = $"FunctionIcon/Icon/HomeIcon/{function.IconName}_white.png";
                    Button btnPower;
                    btnPower = new Button()
                    {
                        X = Application.GetRealWidth(131),
                        Y = Application.GetRealHeight(80),
                        Width = Application.GetRealWidth(32),
                        Height = Application.GetRealWidth(32),
                        UnSelectedImagePath = "Public/PowerClose.png",
                    };
                    view.AddChidren(btnPower);
                    LoadEvent_ControlTV(function, btnPower);
                }
                else if (function.spk == SPK.MusicStandard)
                {
                    btnIcon.UnSelectedImagePath = "FunctionIcon/Music/MusicIcon.png";
                    btnIcon.SelectedImagePath = "FunctionIcon/Music/MusicOnIcon.png";
                    Button btnPower;
                    btnPower = new Button()
                    {
                        X = Application.GetRealWidth(118),
                        Y = Application.GetRealWidth(83),
                        Width = Application.GetRealWidth(44),
                        Height = Application.GetRealWidth(44),
                        UnSelectedImagePath = "FunctionIcon/Music/MusicPlayIcon.png",
                        SelectedImagePath = "FunctionIcon/Music/MusicPlayOnIcon.png",
                    };
                    view.AddChidren(btnPower);
                    var a31player = (function as UI.Music.A31MusicModel);
                    btnState.Text = a31player.A31PlayStatus.Title;
                    btnState.SelectedTextColor = CSS_Color.MainBackgroundColor;
                    btnState.TextColor = CSS_Color.MainBackgroundColor;//PromptingColor1
                    //Music.SendMethod.ReadStatus(a31player);
                    btnPower.MouseUpEventHandler = (sender, e) =>
                    {
                        if (btnPower.IsSelected)
                        {
                            btnPower.IsSelected = false;
                            Music.SendMethod.Pause(a31player);
                            a31player.A31PlayStatus.status = "pause";
                            a31player.trait_on_off.curValue = "off";
                        }
                        else
                        {
                            btnPower.IsSelected = true;
                            Music.SendMethod.Play(a31player);
                            a31player.A31PlayStatus.status = "play";
                            a31player.trait_on_off.curValue = "on";
                        }
                        UpdataFunctionStates(a31player);
                    };
                }
                else if (function.spk == SPK.ClothesHanger)
                {
                    btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerBlueIcon.png";
                    btnIcon.SelectedImagePath = "FunctionIcon/Electrical/Curtain/ClothesHangerBlueIcon.png";
                    Button btnUp;
                    btnUp = new Button()
                    {
                        X = Application.GetRealWidth(84+3),
                        Y = Application.GetRealWidth(89),
                        Width = Application.GetRealWidth(38),
                        Height = Application.GetRealWidth(38),
                        UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2.png",
                        SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerUpIcon2On.png",
                    };
                    view.AddChidren(btnUp);
                    Button btnDown;
                    btnDown = new Button()
                    {
                        X = btnUp.Right + Application.GetRealWidth(3),
                        Y = Application.GetRealWidth(89),
                        Width = Application.GetRealWidth(38),
                        Height = Application.GetRealWidth(38),
                        UnSelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2.png",
                        SelectedImagePath = "FunctionIcon/Electrical/ClothesHanger/ClothesHangerDownIcon2On.png",
                    };
                    view.AddChidren(btnDown);
                    LoadEvent_ControlClothesHanger(function, btnUp, btnDown);
                }
                else
                {
                    Button btnSwitch;
                    btnSwitch = new Button()
                    {
                        X = Application.GetRealWidth(122),
                        Y = Application.GetRealWidth(92),
                        Width = Application.GetMinRealAverage(48),
                        Height = Application.GetMinRealAverage(36),
                        UnSelectedImagePath = "Public/Switch.png",
                        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";
                    //switch (function.Spk_Prefix)
                    //{
                    //    //todo 增加设备,主页收藏图标
                    //    case FunctionCategory.Light:
                    //        #region 灯光 Light
                    //        btnIcon.UnSelectedImagePath = "FunctionIcon/Light/LightIcon.png";
                    //        btnIcon.SelectedImagePath = "FunctionIcon/Light/LightOnIcon.png";
                    //        UpdataFunctionStates(function);
                    //        #endregion
                    //        break;
                    //    case FunctionCategory.AC:
                    //        #region 空调 AC
                    //        btnIcon.UnSelectedImagePath = "FunctionIcon/AC/AcIcon.png";
                    //        btnIcon.SelectedImagePath = "FunctionIcon/AC/AcOnIcon.png";
                    //        #endregion
                    //        break;
                    //    case FunctionCategory.FloorHeat:
                    //        #region 地热
                    //        btnIcon.UnSelectedImagePath = "FunctionIcon/FloorHeating/FloorHeatingIcon.png";
                    //        btnIcon.SelectedImagePath = "FunctionIcon/FloorHeating/FloorHeatingOnIcon.png";
                    //        #endregion
                    //        break;
                    //    case FunctionCategory.Electric:
                    //        switch (function.spk)
                    //        {
                    //            case SPK.ElectricSocket:
                    //                btnIcon.UnSelectedImagePath = "FunctionIcon/Socket/SocketIcon.png";
                    //                btnIcon.SelectedImagePath = "FunctionIcon/Socket/SocketOnIcon.png";
                    //                break;
                    //            case SPK.ElectricFan:
                    //                btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/FanIcon.png";
                    //                btnIcon.SelectedImagePath = "FunctionIcon/Electrical/FanOnIcon.png";
                    //                break;
                    //            case SPK.ElectricTuyaAirCleaner:
                    //                btnIcon.SelectedImagePath = "FunctionIcon/HomePageIcon/AirCleanerIcon.png";
                    //                btnIcon.UnSelectedImagePath = "FunctionIcon/HomePageIcon/AirCleanerIconOn.png";
                    //                break;
                    //            case SPK.ElectricTuyaFan:
                    //                btnIcon.SelectedImagePath = "FunctionIcon/HomePageIcon/FanIcon.png";
                    //                btnIcon.UnSelectedImagePath = "FunctionIcon/HomePageIcon/FanIconOn.png";
                    //                break;
                    //            case SPK.ElectricTuyaWaterValve:
                    //                btnIcon.SelectedImagePath = "FunctionIcon/HomePageIcon/WaterValveIcon.png";
                    //                btnIcon.UnSelectedImagePath = "FunctionIcon/HomePageIcon/WaterValveIconOn.png";
                    //                break;
                    //            case SPK.ElectricTuyaWeepRobot:
                    //                btnIcon.SelectedImagePath = "FunctionIcon/HomePageIcon/WeepRobotIcon.png";
                    //                btnIcon.UnSelectedImagePath = "FunctionIcon/HomePageIcon/WeepRobotIconOn.png";
                    //                break;
                    //        }
                    //        break;
                    //}
                    LoadEvent_SwitchFunction(function, btnSwitch);
                }
                //取消收藏事件
                Action cannelCollect = () => {
                    function.collect = false;
                    if (function.Spk_Prefix == FunctionCategory.Music)//处理音乐主从关系
                    {
                        if ((function as Music.A31MusicModel).ServerClientType == 1)
                        {
                            (function as Music.A31MusicModel).MainPlayCollection = false;
                            Music.A31MusicModel.Save();
                        }
                    }
                    string msg = function.name + Language.StringByID(StringId.CollectionCancelled);
                    LoadDeviceFunctionControlZone();
                    function.CollectFunction();
                };
                view.AddChidren(btnSwitch);
                switch (function.functionCategory)
                var skipControlPageEvent = new PublicAssmebly().LoadEvent_SkipFunctionControlPage(function, btnCollection, btnName, btnZone);
                view.MouseUpEventHandler = skipControlPageEvent;
                btnName.MouseUpEventHandler = skipControlPageEvent;
                btnIcon.MouseUpEventHandler = skipControlPageEvent;
                btnState.MouseUpEventHandler = skipControlPageEvent;
                //电视不需要更新状态
                if(function.spk!= SPK.ElectricTV && function.spk != SPK.StbIr && function.spk != SPK.PjtIr)
                {
                    case FunctionType.Light:
                        #region 灯光 Light
                        btnIcon.UnSelectedImagePath = "FunctionIcon/Light/LightIcon.png";
                        btnIcon.SelectedImagePath = "FunctionIcon/Light/LightOnIcon.png";
                        LoadRelaySwitchEvent(function, btnSwitch, view);
                        //btnCollection.IsSelected = btnIcon.IsSelected = btnName.IsSelected = btnZone.IsSelected = btnSwitch.IsSelected = (function as Light).state == 1;
                        UpdataLightView(function as Light);
                        //btnSwitch.MouseUpEventHandler += (sender, e) =>
                        //{
                        //    var curState = !btnSwitch.IsSelected;
                        //    for (int i = 0; i < view.ChildrenCount; i++)
                        //    {
                        //        if (view.GetChildren(i).GetType() == typeof(Button))
                        //        {
                        //            var btn = view.GetChildren(i) as Button;
                        //            btn.IsSelected = curState;
                        //        }
                        //    }
                        //    new System.Threading.Thread(() =>
                        //    {
                        //        var light = function as Light;
                        //        light.state = btnSwitch.IsSelected ? 1 : 0;
                        //        Control.Send("write", function, 3);
                        //    })
                        //    { IsBackground = true }.Start();
                        //};
                        #endregion
                        break;
                    case FunctionType.Curtain:
                        #region 窗帘
                        btnIcon.UnSelectedImagePath = "FunctionIcon/Curtain/CurtainIcon.png";
                        btnIcon.SelectedImagePath = "FunctionIcon/Curtain/CurtainOnIcon.png";
                        #endregion
                        break;
                    case FunctionType.AC:
                        #region 空调 AC
                        btnIcon.UnSelectedImagePath = "FunctionIcon/AC/AcIcon.png";
                        btnIcon.SelectedImagePath = "FunctionIcon/AC/AcOnIcon.png";
                        #endregion
                        break;
                    case FunctionType.FloorHeating:
                        #region 地热
                        btnIcon.UnSelectedImagePath = "FunctionIcon/FloorHeating/FloorHeatingIcon.png";
                        btnIcon.SelectedImagePath = "FunctionIcon/FloorHeating/FloorHeatingOnIcon.png";
                        #endregion
                        break;
                    UpdataFunctionStates(function);
                }
            }
            catch (Exception ex)
@@ -606,43 +1149,45 @@
            }
        }
        /// <summary>
        /// 加载控制卡片
        /// 加载场景控制卡片
        /// </summary>
        void LoadSceneFunctionDiv(FrameLayout view, Function function)
        void LoadSceneFunctionDiv(FrameLayout view, Scene scene)
        {
            try
            {
                Button btnCoverd = new Button()
                {
                    UnSelectedImagePath = "Collection/SceneCovered.png",
                    SelectedImagePath = "Collection/SceneCoveredOn.png",
                    //Width = Application.GetRealWidth(165),
                };
                view.AddChidren(btnCoverd);
                btnCoverd.MouseDownEventHandler = (sender, e) => {
                    btnCoverd.IsSelected = true;
                };
                btnCoverd.MouseUpEventHandler = (sender, e) => {
                    new System.Threading.Thread(() => {
                        System.Threading.Thread.Sleep(200);
                        Application.RunOnMainThread(() => {
                            btnCoverd.IsSelected = false;
                        });
                    }) { IsBackground = true }.Start();
                };
                Button btnDelayIcon;
                btnDelayIcon = new Button()
                Button btnShowDelay;
                btnShowDelay = new Button()
                {
                    X = Application.GetRealWidth(12),
                    Y = Application.GetRealWidth(12),
                    Height = Application.GetRealWidth(24),
                    Width = Application.GetRealWidth(24),
                    UnSelectedImagePath = "FunctionIcon/Scene/DelayIcon.png"
                    X = Application.GetRealWidth(40),
                    Y = Application.GetRealWidth(4),
                    Height = Application.GetRealWidth(32),
                    Width = Application.GetRealWidth(100),
                    TextColor = CSS_Color.AuxiliaryColor1,
                    TextAlignment = TextAlignment.CenterLeft,
                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                };
                view.AddChidren(btnDelayIcon);
                view.AddChidren(btnShowDelay);
                Button btnSettingIcon;
                btnSettingIcon = new Button()
                {
                    X = Application.GetRealWidth(4),
                    Y = Application.GetRealWidth(4),
                    Height = Application.GetRealWidth(32),
                    Width = Application.GetRealWidth(32),
                    UnSelectedImagePath = "Public/FuncInfoSetIcon_white.png",
                };
                if (!DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
                {
                    view.AddChidren(btnSettingIcon);
                }
                Button btnName;
                btnName = new Button()
@@ -651,7 +1196,7 @@
                    Y = Application.GetRealWidth(68),
                    Width = Application.GetRealWidth(150),
                    Height = Application.GetRealHeight(24),
                    Text = function.name,
                    Text = scene.name,
                    TextSize = CSS_FontSize.TextFontSize,
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextAlignment = TextAlignment.CenterLeft,
@@ -665,13 +1210,14 @@
                    Y = btnName.Bottom,
                    Height = Application.GetRealWidth(18),
                    Width = Application.GetRealWidth(113),
                    TextColor = CSS.CSS_Color.MainBackgroundColor,
                    TextSize = CSS.CSS_FontSize.PromptFontSize_SecondaryLevel,
                    TextColor = CSS_Color.MainBackgroundColor,
                    TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
                    TextAlignment = TextAlignment.CenterLeft,
                    SelectedTextColor = CSS.CSS_Color.MainBackgroundColor,
                    Text = function.GetRoomListName(),
                    SelectedTextColor = CSS_Color.MainBackgroundColor,
                    Text = scene.GetRoomListName(),
                };
                view.AddChidren(btnZone);
                Button btnCollection;
                btnCollection = new Button()
@@ -684,7 +1230,34 @@
                    UnSelectedImagePath = "Collection/CollectionIcon.png",
                };
                view.AddChidren(btnCollection);
                //2020-12-16 如果是成员隐藏收藏功能
                //if (!DB_ResidenceData.Instance.CurrentRegion.isOtherShare)
                //{
                //    view.AddChidren(btnCollection);
                //}
                LoadEvent_SceneCollection(btnCollection, scene);
                LoadEvent_ControlScene(btnCoverd, btnName, btnZone, btnShowDelay, scene);
                btnSettingIcon.MouseUpEventHandler = (sender, e) => {
                    Action backAction = () => {
                        //LoadSceneFunctionControlZone();
                    };
                    Action refreshAction = () => {
                        btnName.Text = scene.name;
                        btnZone.Text = scene.GetRoomListName();
                        //view.BackgroundImagePath = (scene as Scene).ImagePath;
                        //2020-12-03 修改图片加载方法
                        ImageUtlis.Current.LoadLocalOrNetworkImages((scene as Scene).ImagePath, view);
                    };
                    var aep = new SceneEditPage(scene, backAction);
                    MainPage.BasePageView.AddChidren(aep);
                    aep.LoadPage( refreshAction);
                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
                };
                //场景正在倒计时执行中
                scene.SceneCountDown(btnShowDelay);
            }
            catch (Exception ex)
            {
@@ -693,4 +1266,4 @@
        }
    }
}
}