using System; using System.Collections.Generic; using Shared.Common; using Shared.Phone.UserView; using Shared.R; using ZigBee.Device; using Shared.Phone.Device.CommonForm; using Shared.Phone.Device.AC; using Shared.Phone.UserCenter.DoorLock; using Shared.Phone.Device.DeviceLogic; using Shared.Phone.UserCenter; namespace Shared.Phone.Device.Category { /// /// Category. /// public class Category : FrameLayout, ZigBee.Common.IStatus { #region ◆ 变量____________________________ /// /// The instance. /// public static Category instance; /// /// low_High /// private const int low_High = 127; /// /// 功能 /// private ButtonLineForm functionBtn; /// /// 场景 /// private ButtonLineForm sceneBtn; /// /// 自动化 /// private ButtonLineForm automationBtn; /// /// 场景功能中部背景bodyView /// public FrameLayout functionSceneBodyView; /// /// 中部背景bodyView /// public FrameLayout functionSceneAutoBodyView; /// /// 相同的设备列表 /// public VerticalScrolViewLayout deviceListScrolView; /// /// 设备是否在线标识--Online /// private readonly string deviceStatus_Online = "Online"; /// /// 设备状态开关标识--Switch /// private readonly string deviceStatus_OnOffStatus = "Switch"; /// /// 右上角添加按钮 /// private Device.CommonForm.SelectedStatuButton addBtn; /// /// 网关 /// private ZbGateway zbGateway = null; /// /// 网关列表 /// private List zbGatewayList = new List { }; /// /// 设备列表 /// private List commonDeviceList = new List { }; /// /// 是否发送控制命令成功了 /// private bool sendedControlCommand = false; /// /// 当前功能类型按钮 /// private FunctionButton tempFunctionTypeBtn; /// /// 功能类型按钮 /// //private FunctionButton functionTypeIMG; /// /// 功能类型 /// private HorizontalScrolViewLayout functionTypeScrowView; /// /// 设备类型RowLayout /// //private FrameLayout typeRowLayout; /// /// 楼层 /// private Button floorBtn; /// /// 选择楼层 /// private Button selectFloorBtn; /// /// 相同类型的设备列表 /// private Dictionary> typeDeviceDic; /// /// 设备类型的图id /// private Dictionary typeIdDic; /// /// dList /// private List devList; /// /// sceneList /// private List sceneList; #endregion #region ◆ 接口____________________________ /// /// 该接口将弃用 改用DeviceInfoChange() /// /// Common. public void Changed(CommonDevice common) { } /// /// Changeds the IL ogic status. /// /// Logic. public void ChangedILogicStatus(ZigBee.Device.Logic logic) { } /// /// Changeds the IS cene status. /// /// Scene. public void ChangedISceneStatus(Scene scene) { } /// /// 设备状态更新接口 /// type:如果为 DeviceInComingRespon:设备新上报 /// type:如果为 IASInfoReport:RemoveDeviceRespon /// type:如果为 DeviceStatusReport:设备上报 /// type:如果为 IASInfoReport:IAS安防信息上报 /// type:如果为 OnlineStatusChange: 设备在线状态更新 /// /// Common. /// Type tag. public void DeviceInfoChange(CommonDevice common, string typeTag) { //设备上报状态中 当CluterID=3,就证明该设备在线,直接标记 if (typeTag == "DeviceStatusReport") { Application.RunOnMainThread(() => { try { if (common.DeviceStatusReport.AttriBute == null || common.DeviceStatusReport.AttriBute.Count == 0) { return; } for (int i = 0; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++) { var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout; var deviceUI = LocalDevice.Current.GetDevice(rowLayout.Tag.ToString()); if (deviceUI == null) { continue; } if (deviceUI.DeviceAddr != common.DeviceAddr || deviceUI.DeviceEpoint != common.DeviceEpoint) { continue; } switch (deviceUI.Type) { case DeviceType.OnOffOutput: //开关功能 if (common.DeviceStatusReport.CluterID == 6) { var light = deviceUI as ToggleLight; light.DeviceStatusReport = common.DeviceStatusReport; light.OnOffStatus = light.DeviceStatusReport.AttriBute[0].AttriButeData; var row = rowLayout.GetChildren(0) as CategoryFunctionRow; row.IsSelected = light.OnOffStatus == 1; row.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); light.LastDateTime = DateTime.Now; } if (common.DeviceStatusReport.CluterID == 3) { deviceUI.IsOnline = 1; deviceUI.LastDateTime = DateTime.Now; } break; case DeviceType.AirSwitch: //开关功能 if (common.DeviceStatusReport.CluterID == 6) { var airSwitch = deviceUI as ZigBee.Device.AirSwitch; airSwitch.DeviceStatusReport = common.DeviceStatusReport; airSwitch.OnOffStatus = airSwitch.DeviceStatusReport.AttriBute[0].AttriButeData; var row = rowLayout.GetChildren(0) as CategoryFunctionRow; row.IsSelected = airSwitch.OnOffStatus == 1; row.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); airSwitch.LastDateTime = DateTime.Now; } if (common.DeviceStatusReport.CluterID == 3) { deviceUI.IsOnline = 1; deviceUI.LastDateTime = DateTime.Now; } break; case DeviceType.WindowCoveringDevice: if (common.DeviceStatusReport.CluterID == 258) { if (common.DeviceStatusReport.AttriBute[0].AttributeId == 0) { //窗帘类型 var rollerShade = deviceUI as Rollershade; rollerShade.DeviceStatusReport = common.DeviceStatusReport; rollerShade.WcdType = common.DeviceStatusReport.AttriBute[0].AttriButeData; rollerShade.LastDateTime = DateTime.Now; } if (common.DeviceStatusReport.AttriBute[0].AttributeId == 8) { var row = rowLayout.GetChildren(0) as CategoryFunctionForWinRow; //窗帘百分比 var rollerShade = deviceUI as Rollershade; rollerShade.DeviceStatusReport = common.DeviceStatusReport; rollerShade.WcdCurrentPositionLiftPercentage = common.DeviceStatusReport.AttriBute[0].AttriButeData; row.SetStatuText($"{Language.StringByID(R.MyInternationalizationString.Current)} { HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)}"); row.IsSelected = rollerShade.WcdCurrentPositionLiftPercentage != 0; rollerShade.LastDateTime = DateTime.Now; } } if (common.DeviceStatusReport.CluterID == 3) { deviceUI.IsOnline = 1; deviceUI.LastDateTime = DateTime.Now; } break; case DeviceType.Thermostat: //AC功能 if (common.DeviceStatusReport.CluterID == 513) { var attriButeList = common.DeviceStatusReport.AttriBute; var ac = deviceUI as ZigBee.Device.AC; ac.DeviceStatusReport = common.DeviceStatusReport; foreach (var attList in attriButeList) { var curTemp = (attList.AttriButeData / 100 < ACControlBase.Temperature_High && attList.AttriButeData / 100 > ACControlBase.Temperature_Low) ? attList.AttriButeData / 100 : ACControlBase.Temperature_Default; switch (attList.AttributeId) { case 0: ac.currentLocalTemperature = curTemp; ac.LastDateTime = DateTime.Now; break; case 17: ac.currentCoolingSetpoint = curTemp; ac.LastDateTime = DateTime.Now; break; case 18: ac.currentHeatingSetpoint = curTemp; ac.LastDateTime = DateTime.Now; break; case 4096: ac.currentAutoSetpoint = curTemp; ac.LastDateTime = DateTime.Now; break; case 28: ac.currentSystemMode = attList.AttriButeData; ac.LastDateTime = DateTime.Now; break; case 4097: //过虑网清洗标志:42 ac.CleanStatu = attList.AttriButeData == 42; break; } } var row = rowLayout.GetChildren(0) as CategoryFunctionRow; row.IsSelected = ac.currentSystemMode != 0; row.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); } if (common.DeviceStatusReport.CluterID == 514) { var ac = deviceUI as ZigBee.Device.AC; var attriButeList = common.DeviceStatusReport.AttriBute; ac.DeviceStatusReport = common.DeviceStatusReport; foreach (var attList in attriButeList) { switch (attList.AttributeId) { case 0: ac.currentFanMode = attList.AttriButeData; ac.LastDateTime = DateTime.Now; break; case 4096: ac.currentFanSwingMode = attList.AttriButeData; ac.LastDateTime = DateTime.Now; break; } } var row = rowLayout.GetChildren(0) as CategoryFunctionRow; row.IsSelected = ac.currentSystemMode != 0; row.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); } if (common.DeviceStatusReport.CluterID == 3) { var ac = deviceUI as ZigBee.Device.AC; ac.IsOnline = 1; ac.LastDateTime = DateTime.Now; } break; case DeviceType.DimmableLight: //调光灯功能 if (common.DeviceStatusReport.CluterID == 6) { var dimmableLight = deviceUI as DimmableLight; dimmableLight.DeviceStatusReport = common.DeviceStatusReport; dimmableLight.OnOffStatus = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData; var row = rowLayout.GetChildren(0) as CategoryFunctionRow; row.IsSelected = dimmableLight.OnOffStatus == 1; row.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); dimmableLight.LastDateTime = DateTime.Now; } if (common.DeviceStatusReport.CluterID == 8) { var dimmableLight = deviceUI as DimmableLight; dimmableLight.DeviceStatusReport = common.DeviceStatusReport; dimmableLight.Level = dimmableLight.DeviceStatusReport.AttriBute[0].AttriButeData; var row = rowLayout.GetChildren(0) as CategoryFunctionRow; row.IsSelected = dimmableLight.OnOffStatus == 1; row.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); dimmableLight.LastDateTime = DateTime.Now; } if (common.DeviceStatusReport.CluterID == 3) { deviceUI.IsOnline = 1; deviceUI.LastDateTime = DateTime.Now; } break; case DeviceType.TemperatureSensor: //温度 if (common.DeviceStatusReport.CluterID == 1026) { var tempera = deviceUI as TemperatureSensor; foreach (var data in common.DeviceStatusReport.AttriBute) { if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) { if (data.AttriButeData == 0) { tempera.Temperatrue = 0; } else if (data.AttriButeData > 32767) { //负数(特殊处理) string strValue = (data.AttriButeData - 65536).ToString(); //小数点需要一位 strValue = strValue.Substring(0, strValue.Length - 1); tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); } else { //小数点需要一位 string strValue = data.AttriButeData.ToString(); strValue = strValue.Substring(0, strValue.Length - 1); tempera.Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); } var row = rowLayout.GetChildren(0) as CategoryFunctionRow; row.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); } } } //湿度 if (common.DeviceStatusReport.CluterID == 1029) { var tempera = deviceUI as TemperatureSensor; foreach (var data in common.DeviceStatusReport.AttriBute) { if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) { if (data.AttriButeData == 0) { tempera.Humidity = 0; } else { //小数点需要一位(湿度没有负数) string strValue = data.AttriButeData.ToString(); strValue = strValue.Substring(0, strValue.Length - 1); tempera.Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, ".")); tempera.LastDateTime = DateTime.Now; } var row = rowLayout.GetChildren(0) as CategoryFunctionRow; row.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); } } } break; } } } catch (Exception ex) { System.Console.WriteLine($"分类设备状态-Error:{ex.Message}"); } }); } else if (typeTag == "OnlineStatusChange") { Application.RunOnMainThread(() => { try { for (int i = 0; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++) { var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout; var deviceUI = LocalDevice.Current.GetDevice(rowLayout.Tag.ToString()); if (deviceUI == null) { continue; } if (deviceUI.DeviceAddr != common.DeviceAddr || deviceUI.DeviceEpoint != common.DeviceEpoint) { continue; } switch (deviceUI.Type) { case DeviceType.OnOffOutput: deviceUI.IsOnline = common.IsOnline; deviceUI.LastDateTime = DateTime.Now; break; case DeviceType.AirSwitch: deviceUI.IsOnline = common.IsOnline; deviceUI.LastDateTime = DateTime.Now; break; case DeviceType.WindowCoveringDevice: deviceUI.LastDateTime = DateTime.Now; deviceUI.IsOnline = common.IsOnline; break; case DeviceType.DimmableLight: deviceUI.LastDateTime = DateTime.Now; deviceUI.IsOnline = common.IsOnline; break; case DeviceType.Thermostat: deviceUI.LastDateTime = DateTime.Now; deviceUI.IsOnline = common.IsOnline; break; } } } catch (Exception ex) { System.Console.WriteLine($"分类设备状态-Error:{ex.Message}"); } }); } else if (typeTag == "IASInfoReport") { Application.RunOnMainThread(() => { try { for (int i = 0; deviceListScrolView != null && i < deviceListScrolView.ChildrenCount; i++) { var rowLayout = deviceListScrolView.GetChildren(i) as RowLayout; var deviceUI = LocalDevice.Current.GetDevice(rowLayout.Tag.ToString()); if (deviceUI == null) { continue; } if (deviceUI.DeviceAddr != common.DeviceAddr || deviceUI.DeviceEpoint != common.DeviceEpoint) { continue; } switch (deviceUI.Type) { case DeviceType.IASZone: //开关功能 var ias = common as IASZone; var iAS = deviceUI as ZigBee.Device.IASZone; iAS.iASInfo = ias.iASInfo; var row = rowLayout.GetChildren(0) as CategoryFunctionRow; row.IsSelected = iAS.iASInfo?.Alarm1 == 1; row.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); iAS.LastDateTime = DateTime.Now; break; } } } catch (Exception ex) { System.Console.WriteLine($"分类设备状态-Error:{ex.Message}"); } }); } } #endregion #region ◆ 初始化__________________________ /// /// Removes from parent. /// public override void RemoveFromParent() { ZbGateway.StatusList.Remove(this); RemoveAllUpdateControlDeviceStatuAction(); base.RemoveFromParent(); } /// /// 构造方法 /// public Category() { BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor; instance = this; ZbGateway.StatusList.Add(this); } /// /// 显示界面--默认场景界面 /// /// 选中那个界面 0--功能 1--场景 2--自动化 public void Show(int selectedBtn = 1) { InitData(); RemoveAll(); #region topview var topView = new FrameLayout() { Y = Application.GetRealHeight(104), Height = Application.GetRealHeight(low_High), BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor, }; this.AddChidren(topView); var title = new Button() { X = Application.GetRealWidth(CommonFormResouce.X_Left), Height = Application.GetRealHeight(95), Width = Application.GetRealWidth(CommonFormResouce.TopTitle_Width), Gravity = Gravity.CenterVertical, TextAlignment = TextAlignment.CenterLeft, TextID = R.MyInternationalizationString.Category, TextSize = 24, TextColor = ZigbeeColor.Current.GXCTextDeepBlackColor, IsBold = true }; topView.AddChidren(title); addBtn = new SelectedStatuButton() { X = Application.GetRealWidth(953), Width = Application.GetMinRealAverage(104), Height = Application.GetMinRealAverage(104), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Item/Add_Category.png", SelectedImagePath = "Item/Add_Category.png" }; topView.AddChidren(addBtn); #endregion #region midFL var midFL = new FrameLayout { Y = topView.Bottom, Height = Application.GetRealHeight(1549), BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor }; AddChidren(midFL); var functionSceneAutoBG = new FrameLayout() { Height = Application.GetRealHeight(low_High), BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor }; midFL.AddChidren(functionSceneAutoBG); //场景 sceneBtn = new ButtonLineForm(CommonFormResouce.X_Left, 34); functionSceneAutoBG.AddChidren(sceneBtn); sceneBtn.Init(); sceneBtn.SetTitle(R.MyInternationalizationString.Scence); //功能 functionBtn = new ButtonLineForm(CommonFormResouce.X_Left + 150 + 20, 34); functionSceneAutoBG.AddChidren(functionBtn); functionBtn.Init(); functionBtn.SetTitle(R.MyInternationalizationString.Function); functionBtn.X = sceneBtn.Right; //自动化 automationBtn = new ButtonLineForm(CommonFormResouce.X_Left + 150 * 2 + 20 + 50, 34); automationBtn.Init(); automationBtn.SetTitle(R.MyInternationalizationString.Automation); automationBtn.X = functionBtn.Right; //隐藏自动化 if (UserCenter.UserCenterResourse.UserInfo.AuthorityNo != 3) { functionSceneAutoBG.AddChidren(automationBtn); } floorBtn = new Button() { X = Application.GetRealWidth(750), Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(60), Gravity = Gravity.CenterVertical, TextAlignment = TextAlignment.CenterRight, TextColor = ZigbeeColor.Current.GXCTextBlackColor, TextSize = 14, IsBold = true }; selectFloorBtn = new Button() { X = Application.GetRealWidth(950), Width = Application.GetMinRealAverage(69), Height = Application.GetMinRealAverage(69), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Item/Drop_Down.png" }; if (Config.Instance.Home.FloorDics.Count > 0) { floorBtn.Text = Config.Instance.Home.GetCurrentFloorName; functionSceneAutoBG.AddChidren(floorBtn); functionSceneAutoBG.AddChidren(selectFloorBtn); } functionSceneAutoBodyView = new FrameLayout { Y = functionSceneAutoBG.Bottom, Height = Application.GetRealHeight(1423), BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor }; midFL.AddChidren(functionSceneAutoBodyView); if (selectedBtn == 0) { addBtn.Visible = false; functionBtn.IsSelected = true; } else if (selectedBtn == 1) { addBtn.Visible = true; sceneBtn.IsSelected = true; } else if (selectedBtn == 2) { addBtn.Visible = true; automationBtn.IsSelected = true; } RefreshBodyView(); #endregion //绑定按钮事件 BindEvent(); } #endregion #region ◆ 切换/添加 功能、场景、自动化________ /// /// 绑定按钮的事件 /// private void BindEvent() { //选择功能分栏 functionBtn.NameBtn.MouseUpEventHandler += FunctionBtn_MouseUpEventHandler; //选择场景分栏 sceneBtn.NameBtn.MouseUpEventHandler += SceneBtn_MouseUpEventHandler; //选中自动化 automationBtn.NameBtn.MouseUpEventHandler += AutomationBtn_MouseUpEventHandler; //右上角添加按钮 addBtn.MouseUpEventHandler += AddBtn_MouseUpEventHandler; selectFloorBtn.MouseUpEventHandler += SelectedFloor_MouseUpEventHandler; floorBtn.MouseUpEventHandler += SelectedFloor_MouseUpEventHandler; } /// /// 选择楼层 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void SelectedFloor_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs) { var floors = new SelectFloor(); AddChidren(floors); floors.Init(580, 330, Direction.Right); floors.changeFloor = true; floors.FloorAction += (floorId) => { floorBtn.Text = Config.Instance.Home.GetFloorNameById(floorId); HdlRoomLogic.Current.CurrentRoom = HdlRoomLogic.Current.GetLoveRoom(); RefreshBodyView(); }; } /// /// 选择功能分栏 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void FunctionBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs) { functionBtn.IsSelected = true; sceneBtn.IsSelected = false; automationBtn.IsSelected = false; addBtn.Visible = false; RefreshBodyView(); } /// /// 选择场景分栏 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void SceneBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs) { functionBtn.IsSelected = false; sceneBtn.IsSelected = true; automationBtn.IsSelected = false; addBtn.Visible = true; RefreshBodyView(); } /// /// 选中自动化 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void AutomationBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs) { Common.Logic.LogicDviceList.Clear(); if (Common.Logic.LogicDviceList.Count == 0) { Common.Logic.LogicDviceList.AddRange(LocalDevice.Current.listAllDevice.ToArray()); } functionBtn.IsSelected = false; sceneBtn.IsSelected = false; automationBtn.IsSelected = true; addBtn.Visible = true; RefreshBodyView(); } /// /// 右上角添加按钮事件 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void AddBtn_MouseUpEventHandler(object sender, MouseEventArgs mouseEventArgs) { if (functionBtn.IsSelected) { //功能 } else if (sceneBtn.IsSelected) { //添加场景 Add_Scene(); } else if (automationBtn.IsSelected) { //添加自动化 Add_Automation(); } } /// /// 添加场景 /// private void Add_Scene() { var scene = new CategoryAddScene(); UserView.HomePage.Instance.AddChidren(scene); UserView.HomePage.Instance.PageIndex += 1; scene.Show(); scene.AddAction = () => { ShowScene(); }; } /// /// 添加自动化 /// private void Add_Automation() { //new一个新逻辑对象; Common.Logic.CurrentLogic = new Common.Logic(); Common.Logic.CurrentLogic.IsEnable = 1;//默认为开 Common.Logic.CurrentLogic.LogicName = Language.StringByID(MyInternationalizationString.automation1); var addLogicPage = new Shared.Phone.Device.Logic.AddLogicPage(); UserView.HomePage.Instance.AddChidren(addLogicPage); UserView.HomePage.Instance.PageIndex += 1; addLogicPage.Show(); } /// /// HidenFloor /// /// private void HidenFloor(bool statu) { selectFloorBtn.Visible = !statu; floorBtn.Visible = !statu; } #endregion #region ◆ 刷新____________________________ /// /// 刷新bodyView /// public void RefreshBodyView() { functionSceneAutoBodyView.RemoveAll(); if (functionBtn.IsSelected) { HidenFloor(false); ShowFunction(); } else if (sceneBtn.IsSelected) { HidenFloor(false); ShowScene(); } else if (automationBtn.IsSelected) { HidenFloor(true); ShowAutotion(); } } /// /// InitData /// private void InitData() { typeDeviceDic = new Dictionary> { }; typeIdDic = new Dictionary { }; } /// /// RefreshData /// private void RefreshData(Common.Room room) { devList = HdlRoomLogic.Current.GetRoomListDevice(room); sceneList = HdlSceneLogic.Current.GetRoomSceneList(room); typeDeviceDic.Clear(); typeIdDic.Clear(); foreach (var device in devList) { var info = Common.LocalDevice.Current.GetDeviceBelongEnumInfo(device); if (info.BeloneType == DeviceBeloneType.A干接点 || info.BeloneType == DeviceBeloneType.A中继器) { continue; } if (typeDeviceDic.ContainsKey(info.BeloneTextId) == false) { var sameDevList = new List { }; sameDevList.Add(device); typeDeviceDic[info.BeloneTextId] = sameDevList; } else { typeDeviceDic[info.BeloneTextId].Add(device); } typeIdDic[info.BeloneTextId] = info.ConcreteType; } } #endregion #region ◆ 功能____________________________ /// /// 功能 /// public void ShowFunction() { AddRoomView(); } /// /// 提示没有功能 /// private void ShowNoFunctionTip() { var noFunction = new Button() { Y = Application.GetRealHeight(320), Width = Application.GetMinRealAverage(757), Height = Application.GetMinRealAverage(435), UnSelectedImagePath = "Item/NoFunction.png", Gravity = Gravity.CenterHorizontal }; functionSceneBodyView.AddChidren(noFunction); var noFunctionTip = new Button() { Y = noFunction.Bottom + Application.GetRealHeight(32), Height = Application.GetRealHeight(200), Width = Application.GetRealWidth(700), Gravity = Gravity.CenterHorizontal, Text = Language.StringByID(R.MyInternationalizationString.NoFunction).Replace("{\\r\\n}", "\r\n"), TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, IsMoreLines = true }; functionSceneBodyView.AddChidren(noFunctionTip); } /// /// RefreshFunction /// /// private void RefreshFunction(Common.Room room) { RefreshData(room); //移除监听 RemoveAllUpdateControlDeviceStatuAction(); functionSceneBodyView.RemoveAll(); if (typeDeviceDic.Count == 0) { ShowNoFunctionTip(); } else { var functionTypeView1 = new FrameLayout { X = Application.GetRealWidth(CommonFormResouce.X_Left), Height = Application.GetRealHeight(160), Width = Application.GetRealWidth(1028), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor }; functionSceneBodyView.AddChidren(functionTypeView1); functionTypeView1.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft); var functionTypeView2 = new FrameLayout { X = Application.GetRealWidth(CommonFormResouce.X_Left), Y = Application.GetRealHeight(150), Height = Application.GetRealHeight(279 - 150), Width = Application.GetRealWidth(1028), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor }; functionSceneBodyView.AddChidren(functionTypeView2); functionTypeView2.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerBottomLeft); functionTypeScrowView = new HorizontalScrolViewLayout { X = Application.GetRealWidth(CommonFormResouce.X_Left), Height = Application.GetRealHeight(279), Width = Application.GetRealWidth(1028), }; functionSceneBodyView.AddChidren(functionTypeScrowView); deviceListScrolView = new VerticalScrolViewLayout { X = Application.GetRealWidth(CommonFormResouce.X_Left), Y = Application.GetRealHeight(35 + 279), Width = Application.GetRealWidth(1028), Height = Application.GetRealHeight(942), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor }; functionSceneBodyView.AddChidren(deviceListScrolView); deviceListScrolView.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft); tempFunctionTypeBtn = new FunctionButton(); tempFunctionTypeBtn.Init("", ""); foreach (var deviceType in typeIdDic) { var typeRowLayout = new FrameLayout() { Width = Application.GetRealWidth(220), }; functionTypeScrowView.AddChidren(typeRowLayout); var functionTypeIMG = new FunctionButton() { Tag = deviceType.Key }; string imgPath = string.Empty; string imgSeletedPath = string.Empty; Common.LocalDevice.Current.GetDeviceObjectIcon(deviceType.Value, ref imgPath, ref imgSeletedPath); functionTypeIMG.Init(imgPath, imgSeletedPath); functionTypeIMG.SetTitle(deviceType.Key); typeRowLayout.AddChidren(functionTypeIMG); functionTypeIMG.ClickBtn.MouseUpEventHandler += ShowSameTypeFunction; if (functionTypeScrowView.ChildrenCount == 1) { ShowSameTypeFunction(functionTypeIMG.ImageBtn, null); } } } } /// /// 显示相同类型的功能 /// /// typeSender. /// The ${ParameterType} instance containing the event data. private void ShowSameTypeFunction(object typeSender, MouseEventArgs mouseEventArgs) { tempFunctionTypeBtn.IsSelected = false; tempFunctionTypeBtn = (typeSender as Button).Parent as FunctionButton; ((typeSender as Button).Parent as FunctionButton).IsSelected = true; deviceListScrolView.RemoveAll(); var sameTypeList = new List { }; sameTypeList = typeDeviceDic[int.Parse((typeSender as Button).Tag.ToString())]; for (int i = 0; i < sameTypeList.Count; i++) { var deviceUI = sameTypeList[i]; new System.Threading.Thread(() => { Application.RunOnMainThread(() => { try { var deviceTypeRowLayout = new RowLayout() { Height = Application.GetRealHeight(127 + 35), LineColor = ZigbeeColor.Current.GXCClearColor, Tag = LocalDevice.Current.GetDeviceMainKeys(deviceUI), SubViewWidth = Application.GetRealWidth(184) }; deviceListScrolView.AddChidren(deviceTypeRowLayout); if (deviceUI.Type == DeviceType.OnOffOutput) { //灯 var light = deviceUI as ToggleLight; if (light.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (light.Gateway.IsVirtual) { UserHomeView.ReadStatus(light, () => { ReadDeviceAttributeLogic.Instance.SendLightStatuComand(deviceUI); }); } else { //防止短时间内多次读取状态 if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - light.LastDateTime).TotalSeconds) { ReadDeviceAttributeLogic.Instance.SendLightStatuComand(deviceUI); } } }) { IsBackground = true }.Start(); var deviceRow = new CategoryFunctionRow(0, 35); deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); deviceRow.IsSelected = light.OnOffStatus == 1; deviceTypeRowLayout.AddChidren(deviceRow); deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) => { zbGateway = deviceUI.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI); (send2 as Button).IsSelected = !(send2 as Button).IsSelected; deviceRow.IsSelected = (send2 as Button).IsSelected; if ((send2 as Button).IsSelected) { light.SwitchControl(1); } else { light.SwitchControl(0); } deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(deviceUI, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) => { var lightControl = new Phone.Device.Light.OnOffControl(); UserView.HomePage.Instance.AddChidren(lightControl); UserView.HomePage.Instance.PageIndex += 1; lightControl.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); lightControl.action += (curDev, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; EventHandler deviceDetailHandler = (send2, e2) => { var detailInfo = new Device.CommonForm.DeviceDetailInfo { }; UserView.HomePage.Instance.AddChidren(detailInfo); UserView.HomePage.Instance.PageIndex += 1; detailInfo.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); detailInfo.EditAction += (curDevice, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; var editBtn = new CommonForm.RowLayoutEditButton() { Tag = LocalDevice.Current.GetDeviceMainKeys(deviceUI) }; if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false) { deviceTypeRowLayout.AddRightView(editBtn); editBtn.MouseUpEventHandler += deviceDetailHandler; } } } else if (deviceUI.Type == DeviceType.AirSwitch) { //空气开关 var airSwitch = deviceUI as AirSwitch; if (airSwitch.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (airSwitch.Gateway.IsVirtual) { UserHomeView.ReadStatus(airSwitch, () => { ReadDeviceAttributeLogic.Instance.SendLightStatuComand(deviceUI); }); } else { if ((DateTime.Now - airSwitch.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan) { ReadDeviceAttributeLogic.Instance.SendLightStatuComand(deviceUI); } } }) { IsBackground = true }.Start(); var deviceRow = new CategoryFunctionRow(0, 35); deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); deviceRow.IsSelected = airSwitch.OnOffStatus == 1; deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); deviceTypeRowLayout.AddChidren(deviceRow); deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) => { zbGateway = deviceUI.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI); (send2 as Button).IsSelected = !(send2 as Button).IsSelected; deviceRow.IsSelected = (send2 as Button).IsSelected; if ((send2 as Button).IsSelected) { airSwitch.SwitchControl(1); } else { airSwitch.SwitchControl(0); } deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(deviceUI, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) => { var lightControl = new Phone.Device.Light.AirSwitchControl(); UserView.HomePage.Instance.AddChidren(lightControl); UserView.HomePage.Instance.PageIndex += 1; lightControl.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); lightControl.action += (curDev, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; EventHandler deviceDetailHandler = (send2, e2) => { var detailInfo = new Device.CommonForm.DeviceDetailInfo { }; UserView.HomePage.Instance.AddChidren(detailInfo); UserView.HomePage.Instance.PageIndex += 1; detailInfo.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); detailInfo.EditAction += (curDevice, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; var editBtn = new CommonForm.RowLayoutEditButton() { Tag = LocalDevice.Current.GetDeviceMainKeys(deviceUI) }; if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false) { deviceTypeRowLayout.AddRightView(editBtn); editBtn.MouseUpEventHandler += deviceDetailHandler; } } } else if (deviceUI.Type == DeviceType.DimmableLight) { //调光灯 var dimmableLight = deviceUI as ZigBee.Device.DimmableLight; if (dimmableLight.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (dimmableLight.Gateway.IsVirtual) { UserHomeView.ReadStatus(dimmableLight, () => { ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(deviceUI); }); } else { if ((DateTime.Now - dimmableLight.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan) { ReadDeviceAttributeLogic.Instance.SendDimmableLightStatuComand(deviceUI); } } }) { IsBackground = true }.Start(); var deviceRow = new CategoryFunctionRow(0, 35); deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); deviceRow.IsSelected = dimmableLight.OnOffStatus == 1; deviceTypeRowLayout.AddChidren(deviceRow); deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) => { zbGateway = deviceUI.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI); (send2 as Button).IsSelected = !(send2 as Button).IsSelected; deviceRow.IsSelected = (send2 as Button).IsSelected; if ((send2 as Button).IsSelected) { dimmableLight.SwitchControl(1); } else { dimmableLight.SwitchControl(0); } deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(deviceUI, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) => { var dimmableLightControl = new Phone.Device.Light.DimmableLightControl(); UserView.HomePage.Instance.AddChidren(dimmableLightControl); UserView.HomePage.Instance.PageIndex += 1; UserView.HomePage.Instance.ScrollEnabled = false; dimmableLightControl.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); dimmableLightControl.action += (curDev, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; EventHandler deviceDetailHandler = (send2, e2) => { var detailInfo = new Device.CommonForm.DeviceDetailInfo { }; UserView.HomePage.Instance.AddChidren(detailInfo); UserView.HomePage.Instance.PageIndex += 1; detailInfo.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); detailInfo.EditAction += (curDevice, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; var editBtn = new CommonForm.RowLayoutEditButton() { Tag = LocalDevice.Current.GetDeviceMainKeys(deviceUI) }; if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false) { deviceTypeRowLayout.AddRightView(editBtn); editBtn.MouseUpEventHandler += deviceDetailHandler; } } } else if (deviceUI.Type == DeviceType.Thermostat) { //空调 var ac = deviceUI as ZigBee.Device.AC; if (ac.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (ac.Gateway.IsVirtual) { //发送读取状态命令 UserView.UserHomeView.ReadStatus(ac, () => { ReadDeviceAttributeLogic.Instance.SendACStatuComand(deviceUI); }); } else { //防止短时间内多次读取设备状态 if ((DateTime.Now - ac.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan) { ReadDeviceAttributeLogic.Instance.SendACStatuComand(deviceUI); } } }) { IsBackground = true }.Start(); var deviceRow = new CategoryFunctionRow(0, 35); deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); deviceRow.IsSelected = ac.currentSystemMode != 1; deviceTypeRowLayout.AddChidren(deviceRow); deviceRow.SwitchBtn.MouseUpEventHandler += (send2, e2) => { zbGateway = deviceUI.Gateway; sendedControlCommand = false; zbGateway.ReportAction += UpdateDeviceControllStatu; AddZbGateway(zbGatewayList, zbGateway, commonDeviceList, deviceUI); (send2 as Button).IsSelected = !(send2 as Button).IsSelected; deviceRow.IsSelected = (send2 as Button).IsSelected; if ((send2 as Button).IsSelected) { ac.Open(); } else { ac.Close(); } deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); //控制延时回调 HdlDeviceOtherLogic.Current.SendCommandDelayAction(deviceUI, () => { if (Parent == null) { return; } RemoveUpdateControlDeviceStatuAction(zbGateway); if (sendedControlCommand == false) { HdlDeviceOtherLogic.Current.ShowStatuTip(R.MyInternationalizationString.FAIL); } }); }; deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) => { var acControl = new Phone.Device.AC.ACControl(); UserView.HomePage.Instance.AddChidren(acControl); UserView.HomePage.Instance.PageIndex += 1; UserView.HomePage.Instance.ScrollEnabled = false; acControl.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); acControl.action += (curDev, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; EventHandler deviceDetailHandler = (send2, e2) => { var detailInfo = new Device.CommonForm.DeviceDetailInfo { }; UserView.HomePage.Instance.AddChidren(detailInfo); UserView.HomePage.Instance.PageIndex += 1; detailInfo.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); detailInfo.EditAction += (curDevice, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; var editBtn = new CommonForm.RowLayoutEditButton() { Tag = LocalDevice.Current.GetDeviceMainKeys(deviceUI) }; if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false) { deviceTypeRowLayout.AddRightView(editBtn); editBtn.MouseUpEventHandler += deviceDetailHandler; } } } else if (deviceUI.Type == DeviceType.WindowCoveringDevice) { //卷帘 var rollerShade = deviceUI as ZigBee.Device.Rollershade; if (rollerShade.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (rollerShade.Gateway.IsVirtual) { UserHomeView.ReadStatus(rollerShade, () => { ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(deviceUI); }); } else { //防止短时间内多次读取 if ((DateTime.Now - rollerShade.LastDateTime).TotalSeconds > CommonPage.ReadDeviceStatuSpan) { ReadDeviceAttributeLogic.Instance.SendCurtainStatuComand(deviceUI); } } }) { IsBackground = true }.Start(); var deviceRow = new CategoryFunctionForWinRow(0, 35); deviceRow.Init(deviceUI); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); deviceRow.IsSelected = rollerShade.WcdCurrentPositionLiftPercentage != 0; deviceRow.SetRollerShadeIcon(rollerShade.WcdType); deviceTypeRowLayout.AddChidren(deviceRow); if (rollerShade.WcdType == -1) { CommonPage.Loading.Start(); new System.Threading.Thread(() => { Rollershade.ReadWcdTypeAction(rollerShade, () => { Application.RunOnMainThread(() => { deviceRow.SetRollerShadeIcon(rollerShade.WcdType); CommonPage.Loading.Hide(); }); }); }) { IsBackground = true }.Start(); } deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) => { var rollerShadeControl = new Phone.Device.Curtain.RollerShadeControl(); UserView.HomePage.Instance.AddChidren(rollerShadeControl); UserView.HomePage.Instance.PageIndex += 1; UserView.HomePage.Instance.ScrollEnabled = false; rollerShadeControl.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); rollerShadeControl.action += (curDev, curRoom) => { ReFreshDeviceActionForWin(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; EventHandler deviceDetailHandler = (send2, e2) => { var detailInfo = new Device.CommonForm.DeviceDetailInfo { }; UserView.HomePage.Instance.AddChidren(detailInfo); UserView.HomePage.Instance.PageIndex += 1; detailInfo.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); detailInfo.EditAction += (curDevice, curRoom) => { ReFreshDeviceActionForWin(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; var editBtn = new CommonForm.RowLayoutEditButton() { Tag = LocalDevice.Current.GetDeviceMainKeys(deviceUI) }; if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false) { deviceTypeRowLayout.AddRightView(editBtn); editBtn.MouseUpEventHandler += deviceDetailHandler; } } } else if (deviceUI.Type == DeviceType.DoorLock) { var deviceRow = new CategoryFunctionRow(0, 35); deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); deviceRow.HideSwitchBtn(true); deviceTypeRowLayout.AddChidren(deviceRow); deviceRow.ClickBtn.MouseUpEventHandler += (send2, e2) => { var userDoorLockPage = new UserDoorLockPage(HdlRoomLogic.Current.CurrentRoom, deviceUI); HomePage.Instance.AddChidren(userDoorLockPage); HomePage.Instance.PageIndex += 1; userDoorLockPage.Show(); }; EventHandler deviceDetailHandler = (send2, e2) => { var detailInfo = new Device.CommonForm.DeviceDetailInfo { }; UserView.HomePage.Instance.AddChidren(detailInfo); UserView.HomePage.Instance.PageIndex += 1; detailInfo.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); detailInfo.EditAction += (curDevice, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; var editBtn = new CommonForm.RowLayoutEditButton() { Tag = LocalDevice.Current.GetDeviceMainKeys(deviceUI) }; if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false) { deviceTypeRowLayout.AddRightView(editBtn); editBtn.MouseUpEventHandler += deviceDetailHandler; } } else if (deviceUI.Type == DeviceType.IASZone) { var deviceRow = new CategoryFunctionRow(0, 35); deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); deviceRow.IsSelected = (deviceUI as IASZone).iASInfo?.Alarm1 == 1; deviceRow.HideSwitchBtn(true); deviceTypeRowLayout.AddChidren(deviceRow); EventHandler deviceDetailHandler = (send2, e2) => { var detailInfo = new Device.CommonForm.DeviceDetailInfo { }; UserView.HomePage.Instance.AddChidren(detailInfo); UserView.HomePage.Instance.PageIndex += 1; detailInfo.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); detailInfo.EditAction += (curDevice, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; var editBtn = new CommonForm.RowLayoutEditButton() { Tag = LocalDevice.Current.GetDeviceMainKeys(deviceUI) }; if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false) { deviceTypeRowLayout.AddRightView(editBtn); editBtn.MouseUpEventHandler += deviceDetailHandler; } } else if (deviceUI.Type == DeviceType.TemperatureSensor) { var tempera = deviceUI as TemperatureSensor; if (tempera.Gateway != null) { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(100 * i); if (tempera.Gateway.IsVirtual) { UserHomeView.ReadStatus(tempera, () => { if (tempera.SensorDiv == 1) { ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(deviceUI); } else if (tempera.SensorDiv == 2) { ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(deviceUI); } }); } else { if (CommonPage.ReadDeviceStatuSpan < (DateTime.Now - tempera.LastDateTime).TotalSeconds) { if (tempera.SensorDiv == 1) { ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(deviceUI); } else if (tempera.SensorDiv == 2) { ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(deviceUI); } } } }) { IsBackground = true }.Start(); var deviceRow = new CategoryFunctionRow(0, 35); deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); deviceRow.IsSelected = false; deviceRow.HideSwitchBtn(true); deviceTypeRowLayout.AddChidren(deviceRow); EventHandler deviceDetailHandler = (send2, e2) => { var detailInfo = new Device.CommonForm.DeviceDetailInfo { }; UserView.HomePage.Instance.AddChidren(detailInfo); UserView.HomePage.Instance.PageIndex += 1; detailInfo.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); detailInfo.EditAction += (curDevice, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; var editBtn = new CommonForm.RowLayoutEditButton() { Tag = LocalDevice.Current.GetDeviceMainKeys(deviceUI) }; if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false) { deviceTypeRowLayout.AddRightView(editBtn); editBtn.MouseUpEventHandler += deviceDetailHandler; } } } else { var deviceRow = new CategoryFunctionRow(0, 35); deviceRow.Init(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); deviceRow.SetStatuText(HdlDeviceOtherLogic.Current.GetDeviceStatu(deviceUI)); deviceRow.HideSwitchBtn(true); deviceTypeRowLayout.AddChidren(deviceRow); EventHandler deviceDetailHandler = (send2, e2) => { var detailInfo = new Device.CommonForm.DeviceDetailInfo { }; UserView.HomePage.Instance.AddChidren(detailInfo); UserView.HomePage.Instance.PageIndex += 1; detailInfo.Show(deviceUI, HdlRoomLogic.Current.CurrentRoom); detailInfo.EditAction += (curDevice, curRoom) => { ReFreshDeviceAction(deviceUI, curRoom, sameTypeList, deviceListScrolView, deviceRow); }; }; var editBtn = new CommonForm.RowLayoutEditButton() { Tag = LocalDevice.Current.GetDeviceMainKeys(deviceUI) }; if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false) { deviceTypeRowLayout.AddRightView(editBtn); editBtn.MouseUpEventHandler += deviceDetailHandler; } } //删除设备 EventHandler delEvent = (delSender, delE) => { var alert = new UserCenter.ShowMsgControl(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.DeleteFunction)); alert.Show(); alert.ConfirmClickEvent += () => { if (HdlRoomLogic.Current.CurrentRoom.IsLove) { HdlRoomLogic.Current.DeleteLoveDevice(deviceUI); deviceListScrolView.RemoveViewByTag((delSender as Button).Tag); sameTypeList.Remove(deviceUI); } else { HdlRoomLogic.Current.DeleteDevice(deviceUI); deviceListScrolView.RemoveViewByTag((delSender as Button).Tag); sameTypeList.Remove(deviceUI); HdlRoomLogic.Current.DeleteLoveDevice(deviceUI); } if (sameTypeList.Count == 0) { RefreshBodyView(); } }; }; var delBtn = new CommonForm.RowLayoutDeleteButton() { Tag = LocalDevice.Current.GetDeviceMainKeys(deviceUI) }; if (HdlRoomLogic.Current.CurrentRoom.IsSharedRoom == false) { deviceTypeRowLayout.AddRightView(delBtn); delBtn.MouseUpEventHandler += delEvent; } } catch { } }); }) { IsBackground = true }.Start(); } } /// /// ReFreshDeviceAction /// /// /// /// /// private void ReFreshDeviceAction(CommonDevice deviceUI, Common.Room curRoom, List sameTypeList, VerticalScrolViewLayout devListScrolView, CategoryFunctionRow deviceRow) { if (HdlRoomLogic.Current.CurrentRoom.IsLove) { deviceRow.SetDeviceIcon(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); if (HdlRoomLogic.Current.IsCollectInRoom(deviceUI) == false) { devListScrolView.RemoveViewByTag(deviceUI); sameTypeList.Remove(deviceUI); if (sameTypeList.Count == 0) { RefreshFunction(HdlRoomLogic.Current.CurrentRoom); } } } else { if (curRoom.Id != HdlRoomLogic.Current.CurrentRoom.Id) { HdlRoomLogic.Current.DeleteDevice(deviceUI); devListScrolView.RemoveViewByTag(deviceUI); sameTypeList.Remove(deviceUI); if (sameTypeList.Count == 0) { RefreshFunction(HdlRoomLogic.Current.CurrentRoom); } } else { deviceRow.SetDeviceIcon(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); } } } /// /// ReFreshDeviceAction /// /// /// /// /// private void ReFreshDeviceActionForWin(CommonDevice deviceUI, Common.Room curRoom, List sameTypeList, VerticalScrolViewLayout devListScrolView, CategoryFunctionForWinRow deviceRow) { if (HdlRoomLogic.Current.CurrentRoom.IsLove) { deviceRow.SetDeviceIcon(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); if (HdlRoomLogic.Current.IsCollectInRoom(deviceUI) == false) { devListScrolView.RemoveViewByTag(deviceUI); sameTypeList.Remove(deviceUI); if (sameTypeList.Count == 0) { RefreshFunction(HdlRoomLogic.Current.CurrentRoom); } } } else { if (curRoom.Id != HdlRoomLogic.Current.CurrentRoom.Id) { HdlRoomLogic.Current.DeleteDevice(deviceUI); devListScrolView.RemoveViewByTag(deviceUI); sameTypeList.Remove(deviceUI); if (sameTypeList.Count == 0) { RefreshFunction(HdlRoomLogic.Current.CurrentRoom); } } else { deviceRow.SetDeviceIcon(deviceUI.IconPath, deviceUI.OnlineIconPath); deviceRow.SetTitle(Common.LocalDevice.Current.GetDeviceEpointName(deviceUI)); } } } /// /// AddRoomView /// private void AddRoomView() { var roomFL = new HorizontalScrolViewLayout() { X = Application.GetRealWidth(CommonFormResouce.X_Left), Height = Application.GetRealHeight(170), Width = Application.GetRealWidth(CommonPage.AppRealWidth - CommonFormResouce.X_Left), BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor }; functionSceneAutoBodyView.AddChidren(roomFL); //功能和场景bodyView functionSceneBodyView = new FrameLayout() { Y = roomFL.Bottom, Height = Application.GetRealHeight(973 + 279), BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor }; functionSceneAutoBodyView.AddChidren(functionSceneBodyView); RoomButton curBtn = new RoomButton(0, 0); var lisrRoom = HdlRoomLogic.Current.GetRoomsByCurrentFloorIdAppendLoveRoom(); foreach (var room in lisrRoom) { var row = new FrameLayout() { Width = Application.GetRealWidth(255), Height = Application.GetRealHeight(167) }; roomFL.AddChidren(row); RoomButton roomBtn = new RoomButton(0, 0); roomBtn.Gravity = Gravity.Center; roomBtn.Init(); roomBtn.SetTitle(room.Name); row.AddChidren(roomBtn); if (room.Id == HdlRoomLogic.Current.CurrentRoom.Id) { roomBtn.IsSelected = true; curBtn = roomBtn; if (sceneBtn.IsSelected) { RefreshScene(room); } else { RefreshFunction(room); } } roomBtn.ButtonClickEvent += (sender, e) => { if (sender == curBtn) { return; } sender.IsSelected = true; curBtn.IsSelected = false; curBtn = sender; HdlRoomLogic.Current.CurrentRoom = room; if (sceneBtn.IsSelected) { RefreshScene(room); } else { RefreshFunction(room); } }; } } #endregion #region ◆ 场景____________________________ /// /// 选择场景--所有房间的所有场景 /// public void ShowScene() { AddRoomView(); } /// /// RefreshScene /// /// public void RefreshScene(Common.Room room) { RefreshData(room); functionSceneBodyView.RemoveAll(); if (sceneList.Count == 0) { ShowNoSceneTip(); } else { var sceneScrolView = new VerticalScrolViewLayout { }; functionSceneBodyView.AddChidren(sceneScrolView); foreach (var scene in sceneList) { var sceneView = new SceneCategoryView(0, 0); sceneScrolView.AddChidren(sceneView); sceneView.Init(scene, room); GetDelayScene(sceneScrolView); } } } /// /// 显示没有场景 /// private void ShowNoSceneTip() { var noFunction = new Button() { Y = Application.GetRealHeight(320), Width = Application.GetMinRealAverage(757), Height = Application.GetMinRealAverage(435), UnSelectedImagePath = "Item/NoFunction.png", Gravity = Gravity.CenterHorizontal }; functionSceneBodyView.AddChidren(noFunction); var noScenceTip = new Button() { Y = noFunction.Bottom + Application.GetRealHeight(32), Height = Application.GetRealHeight(200), Width = Application.GetRealWidth(700), Gravity = Gravity.CenterHorizontal, Text = Language.StringByID(R.MyInternationalizationString.NoScene).Replace("{\\r\\n}", "\r\n"), TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, IsMoreLines = true }; functionSceneBodyView.AddChidren(noScenceTip); } /// /// GetDelayScene /// /// private async void GetDelayScene(VerticalScrolViewLayout scrolViewLayout) { var catDelaySceneResponseAllData = await Scene.CatDelaySceneAsync(); if (catDelaySceneResponseAllData == null) { return; } var catDelaySceneResponseData = catDelaySceneResponseAllData.catDelaySceneResponseData; if (catDelaySceneResponseData == null || catDelaySceneResponseData.DelayScenesList.Count == 0) { return; } var delayList = catDelaySceneResponseData.DelayScenesList; for (int i = 0; scrolViewLayout != null && i < scrolViewLayout.ChildrenCount; i++) { var sceneView = scrolViewLayout.GetChildren(i) as SceneCategoryView; foreach (var delayScenesListResponseInfo in delayList) { if (delayScenesListResponseInfo.ScenesId == sceneView.scene.Id) { sceneView.scene.RemainTime = delayScenesListResponseInfo.RemainTime; var remainTime = delayScenesListResponseInfo.RemainTime; if (remainTime > 0) { new System.Threading.Thread(() => { while (remainTime-- > 0) { System.Threading.Thread.Sleep(1000); Application.RunOnMainThread(() => { sceneView.SetTimeText(CommonFormResouce.GetTimeString(remainTime)); }); } Application.RunOnMainThread(() => { sceneView.scene.RemainTime = 0; sceneView.SetTimeImage(); }); }) { IsBackground = true }.Start(); } break; } } } } /// /// GetExecScene /// /// private void GetExecScene(VerticalScrolViewLayout scrolViewLayout) { new System.Threading.Thread(() => { }) { IsBackground = true }.Start(); } #endregion #region ◆ 自动化__________________________ /// /// 自动化功能代码入口 /// private void ShowAutotion() { // functionSceneAutoBodyView.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor; #region ---推荐模板的组件 //推荐模板背景控件 var bjFrameLayout = new FrameLayout { Width = Application.GetRealWidth(1080 - 58), Height = Application.GetRealHeight(170), BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor, X = Application.GetRealWidth(58), //Radius = (uint)Application.GetRealHeight(50), Y = Application.GetRealHeight(30), }; functionSceneAutoBodyView.AddChidren(bjFrameLayout); bjFrameLayout.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerBottomLeft); //图标控件 var sigBtn = new Button { Width = Application.GetMinRealAverage(84), Height = Application.GetMinRealAverage(84), UnSelectedImagePath = "ZigeeLogic/sign.png", X = Application.GetRealWidth(58), Gravity = Gravity.CenterVertical, }; bjFrameLayout.AddChidren(sigBtn); //推荐模板文本控件 var recommendtextBtn = new Button { Width = Application.GetMinRealAverage(300), Height = Application.GetMinRealAverage(84), X = sigBtn.Right + Application.GetRealWidth(35), TextAlignment = TextAlignment.CenterLeft, //Text = "推荐模板", TextID = MyInternationalizationString.logictemplate, Gravity = Gravity.CenterVertical, TextColor = ZigbeeColor.Current.LogicBtnSelectedColor, TextSize = 15, }; bjFrameLayout.AddChidren(recommendtextBtn); //推荐模板开关控件 var recommendswitchBtn = new Button { Width = Application.GetMinRealAverage(104), Height = Application.GetMinRealAverage(63), UnSelectedImagePath = "ZigeeLogic/logicclose.png", SelectedImagePath = "ZigeeLogic/logicopen.png", X = bjFrameLayout.Width - Application.GetRealWidth(104 + 58), Gravity = Gravity.CenterVertical, }; bjFrameLayout.AddChidren(recommendswitchBtn); #endregion //默认推荐模板左右可滑控件 var scenehorizontalScrol = new HorizontalScrolViewLayout { Width = Application.GetRealWidth(1080 - 58), X = Application.GetRealWidth(58), Y = bjFrameLayout.Bottom + Application.GetRealHeight(30), Height = Application.GetRealHeight(0), }; functionSceneAutoBodyView.AddChidren(scenehorizontalScrol); //显示自动化列表上下可滑控件 var logicScrolView = new VerticalRefreshLayout//VerticalScrolViewLayout { Height = functionSceneAutoBodyView.Height - bjFrameLayout.Height - bjFrameLayout.Y - scenehorizontalScrol.Height - Application.GetRealHeight(30), //BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor,/ X = Application.GetRealWidth(58), Y = scenehorizontalScrol.Bottom, }; functionSceneAutoBodyView.AddChidren(logicScrolView); logicScrolView.SetCornerWithSameRadius(Application.GetRealHeight(58), HDLUtils.RectCornerTopLeft); bool no = false; //显示默认模板的界面事件 recommendswitchBtn.MouseUpEventHandler += (sender, e) => { int Yheight = 0; recommendswitchBtn.IsSelected = !recommendswitchBtn.IsSelected; scenehorizontalScrol.RemoveAll(); if (recommendswitchBtn.IsSelected) { no = true; scenehorizontalScrol.Height = Application.GetRealHeight(246); Yheight = 20; for (int i = 1; i < 4; i++) { var frameLayout = new FrameLayout { Width = Application.GetMinRealAverage(369 + 46), Height = Application.GetMinRealAverage(246), }; scenehorizontalScrol.AddChidren(frameLayout); var logiciocnBtn = new Button { Width = Application.GetMinRealAverage(369), Height = Application.GetMinRealAverage(246), UnSelectedImagePath = "ZigeeLogic/" + i + ".png", Tag = i, }; frameLayout.AddChidren(logiciocnBtn); var logicnameBtn = new Button { Width = Application.GetMinRealAverage(250), Height = Application.GetMinRealAverage(80), X = Application.GetRealWidth(23), Y = Application.GetRealHeight(246 - 23 - 80), TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, TextSize = 14, }; frameLayout.AddChidren(logicnameBtn); if (i == 1) { logicnameBtn.Text = Language.StringByID(MyInternationalizationString.onlight); } else if (i == 2) { logicnameBtn.Text = Language.StringByID(MyInternationalizationString.offlight); } else if (i == 3) { logicnameBtn.Text = Language.StringByID(MyInternationalizationString.automation1); } EventHandler iconclick = (sender1, e1) => { Common.Logic.CurrentLogic = new Common.Logic(); Common.Logic.CurrentLogic.IsEnable = 1;//默认为开 if (logiciocnBtn.Tag.ToString() == "3") { Common.Logic.CurrentLogic.LogicName = logicnameBtn.Text; //Common.Logic.CurrentLogic.LogicCustomPushText = Common.Logic.CurrentLogic.LogicName + Language.StringByID(MyInternationalizationString.defaulttext); var addLogicPage = new Logic.AddLogicPage(); HomePage.Instance.AddChidren(addLogicPage); HomePage.Instance.PageIndex += 1; addLogicPage.Show(); } else { Common.Logic.CurrentLogic.LogicName = logicnameBtn.Text; //Common.Logic.CurrentLogic.LogicCustomPushText = Common.Logic.CurrentLogic.LogicName + Language.StringByID(MyInternationalizationString.defaulttext); Logic.TemplatePage templatePage = new Logic.TemplatePage(); Logic.TemplatePage.s = logiciocnBtn.Tag.ToString(); HomePage.Instance.AddChidren(templatePage); HomePage.Instance.PageIndex += 1; templatePage.Show(); } }; logiciocnBtn.MouseUpEventHandler += iconclick; logicnameBtn.MouseUpEventHandler += iconclick; } } else { no = false; scenehorizontalScrol.Height = Application.GetRealHeight(0); Yheight = 0; } logicScrolView.Y = scenehorizontalScrol.Bottom + Yheight; logicScrolView.Height = functionSceneAutoBodyView.Height - bjFrameLayout.Height - bjFrameLayout.Y - scenehorizontalScrol.Height - Application.GetRealHeight(30) - Yheight; Automationview(logicScrolView, no); }; //下拉刷新自动化列表的事件 logicScrolView.BeginHeaderRefreshingAction += () => { //重新刷新logic列表 Common.Logic.LogicList.Clear(); Read(logicScrolView, no); //关闭刷新View; logicScrolView.EndHeaderRefreshing(); }; Read(logicScrolView, no); } /// /// 读取自动化列表数据; /// /// private async void Read(VerticalRefreshLayout logicScrolView, bool no) { CommonPage.Loading.Start(); if (Common.Logic.LogicList.Count == 0) { var Idlist = await Logic.Send.GetLogicId(0); if (Idlist.Count != 0) { var listlogic = await Logic.Send.ReadList(Idlist.Count, 0); //foreach可能集合已被修改,枚举操作可能不会执行,可能出现崩溃(建议for)。 for (int j = 0; j < listlogic.Count; j++) { var logic = listlogic[j]; if (logic.LogicType != 0) { continue; } Common.Logic.LogicList.Add(logic); } } } //自动化 Automationview(logicScrolView, no); CommonPage.Loading.Hide(); } /// /// 加载自动化列表界面 /// /// Refresview. private async void Automationview(VerticalRefreshLayout refresview, bool no) { refresview.RemoveAll(); if (Common.Logic.LogicList.Count == 0 && no == false) { //就是为了显示引导添加图标; refresview.BackgroundColor = 0x00000000; var noFrameLayout = new FrameLayout { Height = Application.GetRealHeight(434 + 200 + 32 + 160), //BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor, }; refresview.AddChidren(noFrameLayout); var noIconBtn = new Button { Y = Application.GetRealHeight(160), Width = Application.GetMinRealAverage(756), Height = Application.GetMinRealAverage(434), UnSelectedImagePath = "Item/NoFunction.png", X = Application.GetRealWidth(104), }; noFrameLayout.AddChidren(noIconBtn); var noTextBtn = new Button() { Y = noIconBtn.Bottom, Height = Application.GetRealHeight(200) + Application.GetRealHeight(32), Width = Application.GetRealWidth(700), //Gravity = Gravity.CenterHorizontal, Text = Language.StringByID(MyInternationalizationString.automationaddtext).Replace("{\\r\\n}", "\r\n"), TextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor, TextAlignment = TextAlignment.Center, IsMoreLines = true, X = Application.GetRealWidth(190 - 58), }; noFrameLayout.AddChidren(noTextBtn); } else { if (Common.Logic.LogicList.Count == 0 && no == true) { ///改变滑动view的颜色; refresview.BackgroundColor = 0x00000000; } else { refresview.BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor; } } foreach (var logic in Common.Logic.LogicList) { var logicRowlayout = new RowLayout { Height = Application.GetRealHeight(190 + 30), Width = Application.GetRealWidth(1080 - 58), LineColor = ZigbeeColor.Current.LogicBackgroundColor, BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor, }; refresview.AddChidren(logicRowlayout); var logicnameBtn = new Button { Height = Application.GetRealHeight(58), Width = Application.GetRealWidth(350), Text = logic.LogicName, X = Application.GetRealWidth(12 + 46), Y = Application.GetRealHeight(30), TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicTextBlackColor, TextSize = 14, }; logicRowlayout.AddChidren(logicnameBtn); var logicswitchBtn = new Button { Width = Application.GetMinRealAverage(104), Height = Application.GetMinRealAverage(63), UnSelectedImagePath = "ZigeeLogic/logicclose.png", SelectedImagePath = "ZigeeLogic/logicopen.png", X = logicRowlayout.Width - Application.GetRealWidth(104 + 58), Y = Application.GetRealHeight(58 + 30 + 9 + 30), }; logicRowlayout.AddChidren(logicswitchBtn); logicswitchBtn.MouseUpEventHandler += (sender1, e1) => { logicswitchBtn.IsSelected = !logicswitchBtn.IsSelected; if (logicswitchBtn.IsSelected) { //逻辑开 logic.IsEnable = 1; StatusColor(logic, logicRowlayout, 1); } else { //逻辑关 logic.IsEnable = 0; StatusColor(logic, logicRowlayout, 0); } Logic.Send.LogicControlSwitch(logic); //Logic.Send.AddModifyLogic(logic); }; if (logic.IsEnable == 1) { logicswitchBtn.IsSelected = true; StatusColor(logic, logicRowlayout, 1); } else if (logic.IsEnable == 0) { logicswitchBtn.IsSelected = false; StatusColor(logic, logicRowlayout, 0); } ///编辑 var edit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; logicRowlayout.AddRightView(edit); edit.MouseUpEventHandler += (sender, e) => { Common.Logic.CurrentLogic = logic; var logicCommunalPage = new Logic.LogicCommunalPage(); HomePage.Instance.AddChidren(logicCommunalPage); HomePage.Instance.PageIndex += 1; logicCommunalPage.Show(() => { logicnameBtn.Text = logic.LogicName; Automationview(refresview, no); }); }; ///删除 var del = new Button { BackgroundColor = ZigbeeColor.Current.LogicDelBlackColor1, Text = Language.StringByID(MyInternationalizationString.del), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; logicRowlayout.AddRightView(del); del.MouseUpEventHandler += (sender, e) => { var alert = new Alert(Language.StringByID(MyInternationalizationString.tip), Language.StringByID(MyInternationalizationString.doyouwanttodelete), Language.StringByID(MyInternationalizationString.cancel), Language.StringByID(MyInternationalizationString.confrim)); alert.ResultEventHandler += (sender1, e1) => { if (e1) { Common.Logic.LogicList.Remove(logic); Automationview(refresview, no); Logic.Send.DelLogic(logic.LogicId); } }; alert.Show(); }; var line = new Button { Y = Application.GetRealHeight(215), Height = Application.GetRealHeight(5), Width = Application.GetRealWidth(1080 - 58), BackgroundColor = ZigbeeColor.Current.LogicRowLayoutLineColor, X = Application.GetRealWidth(58), }; logicRowlayout.AddChidren(line); } } /// /// 显示自动化输出功能模块图标的颜色 /// /// /// /// private void StatusColor(Common.Logic logic, RowLayout logicRowlayout, int intvalue) { var logictimeBtn = new Button { Height = Application.GetRealHeight(58), Width = logicRowlayout.Width - Application.GetRealWidth(58 + 12 + 350), Y = Application.GetRealHeight(30), X = Application.GetRealWidth(365), TextAlignment = TextAlignment.CenterRight, TextColor = ZigbeeColor.Current.LogicListWeekTextColor, }; logicRowlayout.AddChidren(logictimeBtn); ///显示执行周期 Logic.Method.UpdateWeek(logictimeBtn, logic); List indexlist = new List(); List iconIndexlist = new List(); for (int i = 0; i < logic.Actions.Count; i++) { var linkType = logic.Actions[i]["LinkType"].ToString(); var d = indexlist.Find((value) => { return value == linkType; }); if (d == null) { indexlist.Add(linkType); } } if (indexlist.Contains("0")) { iconIndexlist.Add("0"); } if (indexlist.Contains("2")) { iconIndexlist.Add("2"); } if (indexlist.Contains("6")) { iconIndexlist.Add("6"); } if (indexlist.Contains("7")) { iconIndexlist.Add("7"); } for (int i = 0; i < iconIndexlist.Count; i++) { var iconindex = iconIndexlist[i]; var typebjBtn = new FrameLayout { Width = Application.GetRealWidth(82), Height = Application.GetRealHeight(82), X = Application.GetRealWidth(58) + Application.GetRealWidth(12 + (12 + 82 + 45 + 12) * i), Y = Application.GetRealHeight(58 + 30 + 30), Radius = (uint)Application.GetRealHeight(41), BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor, }; logicRowlayout.AddChidren(typebjBtn); var typeIconBtn = new Button { Width = Application.GetRealWidth(58), Height = Application.GetRealHeight(58), Gravity = Gravity.Center, }; typebjBtn.AddChidren(typeIconBtn); var connectIconBtn = new Button { Y = typebjBtn.Y + Application.GetRealHeight(35), X = Application.GetRealWidth(58) + Application.GetRealWidth((12 + 82 + 12) + (12 + 45 + 82 + 12) * i), Width = Application.GetRealWidth(48), Height = Application.GetRealHeight(15), UnSelectedImagePath = "ZigeeLogic/connect.png", }; logicRowlayout.AddChidren(connectIconBtn); if (iconIndexlist.Count - 1 == i) { connectIconBtn.Visible = false; } switch (iconindex) { case "0": { if (intvalue == 1) { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/function1.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicFunction1Color; } else { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nofunction.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor; } } break; case "2": { if (intvalue == 1) { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/scene1.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicScene1Color; } else { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/noscene.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor; } } break; case "6": { if (intvalue == 1) { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/security1.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicSecurity1Color; } else { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nosecurity.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor; } } break; case "7": { if (intvalue == 1) { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/delay1.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicDelay1Color; } else { typeIconBtn.UnSelectedImagePath = "ZigeeLogic/nodelay.png"; typebjBtn.BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor; } } break; } } } #endregion #region ◆ 控制状态_________________________ /// /// 显示设备控制状态 /// /// Command. /// Object value. private void UpdateDeviceControllStatu(string command, object objValue) { if (command != "DeviceDefaultAck" || objValue == null) { return; } var tempDevice = (CommonDevice)objValue; if (null == commonDeviceList.Find((obj) => obj.DeviceEpoint == tempDevice.DeviceEpoint && obj.DeviceAddr == tempDevice.DeviceAddr)) { return; } //标记已经发送控制命令到网关 sendedControlCommand = true; //DeviceUI.ShowStatuTip(R.MyInternationalizationString.Success); } /// /// 移除全部更新控制设备的action /// private void RemoveAllUpdateControlDeviceStatuAction() { foreach (var gateway in zbGatewayList) { //移除action if (gateway != null) { gateway.ReportAction -= UpdateDeviceControllStatu; } } } /// /// 移除单个控制设备的更新状态action /// /// Gateway. private void RemoveUpdateControlDeviceStatuAction(ZbGateway gateway) { //移除action if (gateway != null) { gateway.ReportAction -= UpdateDeviceControllStatu; } } /// /// 添加需要监控回调状态的网关和设备 /// /// Gateway list. /// Gateway. /// Device list. /// Common. private void AddZbGateway(List gatewayList, ZbGateway gateway, List deviceList, CommonDevice common) { if (null == gatewayList.Find((obj) => obj.getGatewayBaseInfo.gwID == gateway.getGatewayBaseInfo.gwID)) { gatewayList.Add(gateway); } if (null == commonDeviceList.Find((obj) => obj.DeviceEpoint == common.DeviceEpoint && obj.DeviceAddr == common.DeviceAddr)) { commonDeviceList.Add(common); } } #endregion } }