陈嘉乐
2020-09-02 652243206427f35a256400a149a1734085824cb9
ZigbeeApp/Shared/Phone/MainPage/HomeMainPageForm.cs
old mode 100644 new mode 100755
@@ -6,7 +6,6 @@
using System.Text;
using ZigBee.Device;
namespace Shared.Phone.MainPage
{
    /// <summary>
@@ -58,7 +57,7 @@
            Instance = this;
            
            //先初始化左滑房间列表界面(在反射里面初始化)
            if (ListRoomViewFrom.Instance == null) { }
            if (LeftListRoomViewFrom.Instance == null) { }
            //整个背景的上下滑动控件
            if (this.listBodyContr == null)
@@ -83,18 +82,17 @@
            this.AddNormalDeviceReportEvent();
            //添加传感器状态上报事件
            this.AddSensorDeviceReportEvent();
            //开启传感器状态还原的线程
            this.StartRecoverSenorStatuThread();
        }
        /// <summary>
        /// 初始化头部控件
        /// </summary>
        private void InitTopFrameLayoutControl()
        {
        {
            //头部容器
            base.topFrameLayout = new FrameLayout();
            base.topFrameLayout = new NormalFrameLayout();
            topFrameLayout.Y = Application.GetRealHeight(60);
            topFrameLayout.Height = Application.GetRealHeight(127);
            topFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
@@ -132,37 +130,11 @@
                    //显示选择楼层的界面
                    this.ShowSelectFloorForm(btnFloorName);
                };
            }
            //可视对讲快捷方式
            Shared.Phone.Device.VideoIntercom.VideoMachine.AccountSupportVideo(topFrameLayout);
            //var videoIntercomBtn = new Button();
            //videoIntercomBtn.Gravity = Gravity.CenterVertical;
            //videoIntercomBtn.UnSelectedImagePath = "Item/videoIntercom.png";
            //videoIntercomBtn.Width = Application.GetMinRealAverage(69);
            //videoIntercomBtn.Height = Application.GetMinRealAverage(69);
            //topFrameLayout.AddChidren(videoIntercomBtn);
            //if (UserCenterResourse.ResidenceOption.SafetyShortcut)
            //{
            //    videoIntercomBtn.X = Application.GetRealWidth(746+10);
            //}
            //else
            //{
            //    videoIntercomBtn.X = Application.GetRealWidth(850+10);
            //}
            //videoIntercomBtn.MouseUpEventHandler += (sender, e) =>
            //{
            //    var videoMachine = new Device.VideoIntercom.VideoMachine();
            //    UserView.HomePage.Instance.AddChidren(videoMachine);
            //    UserView.HomePage.Instance.PageIndex += 1;
            //    videoMachine.Show();
            //};
            //安防快捷方式
            }
            //可视对讲快捷方式
            Shared.Phone.Device.VideoIntercom.VideoMachine.AccountSupportVideo(topFrameLayout);
            //安防快捷方式
            if (UserCenterResourse.ResidenceOption.SafetyShortcut)
            {
                var btnSafety = new Controls.SafetyShortcutControl();
@@ -170,10 +142,6 @@
                btnSafety.Gravity = Gravity.CenterVertical;
                topFrameLayout.AddChidren(btnSafety);
            }
            //消息图标
            var btnMessage = new MessageManagementControl();
            btnMessage.X = Application.GetRealWidth(953);
@@ -190,7 +158,7 @@
            btnHouseName.TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor;
            btnHouseName.IsBold = true;
            btnHouseName.Text = Config.Instance.Home.Name;
            btnHouseName.Width = btnHouseName.GetRealWidthByText();
            btnHouseName.Width = btnHouseName.GetRealWidthByText() + Application.GetRealWidth(100);
            this.listBodyContr.frameTable.AddChidren(btnHouseName);
            //切换住宅
@@ -207,7 +175,8 @@
                    selectHouse.Init();
                    selectHouse.HouseAction = (houseId) =>
                    {
                        ChangeResidence(HdlResidenceLogic.Current.GetHouseByHouseId(houseId));
                        //切换住宅
                        this.ChangeResidence(HdlResidenceLogic.Current.GetHouseByHouseId(houseId));
                    };
                }
            };
@@ -292,7 +261,7 @@
            }
            //功能和场景bodyView
            this.bodyFrameLayout = new FrameLayout();
            this.bodyFrameLayout = new NormalFrameLayout();
            bodyFrameLayout.Y = functionSceneView.Bottom;
            bodyFrameLayout.Height = this.listBodyContr.frameTable.Height - functionSceneView.Bottom;
            bodyFrameLayout.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
@@ -439,10 +408,9 @@
            roomPageView.SetLeftAndRightImageView(mLeftImageView, mRightImageView);
            //当前房间
            var listRoom = HdlRoomLogic.Current.GetRoomsByCurrentFloorIdAppendLoveRoom();
            var listRoom = HdlRoomLogic.Current.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId);
            if (HdlRoomLogic.Current.NowMainPageRoom == null)
            {
                //设置第一个为初始房间
                HdlRoomLogic.Current.NowMainPageRoom = listRoom[0];
            }
            var curIndex = 0;
@@ -542,7 +510,7 @@
                //当没有绑定有网关,左滑时,点击房间列表,则不鸟它
                return;
            }
            var listRoom = HdlRoomLogic.Current.GetRoomsByCurrentFloorIdAppendLoveRoom();
            var listRoom = HdlRoomLogic.Current.GetRoomsByFloorIdAppendLoveRoom(Config.Instance.Home.CurrentFloorId);
            for (int i = 0; i < listRoom.Count; i++)
            {
                if (room.Id == listRoom[i].Id)
@@ -558,7 +526,7 @@
            //重置一下楼层名字
            if (this.btnFloorName != null)
            {
                btnFloorName.Text = HdlResidenceLogic.Current.GetFloorNameById(Config.Instance.Home.CurrentFloorId);
                btnFloorName.Text = Config.Instance.Home.GetCurrentFloorName;
            }
        }
@@ -575,8 +543,8 @@
            bodyFrameLayout.RemoveAll();
            bodyFrameLayout.Height = Application.GetRealHeight(750);
            this.listBodyContr.RecoverTableHeight();
            this.dicSceneCardControl.Clear();
            this.dicDeviceCardControl.Clear();
            this.dicSceneCardControl = new Dictionary<int, Controls.SceneCardControl>();
            this.dicDeviceCardControl = new Dictionary<string, Controls.DeviceCardCommon>();
            var listDevice = new List<CommonDevice>();
            foreach (var mainkeys in HdlRoomLogic.Current.NowMainPageRoom.ListDevice)
@@ -657,6 +625,11 @@
                    {
                        cardContr = new Controls.DeviceFreshAirCardControl();
                    }
                    // PM2.5
                    else if (device.Type == DeviceType.PMSensor)
                    {
                        cardContr = new Controls.DevicePmSensorCardControl();
                    }
                    //彩灯(调光器)
                    else if (device.Type == DeviceType.DimmableLight)
                    {
@@ -724,17 +697,31 @@
                        }
                        HdlThreadLogic.Current.RunThread(() =>
                        {
                            for (int i = 0; i < listContr.Count; i++)
                            while (listDeviceBackContr.Parent != null)
                            {
                                if (listDeviceBackContr.Parent == null)
                                bool hadSend = false;
                                for (int i = 0; i < listContr.Count; i++)
                                {
                                    return;
                                    if (listDeviceBackContr.Parent == null)
                                    {
                                        return;
                                    }
                                    //如果还没有接收到数据,则再次发送
                                    if (listContr[i].ReceiveResponeResultStatu() == false)
                                    {
                                        //发送获取状态的命令
                                        listContr[i].SendStatuComand();
                                        hadSend = true;
                                        System.Threading.Thread.Sleep(200);
                                    }
                                }
                                System.Threading.Thread.Sleep(200);
                                //发送获取状态的命令
                                listContr[i].SendStatuComand();
                                if (hadSend == false)
                                {
                                    //如果已经全部回路都接收了网关回复,则不再二次发送
                                    break;
                                }
                                System.Threading.Thread.Sleep(2000);
                            }
                        }, ShowErrorMode.NO);
                    }
                });
@@ -835,8 +822,8 @@
            bodyFrameLayout.RemoveAll();
            bodyFrameLayout.Height = Application.GetRealHeight(750);
            this.listBodyContr.RecoverTableHeight();
            this.dicSceneCardControl.Clear();
            this.dicDeviceCardControl.Clear();
            this.dicSceneCardControl = new Dictionary<int, Controls.SceneCardControl>();
            this.dicDeviceCardControl = new Dictionary<string, Controls.DeviceCardCommon>();
            var listScene = new List<SceneUI>();
            foreach (int sceneId in HdlRoomLogic.Current.NowMainPageRoom.ListSceneId)
@@ -1092,36 +1079,23 @@
        /// <param name="home">Home.</param>
        private void ChangeResidence(House home)
        {
            try
            HdlThreadLogic.Current.RunThread(() =>
            {
                CommonPage.Loading.Start();
                new System.Threading.Thread(async () =>
                {
                    Config.Instance.HomeId = home.Id;
                    Config.Instance.Home = HdlResidenceLogic.Current.GetHouseByHouseId(home.Id);
                    Global.CreateHomeDirectory(home.Id);
                    Config.Instance.Save();
                    //刷新个人中心的内存及线程
                    await UserCenterLogic.InitUserCenterMenmoryAndThread();
                this.ShowProgressBar();
                    Application.RunOnMainThread(() =>
                //切换住宅
                var result = HdlResidenceLogic.Current.SwitchResidence(home.Id);
                HdlThreadLogic.Current.RunMain(() =>
                {
                    if (result == true)
                    {
                        //刷新界面
                        this.ShowForm();
                        CommonPage.Loading.Hide();
                    });
                })
                { IsBackground = true }.Start();
            }
            catch (Exception ex)
            {
                Application.RunOnMainThread(() =>
                {
                    CommonPage.Loading.Hide();
                    Console.WriteLine(ex.Message);
                    }
                    this.CloseProgressBar();
                });
            }
            });
        }
        #endregion
@@ -1147,7 +1121,16 @@
                        //已经接收到网关的反馈 2020.05.09:删除Ack主题
                        this.dicDeviceCardControl[mainKeys].SetHadGetResponeResultStatu();
                        //刷新控件
                        this.dicDeviceCardControl[mainKeys].RefreshControlInfo(locadevice);
                        if (locadevice.Type != DeviceType.IASZone)
                        {
                            //传感器不需要属性上报(但是那个球型传感器居然会属性上报)
                            this.dicDeviceCardControl[mainKeys].RefreshControlInfo(locadevice);
                        }
                        else if (report.DeviceStatusReport.CluterID == 1)
                        {
                            //这个是电量推送
                            this.dicDeviceCardControl[mainKeys].RefreshBatteryStatu();
                        }
                    }
                }, ShowErrorMode.NO);
            });
@@ -1188,13 +1171,51 @@
                    string mainKeys = LocalDevice.Current.GetDeviceMainKeys(report);
                    if (this.dicDeviceCardControl.ContainsKey(mainKeys) == true)
                    {
                        //本地设备对象
                        var locadevice = LocalDevice.Current.GetDevice(mainKeys);
                        //刷新卡片信息
                        this.dicDeviceCardControl[mainKeys].RefreshControlInfo(locadevice);
                        //开启卡片闪烁特效
                        this.dicDeviceCardControl[mainKeys].StartCardLightAppeal();
                    }
                }, ShowErrorMode.NO);
            });
        }
        #endregion
        #region ■ 传感器状态还原_____________________
        /// <summary>
        /// 开启传感器状态还原的线程
        /// </summary>
        private void StartRecoverSenorStatuThread()
        {
            HdlThreadLogic.Current.RunThread(() =>
            {
                while (this.Parent != null)
                {
                    try
                    {
                        var dicControl = this.dicDeviceCardControl;
                        foreach (var contr in dicControl.Values)
                        {
                            //如果是传感器,则刷新状态
                            if (contr.device.Type == DeviceType.IASZone && contr.Parent != null
                              && ((IASZone)contr.device).iASInfo == null)
                            {
                                HdlThreadLogic.Current.RunMain(() =>
                                {
                                    //设备状态必须刷新
                                    string statuText = HdlDeviceOtherLogic.Current.GetDeviceStatu(contr.device);
                                    contr.SetDeviceStatuText(statuText);
                                    //传感器切换为灰色状态
                                    contr.SwitchCardStatuAppeal(false);
                                }, ShowErrorMode.NO);
                            }
                        }
                        System.Threading.Thread.Sleep(8000);
                    }
                    catch { System.Threading.Thread.Sleep(3000); }
                }
            });
        }
@@ -1208,13 +1229,16 @@
        private void ShowSelectFloorForm(NormalViewControl btnFloor)
        {
            var floorFL = new Category.SelectFloorForm();
            floorFL.CurFloorId = Config.Instance.Home.CurrentFloorId;
            this.AddChidren(floorFL);
            floorFL.Init(35, 153);
            floorFL.changeFloor = true;
            floorFL.FloorAction = (floorId) =>
            {
                btnFloor.Text = HdlResidenceLogic.Current.GetFloorNameById(floorId);
                Config.Instance.Home.CurrentFloorId = floorId;
                HdlRoomLogic.Current.NowMainPageRoom = HdlRoomLogic.Current.GetLoveRoom();
                //分类界面需要刷新
                UserView.UserPage.Instance.RefreshCategoryForm = true;
                this.ShowForm();
            };
        }