using System; using System.Collections.Generic; using Newtonsoft.Json.Linq; using Shared; using Shared.Common; using Shared.Phone; using Shared.R; using ZigBee.Device; namespace Shared.Phone.Device.Logic { public class LogicCommunalPage : FrameLayout { public LogicCommunalPage() { UserView.HomePage.Instance.RemoveViewByTag("Logic"); Tag = "Logic"; } EditText logicTextBox; public async void Show(Action action) { #region 最上面的布局代码 var topRowLayout = new RowLayout { BackgroundColor = ZigbeeColor.Current.LogicTopBackgroundColor, Height = Application.GetRealHeight(184), LineColor = ZigbeeColor.Current.LogicRowLayoutTopLineColor, }; this.AddChidren(topRowLayout); var titleName = new Button { TextSize = 17, TextColor = ZigbeeColor.Current.LogicTextBlackColor, TextAlignment = TextAlignment.CenterLeft, X = Application.GetRealWidth(176), Width = Application.GetRealWidth(600), Height = Application.GetRealHeight(69), Y = Application.GetRealHeight(92), TextID = MyInternationalizationString.selection, IsBold = true, }; topRowLayout.AddChidren(titleName); if (Common.Logic.CurrentLogic.LogicId != 0) { titleName.Text = Language.StringByID(MyInternationalizationString.editautomation); } else { titleName.Text = Language.StringByID(MyInternationalizationString.newautomation); } var clickBtn = new Button { Width = Application.GetRealWidth(81 + 51), Height = Application.GetRealHeight(58 + 40), Y = Application.GetRealHeight(98 - 40), }; topRowLayout.AddChidren(clickBtn); clickBtn.MouseDownEventHandler += (sender, e) => { RemoveFromParent(); }; var back = new Button { Width = Application.GetRealWidth(30), Height = Application.GetRealHeight(51), X = Application.GetRealWidth(81), Y = Application.GetRealHeight(98), //Gravity = Gravity.CenterVertical; UnSelectedImagePath = "ZigeeLogic/back.png", }; topRowLayout.AddChidren(back); back.MouseDownEventHandler += (sender, e) => { action(); RemoveFromParent(); }; #endregion var middle = new VerticalScrolViewLayout { Y = topRowLayout.Bottom, Height = Application.GetRealHeight(1920 - 184-180), BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor, }; this.AddChidren(middle); #region -----自动化名称 设置名称----- var logicnamefl = new FrameLayout { Height = Application.GetRealHeight(130), BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor, }; middle.AddChidren(logicnamefl); var text = new Button { Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(60), X = Application.GetRealWidth(58), TextAlignment = TextAlignment.CenterLeft, //Text = "自动化名称", TextID = MyInternationalizationString.automationname, TextColor = ZigbeeColor.Current.LogicTextBlackColor, Y = Application.GetRealHeight(35), TextSize = 15, }; logicnamefl.AddChidren(text); logicTextBox = new EditText { Y = Application.GetRealHeight(35), Width = Application.GetRealWidth(1080-58-300), Height = Application.GetRealHeight(60), X = text.Right, TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextSize = 14, Text = Common.Logic.CurrentLogic.LogicName, //TextID=MyInternationalizationString.automation1, }; logicnamefl.AddChidren(logicTextBox); var fraline = new FrameLayout { Height = Application.GetRealHeight(30), }; middle.AddChidren(fraline); #endregion #region -----显示逻辑条件----- var conditionFrameLayout = new FrameLayout { Height = Application.GetRealHeight(160), BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor, }; middle.AddChidren(conditionFrameLayout); var conditionRowLayout = new RowLayout { Y = Application.GetRealHeight(30), Width = Application.GetRealWidth(965), Height = Application.GetRealHeight(130), X = Application.GetRealWidth(58), LineColor = ZigbeeColor.Current.LogicRowLayoutLineColor, }; conditionFrameLayout.AddChidren(conditionRowLayout); conditionRowLayout.AddChidren(new Button { Text = Language.StringByID(MyInternationalizationString.ifcondition), TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicTextBlackColor, Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(60), TextSize = 15, Gravity = Gravity.CenterVertical, }); var conditionadd1 = new Button { Y = Application.GetRealHeight(30), Width = Application.GetRealWidth(57), Height = Application.GetRealHeight(130), X = Application.GetRealWidth(965 + 58), }; conditionFrameLayout.AddChidren(conditionadd1); var conditionadd = new Button { Width = Application.GetRealWidth(58), Height = Application.GetRealHeight(58), UnSelectedImagePath = "ZigeeLogic/add.png", X = Application.GetRealWidth(965 - 58), Gravity = Gravity.CenterVertical, }; conditionRowLayout.AddChidren(conditionadd); ///添加条件的点击事件 EventHandler conditionaddclick = (sender, e) => { if (Common.Logic.CurrentLogic.Conditions.Count == 1) { ConditionView(false); } else { var addLogicPage = new AddLogicPage(); UserView.HomePage.Instance.AddChidren(addLogicPage); UserView.HomePage.Instance.PageIndex += 1; addLogicPage.Show(); } }; conditionadd.MouseUpEventHandler += conditionaddclick; conditionadd1.MouseUpEventHandler += conditionaddclick; List> ListConditions = new List>(); ListConditions.Clear(); ListConditions.AddRange(Common.Logic.CurrentLogic.Conditions); ListConditions.Add(new Dictionary()); if (Common.Logic.CurrentLogic.Conditions.Count > 1) { var row = new FrameLayout { Height = Application.GetRealHeight(60), BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor, }; middle.AddChidren(row); var relationship = new Button { Width = Application.GetRealWidth(600), Height = Application.GetRealHeight(60), TextAlignment = TextAlignment.CenterLeft, X = Application.GetRealWidth(58), TextColor = ZigbeeColor.Current.LogicBtnCompleteColor, }; row.AddChidren(relationship); if (Common.Logic.CurrentLogic.Relationship == 0) { relationship.Text = Language.StringByID(MyInternationalizationString.followingconditions) + Language.StringByID(MyInternationalizationString.Allconditions); } else { relationship.Text = Language.StringByID(MyInternationalizationString.followingconditions) + Language.StringByID(MyInternationalizationString.anycondition); } EventHandler editclick = (sender, e) => { ConditionView(true); }; row.MouseUpEventHandler += editclick; relationship.MouseUpEventHandler += editclick; } for (int i = 0; i < ListConditions.Count; i++) { if (i == (ListConditions.Count - 1)) { var addfl = new FrameLayout { Height = Application.GetRealHeight(160 + 30 + 50), BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor, }; middle.AddChidren(addfl); var addbtn = new Button { Height = Application.GetRealHeight(130 + 50), Width = Application.GetRealWidth(908), Y = Application.GetRealHeight(30), X = Application.GetRealWidth(86), UnSelectedImagePath = "ZigeeLogic/logicaddcolor.png", }; addfl.AddChidren(addbtn); var addtextbtn = new Button { Height = Application.GetRealHeight(58), Width = Application.GetRealWidth(300), Y = Application.GetRealHeight(45 + 30), TextColor = ZigbeeColor.Current.LogicBlankBackgroundColor, TextID = MyInternationalizationString.addconditions, X = Application.GetRealWidth(390), TextSize = 14, }; addfl.AddChidren(addtextbtn); EventHandler addconditionsclick = (sender, e) => { if (Common.Logic.CurrentLogic.Conditions.Count == 1) { ConditionView(false); } else { var addLogicPage = new AddLogicPage(); UserView.HomePage.Instance.AddChidren(addLogicPage); UserView.HomePage.Instance.PageIndex += 1; addLogicPage.Show(); } }; addbtn.MouseUpEventHandler += addconditionsclick; addtextbtn.MouseUpEventHandler += addconditionsclick; } else { var devicesFrameLayout = new FrameLayout { Height = Application.GetRealHeight(130), BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor, }; middle.AddChidren(devicesFrameLayout); ///显示图标 var conditionIcon = new Button { Width = Application.GetRealWidth(81), Height = Application.GetRealHeight(81), X = Application.GetRealWidth(104), Y = Application.GetRealHeight(25), //UnSelectedImagePath = "ZigeeLogic/time.png", }; devicesFrameLayout.AddChidren(conditionIcon); var conditionsRowLayout = new RowLayout { Width = Application.GetRealWidth(800), Height = Application.GetRealHeight(130), X = Application.GetRealWidth(222), LineColor = ZigbeeColor.Current.LogicRowLayoutLineColor, }; devicesFrameLayout.AddChidren(conditionsRowLayout); var Type = int.Parse(ListConditions[i]["Type"]); var conditions = ListConditions[i]; switch (Type) { /// (0:时间点条件;1:设备状态变化条件;2:其他逻辑条件;3:计数器条件;4:倒计时;5:时间段条件;6:安防条件;7:地理位置) case 0: { ///显示时间 var timevalue = new Button { Width = Application.GetRealWidth(200), TextAlignment = TextAlignment.CenterLeft, Gravity = Gravity.CenterVertical, TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextSize = 14, }; conditionsRowLayout.AddChidren(timevalue); var timeTxet = new Button { Width = Application.GetRealWidth(400), TextAlignment = TextAlignment.CenterRight, Gravity = Gravity.CenterVertical, TextColor = ZigbeeColor.Current.LogicBtnCancelColor, X = conditionsRowLayout.Width - Application.GetRealWidth(400), TextSize = 14, }; conditionsRowLayout.AddChidren(timeTxet); var timeedit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; conditionsRowLayout.AddRightView(timeedit); timeedit.MouseUpEventHandler += (sender, e) => { var timePoint = new TimePoint(); UserView.HomePage.Instance.AddChidren(timePoint); UserView.HomePage.Instance.PageIndex += 1; timePoint.IsEditor = true; timePoint.Show(conditions); }; //"0正常时间点","1日出时间","2日落时间","3正午时间" switch (int.Parse(conditions["DateType"])) { case 0: { string s = ""; s = conditions["StartMin"].Length < 2 ? "0" + conditions["StartMin"] : conditions["StartMin"]; timevalue.Text = conditions["StartHour"] + ":" + s; timeTxet.TextID = MyInternationalizationString.immediateexecution; conditionIcon.UnSelectedImagePath = "ZigeeLogic/timepoint.png"; } break; case 1: timevalue.TextID = MyInternationalizationString.sunrise; conditionIcon.UnSelectedImagePath = "ZigeeLogic/sunrise.png"; if (int.Parse(conditions["AdjustTime"]) > 0) { timeTxet.Text = Language.StringByID(MyInternationalizationString.delayed) + conditions["AdjustTime"] + Language.StringByID(MyInternationalizationString.logicminute); } else if (int.Parse(conditions["AdjustTime"]) < 0) { timeTxet.Text = Language.StringByID(MyInternationalizationString.advance) + Math.Abs(int.Parse(conditions["AdjustTime"])).ToString() + Language.StringByID(MyInternationalizationString.logicminute); } else { //timeTxet.Text = Language.StringByID(MyInternationalizationString.sunrise); } break; case 2: timevalue.TextID = MyInternationalizationString.sunset; conditionIcon.UnSelectedImagePath = "ZigeeLogic/sunset.png"; if (int.Parse(conditions["AdjustTime"]) > 0) { timeTxet.Text = Language.StringByID(MyInternationalizationString.delayed) + conditions["AdjustTime"] + Language.StringByID(MyInternationalizationString.logicminute); } else if (int.Parse(conditions["AdjustTime"]) < 0) { timeTxet.Text = Language.StringByID(MyInternationalizationString.advance) + Math.Abs(int.Parse(conditions["AdjustTime"])).ToString() + Language.StringByID(MyInternationalizationString.logicminute); } else { // timevalue.Text = Language.StringByID(MyInternationalizationString.sunset); } break; case 3: timevalue.TextID = MyInternationalizationString.noon; conditionIcon.UnSelectedImagePath = "ZigeeLogic/noon.png"; if (int.Parse(conditions["AdjustTime"]) > 0) { timeTxet.Text = Language.StringByID(MyInternationalizationString.delayed) + conditions["AdjustTime"] + Language.StringByID(MyInternationalizationString.logicminute); } else if (int.Parse(conditions["AdjustTime"]) < 0) { timeTxet.Text = Language.StringByID(MyInternationalizationString.advance) + Math.Abs(int.Parse(conditions["AdjustTime"])).ToString() + Language.StringByID(MyInternationalizationString.logicminute); } else { // timeTxet.Text = Language.StringByID(MyInternationalizationString.noon); } break; } } break; case 5: { conditionIcon.UnSelectedImagePath = "ZigeeLogic/timeparagraph.png"; string s1 = "", s2 = ""; s1 = conditions["StartMin"].Length < 2 ? "0" + conditions["StartMin"] : conditions["StartMin"]; s2 = conditions["StopMin"].Length < 2 ? "0" + conditions["StopMin"] : conditions["StopMin"]; ///显示时间 var timevalue = new Button { Width = Application.GetRealWidth(400), TextAlignment = TextAlignment.CenterLeft, Gravity = Gravity.CenterVertical, Text = conditions["StartHour"] + ":" + s1 + "-" + conditions["StopHour"] + ":" + s2, //TextColor = 0xff121212, TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextSize = 14, }; conditionsRowLayout.AddChidren(timevalue); var timeTxet = new Button { Width = Application.GetRealWidth(400), TextAlignment = TextAlignment.CenterRight, Gravity = Gravity.CenterVertical, TextColor = ZigbeeColor.Current.LogicBtnCancelColor, X = conditionsRowLayout.Width - Application.GetRealWidth(400), TextID = MyInternationalizationString.timeframe, TextSize = 14, }; conditionsRowLayout.AddChidren(timeTxet); var timeedit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; conditionsRowLayout.AddRightView(timeedit); timeedit.MouseUpEventHandler += (sender, e) => { var timePage = new TimePage(); UserView.HomePage.Instance.AddChidren(timePage); UserView.HomePage.Instance.PageIndex += 1; timePage.str1 = conditions["StartHour"] + ":" + conditions["StartMin"] + "-" + conditions["StopHour"] + ":" + conditions["StopMin"]; timePage.IsEditor = true; timePage.Show(); }; } break; case 1: { var deviceinof = Common.Logic.LogicDviceList.Find((obj) => { return obj.DeviceAddr == conditions["MacAddr"] && obj.DeviceEpoint.ToString() == conditions["Epoint"]; }); if (deviceinof == null) { deviceinof = new ZigBee.Device.CommonDevice(); //continue; } ///显示设备名称 var btndevice = new Button { Y = Application.GetRealHeight(20), Height = Application.GetRealHeight(50), Width = Application.GetRealWidth(400), TextAlignment = TextAlignment.CenterLeft, Text = deviceinof.DeviceEpointName, TextColor = ZigbeeColor.Current.LogicTextBlackColor, TextSize = 14, }; conditionsRowLayout.AddChidren(btndevice); ///区域(房间)名称Button var btnregionname = new Button { Y = btndevice.Bottom + Application.GetRealHeight(10), Width = Application.GetRealWidth(400), TextAlignment = TextAlignment.CenterLeft, Height = Application.GetRealHeight(50), Text = "",//Language.StringByID(MyInternationalizationString.customroom), TextColor = ZigbeeColor.Current.LogicBtnCancelColor, }; conditionsRowLayout.AddChidren(btnregionname); ///通过设备找到区域(房间)名称 Send.RoomNmae(btnregionname, deviceinof); var deviceedit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; conditionsRowLayout.AddRightView(deviceedit); deviceedit.MouseUpEventHandler += (sender, e) => { if (deviceinof.Type != DeviceType.DoorLock) { var flMain = new FrameLayout { BackgroundColor = ZigbeeColor.Current.LogicViewBackgroundColor }; this.AddChidren(flMain); DeviceStateCondition.CurrentDeviceView(flMain, deviceinof, true); } else { var memberList = new MemberList(); UserView.HomePage.Instance.AddChidren(memberList); UserView.HomePage.Instance.PageIndex += 1; MemberList.edit = true; memberList.Show(deviceinof, conditions); } }; ///显示设备条件状态控件 var devicestatus = new Button { Width = Application.GetRealWidth(400), Height = Application.GetRealHeight(130), Gravity = Gravity.CenterVertical, TextAlignment = TextAlignment.CenterRight, X = Application.GetRealWidth(400), TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextSize = 14, }; conditionsRowLayout.AddChidren(devicestatus); switch (deviceinof.Type) { case DeviceType.OnOffOutput: { conditionIcon.UnSelectedImagePath = "ZigeeLogic/light.png"; if (conditions["AttriButeId"] == "0") { if (conditions["AttriButeData1"] == "1") { devicestatus.Text = Language.StringByID(MyInternationalizationString.open); } else { devicestatus.Text = Language.StringByID(MyInternationalizationString.close); } } } break; case DeviceType.WindowCoveringDevice: { if (conditions["AttriButeId"] == "8")//有歧义,没有开关属性id; { if (int.Parse(conditions["AttriButeData1"]) > 5) { devicestatus.Text = Language.StringByID(MyInternationalizationString.open); } else { devicestatus.Text = Language.StringByID(MyInternationalizationString.close); } } } break; case DeviceType.IASZone: { var iASZonedevice = deviceinof as IASZone; var intvalue = conditions["AttriButeData1"]; conditionIcon.UnSelectedImagePath = $"ZigeeLogic/sensor{iASZonedevice.IasDeviceType}.png"; switch (iASZonedevice.IasDeviceType) { case 13: { if (intvalue == "1") { devicestatus.TextID = MyInternationalizationString.someone; } else { int minute = int.Parse(conditions["IgnoreTime"]) / 60; int second = int.Parse(conditions["IgnoreTime"]) % 60; if (minute != 0 && second != 0) { devicestatus.Text = minute.ToString() + Language.StringByID(MyInternationalizationString.minute) + second.ToString() + Language.StringByID(MyInternationalizationString.second) + Language.StringByID(MyInternationalizationString.closetime); } else { if (minute == 0 && second != 0) { devicestatus.Text = second.ToString() + Language.StringByID(MyInternationalizationString.second) + Language.StringByID(MyInternationalizationString.closetime); } if (minute != 0 && second == 0) { devicestatus.Text = minute.ToString() + Language.StringByID(MyInternationalizationString.Minute) + Language.StringByID(MyInternationalizationString.closetime); } } } } break; case 21: case 22: { if (intvalue == "1") { devicestatus.TextID = MyInternationalizationString.logicopen; } else { if (conditions.ContainsKey("IgnoreTime")) { int minute = int.Parse(conditions["IgnoreTime"]) / 60; int second = int.Parse(conditions["IgnoreTime"]) % 60; if (minute != 0 && second != 0) { devicestatus.Text = minute.ToString() + Language.StringByID(MyInternationalizationString.minute) + second.ToString() + Language.StringByID(MyInternationalizationString.second) + Language.StringByID(MyInternationalizationString.closetime); } else { if (minute == 0 && second != 0) { devicestatus.Text = second.ToString() + Language.StringByID(MyInternationalizationString.second) + Language.StringByID(MyInternationalizationString.closetime); } if (minute != 0 && second == 0) { devicestatus.Text = minute.ToString() + Language.StringByID(MyInternationalizationString.Minute) + Language.StringByID(MyInternationalizationString.closetime); } } } else { devicestatus.TextID = MyInternationalizationString.logicclose; } } } break; case 40: { if (intvalue == "1") { devicestatus.TextID = MyInternationalizationString.smokescreen; } } break; case 42: { if (intvalue == "1") { devicestatus.TextID = MyInternationalizationString.waterleakage; } else { devicestatus.TextID = MyInternationalizationString.noleakage; } } break; case 43: { if (intvalue == "1") { devicestatus.TextID = MyInternationalizationString.gas; } } break; case 277: { if (intvalue == "1") { devicestatus.TextID = MyInternationalizationString.callthepolice; } } break; default: { if (intvalue == "1") { devicestatus.TextID = MyInternationalizationString.callthepolice; } } break; } } break; case DeviceType.OnOffSwitch: { conditionIcon.UnSelectedImagePath = "ZigeeLogic/panel.png"; devicestatus.Text = Language.StringByID(MyInternationalizationString.OnOffSwitch) + conditions["Epoint"]; } break; case DeviceType.DoorLock: { conditionIcon.UnSelectedImagePath = "ZigeeLogic/doorlock.png"; for (int a = 0; a < Common.Logic.CurrentLogic.Accounts.Count; a++) { if (Common.Logic.CurrentLogic.Accounts[a]["Type"] == "1") { if (Common.Logic.CurrentLogic.Accounts[a]["UserId"] == conditions["AttriButeData2"]) { devicestatus.Text = Common.Logic.CurrentLogic.Accounts[a]["Account"]; break; } } } } break; case DeviceType.TemperatureSensor: // conditionIcon.UnSelectedImagePath = "ZigeeLogic/temperature.png"; var dev = deviceinof as TemperatureSensor; if (conditions["Cluster_ID"] == "1026") { dev.SensorDiv = 1; } else { dev.SensorDiv = 2; } string s = ""; switch (conditions["Range"]) { case "0": { s = ">"; } break; case "1": { s = "="; } break; case "2": { s = "<"; } break; case "6": { s = "≥"; } break; case "7": { s = "≤"; } break; } if (conditions["Cluster_ID"] == "1026") { conditionIcon.UnSelectedImagePath = "ZigeeLogic/temperature.png"; devicestatus.Text = s + conditions["AttriButeData1"] + "℃"; } else { conditionIcon.UnSelectedImagePath = "ZigeeLogic/humidity.png"; devicestatus.Text = s + conditions["AttriButeData1"] + "%"; } break; } } break; case 2: { var logicinof = Common.Logic.LogicList.Find((obj) => { return obj.LogicId.ToString() == conditions["Condition_LogicId"]; }); if (logicinof == null) { continue; } ///显示逻辑名称 var btnlogic = new Button { Width = Application.GetRealWidth(700), TextAlignment = TextAlignment.CenterLeft, Gravity = Gravity.CenterVertical, Text = logicinof.LogicName, TextColor = ZigbeeColor.Current.LogicTextBlackColor, TextSize = 14, //TextColor = 0xff121212, }; conditionsRowLayout.AddChidren(btnlogic); var logicedit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; conditionsRowLayout.AddRightView(logicedit); logicedit.MouseUpEventHandler += (sender, e) => { var selectedLogicStatus = new SelectedLogicStatus(); UserView.HomePage.Instance.AddChidren(selectedLogicStatus); UserView.HomePage.Instance.PageIndex += 1; selectedLogicStatus.IsDeviceEditor = true; selectedLogicStatus.Show(logicinof); }; ///显示Logic条件状态控件 var logicstatus = new Button { Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(130), Gravity = Gravity.CenterVertical, TextAlignment = TextAlignment.CenterRight, X = Application.GetRealWidth(500), TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextSize = 14, }; conditionsRowLayout.AddChidren(logicstatus); if (conditions["IsValid"] == "1") { logicstatus.Text = Language.StringByID(MyInternationalizationString.open1); } else { logicstatus.Text = Language.StringByID(MyInternationalizationString.disable); } } break; case 6: { var btnsecurity = new Button { Width = Application.GetRealWidth(700), TextAlignment = TextAlignment.CenterLeft, Gravity = Gravity.CenterVertical, //Text = "安防", TextColor = ZigbeeColor.Current.LogicTextBlackColor, //TextColor = 0xff121212, TextID = MyInternationalizationString.security, TextSize = 14, }; //conditionsRowLayout.AddChidren(btnsecurity); var btnsecurityedit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; conditionsRowLayout.AddRightView(btnsecurityedit); btnsecurityedit.MouseUpEventHandler += (sender, e) => { //var securityPage = new SecurityPage(); //UserView.HomePage.Instance.AddChidren(securityPage); //UserView.HomePage.Instance.PageIndex += 1; //securityPage.IsDeviceEditor = true; //securityPage.Show(); var flMain = new FrameLayout { BackgroundColor = ZigbeeColor.Current.LogicViewBackgroundColor }; this.AddChidren(flMain); AddLogicPage.SecurityView(flMain, true); }; ///显示安防条件状态控件 var securitystatus = new Button { Width = Application.GetRealWidth(500), Height = Application.GetRealHeight(130), Gravity = Gravity.CenterVertical, TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextSize = 14, }; conditionsRowLayout.AddChidren(securitystatus); if (conditions["EnOrWithdrawMode"] == "1") { conditionIcon.UnSelectedImagePath = "ZigeeLogic/withdrawal.png"; securitystatus.Text = Language.StringByID(MyInternationalizationString.withdrawal); } else { if (conditions["ModeId"] == "1") { conditionIcon.UnSelectedImagePath = "ZigeeLogic/athome.png"; securitystatus.Text = Language.StringByID(MyInternationalizationString.logicathomegarrison); } else { conditionIcon.UnSelectedImagePath = "ZigeeLogic/leavehome.png"; securitystatus.Text = Language.StringByID(MyInternationalizationString.logicremovehomegarrison); } } } break; case 7: { conditionIcon.UnSelectedImagePath = "ZigeeLogic/position.png"; var btnlocation = new Button { Width = Application.GetRealWidth(700), TextAlignment = TextAlignment.CenterLeft, Gravity = Gravity.CenterVertical, TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextID = MyInternationalizationString.geographicalposition, TextSize = 14, }; conditionsRowLayout.AddChidren(btnlocation); var btnlocationedit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; conditionsRowLayout.AddRightView(btnlocationedit); btnlocationedit.MouseUpEventHandler += (sender, e) => { var flMain = new FrameLayout { BackgroundColor = ZigbeeColor.Current.LogicViewBackgroundColor }; this.AddChidren(flMain); AddLogicPage.LocationView(flMain, true); }; var locationstatus = new Button { Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(130), Gravity = Gravity.CenterVertical, TextAlignment = TextAlignment.CenterRight, X = Application.GetRealWidth(500), TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextSize = 14, }; conditionsRowLayout.AddChidren(locationstatus); foreach (var radius in Common.Logic.CurrentLogic.Accounts) { if (radius["Type"] == "7") { if (conditions["AtHome"] == "1") { locationstatus.Text = Language.StringByID(MyInternationalizationString.athome) + radius["Radius"] + "米"; } else { locationstatus.Text = Language.StringByID(MyInternationalizationString.leavehome) + radius["Radius"] + "米"; } } } } break; } ///删除控件 var del = new Button { BackgroundColor = ZigbeeColor.Current.LogicDelBlackColor1, Text = Language.StringByID(MyInternationalizationString.del), }; conditionsRowLayout.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.CurrentLogic.Conditions.Remove(conditions); var logicCommunalPage = new LogicCommunalPage(); UserView.HomePage.Instance.AddChidren(logicCommunalPage); UserView.HomePage.Instance.PageIndex += 1; logicCommunalPage.Show(() => { }); } }; alert.Show(); }; } } #endregion #region ----显示执行目标---- var targetFrameLayout = new FrameLayout { Height = Application.GetRealHeight(160), BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor, }; middle.AddChidren(targetFrameLayout); var targetRowLayout = new RowLayout { Y = Application.GetRealHeight(30), Width = Application.GetRealWidth(965), Height = Application.GetRealHeight(130), X = Application.GetRealWidth(58), LineColor = ZigbeeColor.Current.LogicRowLayoutLineColor, }; targetFrameLayout.AddChidren(targetRowLayout); var btntargettitle = new Button { Text = Language.StringByID(MyInternationalizationString.execute), TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicTextBlackColor, Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(60), TextSize = 15, Gravity = Gravity.CenterVertical, }; targetRowLayout.AddChidren(btntargettitle); var btntargetadd1 = new Button { Y = Application.GetRealHeight(30), Width = Application.GetRealWidth(57), Height = Application.GetRealHeight(130), X = Application.GetRealWidth(965+58), }; targetFrameLayout.AddChidren(btntargetadd1); var btntargetadd = new Button { Width = Application.GetRealWidth(58), Height = Application.GetRealHeight(58), UnSelectedImagePath = "ZigeeLogic/add.png", X = Application.GetRealWidth(965 - 58), Gravity = Gravity.CenterVertical, }; targetRowLayout.AddChidren(btntargetadd); EventHandler btntargetaddclick = (sender, e) => { Common.Logic.CurrentLogic.LogicName = logicTextBox.Text.Trim(); var deviceTarget = new DeviceTarget(); UserView.HomePage.Instance.AddChidren(deviceTarget); UserView.HomePage.Instance.PageIndex += 1; deviceTarget.Show(); }; btntargetadd1.MouseUpEventHandler += btntargetaddclick; btntargetadd.MouseUpEventHandler += btntargetaddclick; List> ListActions = new List>(); ListActions.Clear(); ListActions.AddRange(Common.Logic.CurrentLogic.Actions); ListActions.Add(new Dictionary()); for (int i = 0; i < ListActions.Count; i++) { if (i == (ListActions.Count - 1)) { var addfl = new FrameLayout { Height = Application.GetRealHeight(160 + 30 + 50), BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor, }; middle.AddChidren(addfl); var addbtn = new Button { Height = Application.GetRealHeight(130 + 50), Width = Application.GetRealWidth(908), Y = Application.GetRealHeight(30), X = Application.GetRealWidth(86), UnSelectedImagePath = "ZigeeLogic/logicaddcolor.png", }; addfl.AddChidren(addbtn); var addtextbtn = new Button { Height = Application.GetRealHeight(58), Width = Application.GetRealWidth(300), Y = Application.GetRealHeight(45 + 30), TextColor = ZigbeeColor.Current.LogicBlankBackgroundColor, TextID = MyInternationalizationString.addfunction, X = Application.GetRealWidth(390), TextSize = 14, }; addfl.AddChidren(addtextbtn); EventHandler addfunctionclick = (sender, e) => { Common.Logic.CurrentLogic.LogicName = logicTextBox.Text.Trim(); var deviceTarget = new DeviceTarget(); UserView.HomePage.Instance.AddChidren(deviceTarget); UserView.HomePage.Instance.PageIndex += 1; deviceTarget.Show(); }; addbtn.MouseUpEventHandler += addfunctionclick; addtextbtn.MouseUpEventHandler += addfunctionclick; } else { var devicesFrameLayout = new FrameLayout { Height = Application.GetRealHeight(130), BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor, }; middle.AddChidren(devicesFrameLayout); ///显示图标 var actionsIcon = new Button { Width = Application.GetRealWidth(81), Height = Application.GetRealHeight(81), X = Application.GetRealWidth(104), Y = Application.GetRealHeight(25), // UnSelectedImagePath = "ZigeeLogic/time.png", }; devicesFrameLayout.AddChidren(actionsIcon); var actionsrowLayout = new RowLayout { Width = Application.GetRealWidth(800), Height = Application.GetRealHeight(130), X = Application.GetRealWidth(222), LineColor = ZigbeeColor.Current.LogicRowLayoutLineColor, }; devicesFrameLayout.AddChidren(actionsrowLayout); var linkType = int.Parse(ListActions[i]["LinkType"].ToString()); var actions = ListActions[i]; switch (linkType) { case 0: { var obj1 = actions["DeviceAddr"].ToString(); var obj2 = actions["Epoint"].ToString(); var deviceinof = Common.Logic.LogicDviceList.Find((obj) => { return ((obj.DeviceAddr == obj1) && (obj.DeviceEpoint.ToString() == obj2)); }); if (deviceinof == null) { deviceinof = new ZigBee.Device.CommonDevice(); // continue; } ///设备名称Button var btndevicename = new Button { Y = Application.GetRealHeight(20), Height = Application.GetRealHeight(50), Width = Application.GetRealWidth(400), TextAlignment = TextAlignment.CenterLeft, Text = deviceinof.DeviceEpointName, TextColor = ZigbeeColor.Current.LogicTextBlackColor, TextSize = 14, }; actionsrowLayout.AddChidren(btndevicename); ///区域(房间)名称Button var btnregionname = new Button { Y = btndevicename.Bottom + Application.GetRealHeight(10), Width = Application.GetRealWidth(400), TextAlignment = TextAlignment.CenterLeft, Height = Application.GetRealHeight(50), Text = "",//Language.StringByID(MyInternationalizationString.customroom), TextColor = ZigbeeColor.Current.LogicBtnCancelColor, }; actionsrowLayout.AddChidren(btnregionname); ///通过设备找到区域(房间)名称 Send.RoomNmae(btnregionname, deviceinof); ///显示设备条件状态控件 var devicestatus = new Button { Width = Application.GetRealWidth(400), Height = Application.GetRealHeight(130), Gravity = Gravity.CenterVertical, TextAlignment = TextAlignment.CenterRight, X = Application.GetRealWidth(400), TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextSize = 14, }; actionsrowLayout.AddChidren(devicestatus); ///编辑设备状态Button var deviceedit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; actionsrowLayout.AddRightView(deviceedit); ///编辑点击事件 deviceedit.MouseUpEventHandler += (sender, e) => { var flMain = new FrameLayout { BackgroundColor = ZigbeeColor.Current.LogicViewBackgroundColor }; this.AddChidren(flMain); LogicDevicePage.CurrentDeviceStateView(flMain, deviceinof, true); }; switch (deviceinof.Type) { case DeviceType.OnOffOutput: { actionsIcon.UnSelectedImagePath = "ZigeeLogic/light.png"; var TaskList = actions["TaskList"] as List>; if (TaskList == null) { continue; } foreach (var status in TaskList) { if (status["TaskType"].ToString() == "1") { if (status["Data1"].ToString() == "0") { devicestatus.Text = Language.StringByID(MyInternationalizationString.close); } else if (status["Data1"].ToString() == "1") { devicestatus.Text = Language.StringByID(MyInternationalizationString.open); } else if (status["Data1"].ToString() == "2") { devicestatus.Text = Language.StringByID(MyInternationalizationString.onoff); } } } } break; case DeviceType.DimmableLight: { actionsIcon.UnSelectedImagePath = "ZigeeLogic/dimmableLight.png"; var TaskList = actions["TaskList"] as List>; if (TaskList == null) { continue; } foreach (var status in TaskList) { if (status["TaskType"].ToString() == "3") { var intvalue = int.Parse(status["Data1"]); var lightbrightnessvalue = (intvalue * 100) / 254; devicestatus.Text = lightbrightnessvalue.ToString() + "%"; } else if (status["TaskType"].ToString() == "1") { if (status["Data1"].ToString() == "0") { devicestatus.Text = Language.StringByID(MyInternationalizationString.close); } else if (status["Data1"].ToString() == "2") { devicestatus.Text = Language.StringByID(MyInternationalizationString.onoff); } } } } break; case DeviceType.WindowCoveringDevice: { actionsIcon.UnSelectedImagePath = "ZigeeLogic/curtain.png"; var TaskList = actions["TaskList"] as List>; if (TaskList == null) { continue; } foreach (var status in TaskList) { if (status["TaskType"] == "6") { if (status["Data1"] == "0") { devicestatus.Text = Language.StringByID(MyInternationalizationString.open); } else if (status["Data1"] == "1") { devicestatus.Text = Language.StringByID(MyInternationalizationString.close); } else if (status["Data1"] == "5") { devicestatus.Text = status["Data2"] + "%"; } } } } break; case DeviceType.AirSwitch: { actionsIcon.UnSelectedImagePath = "ZigeeLogic/airswitch.png"; var TaskList = actions["TaskList"] as List>; if (TaskList == null) { continue; } foreach (var status in TaskList) { if (status["TaskType"].ToString() == "1") { if (status["Data1"].ToString() == "0") { devicestatus.Text = Language.StringByID(MyInternationalizationString.close); } else if (status["Data1"].ToString() == "1") { devicestatus.Text = Language.StringByID(MyInternationalizationString.open); } else if (status["Data1"].ToString() == "2") { devicestatus.Text = Language.StringByID(MyInternationalizationString.onoff); } } } } break; case DeviceType.Thermostat: { actionsIcon.UnSelectedImagePath = "ZigeeLogic/ac.png"; var TaskList = actions["TaskList"] as List>; if (TaskList == null) { continue; } string modetext = "", temperaturetext = "", speedtext = ""; bool ifclose = false; foreach (var status in TaskList) { if (TaskList.Count == 1) { //数组只有一个元素说明当前空调状态为关; ifclose = false; //如果空调状态是关;直接跳出for循坏; break; } else { ifclose = true; } if (status["TaskType"].ToString() == "5") { if (status["Data1"] == "3") {//3---设置工作模式(1:自动;3:制冷;4:制热;7:送风;8:除湿) switch (status["Data2"]) { case "3": { modetext = Language.StringByID(MyInternationalizationString.logiccool); } break; case "4": { modetext = Language.StringByID(MyInternationalizationString.logicheat); } break; case "1": { modetext = Language.StringByID(MyInternationalizationString.logicauto); } break; case "8": { modetext = Language.StringByID(MyInternationalizationString.logicdry); } break; case "7": { modetext = Language.StringByID(MyInternationalizationString.logicfanonly); } break; } } else if (status["Data1"] == "6") {//6---设置风扇模式(1:低风;2:中风;3:高风;) switch (status["Data2"]) { case "1": { speedtext = Language.StringByID(MyInternationalizationString.logiclow); } break; case "2": { speedtext = Language.StringByID(MyInternationalizationString.logicmedium); } break; case "3": { speedtext = Language.StringByID(MyInternationalizationString.logichigh); } break; } } //4---设置加热度数;5---设置制冷、除湿度数;7---设置自动度数 else if (status["Data1"] == "4" || status["Data1"] == "5" || status["Data1"] == "7") { var s = int.Parse(status["Data2"]) / 100; temperaturetext = s.ToString(); } else if (status["Data1"] == "20") { temperaturetext = "无"; } } } if (ifclose) { devicestatus.Text = modetext + ";" + temperaturetext + "℃;" + speedtext; } else { devicestatus.Text = Language.StringByID(MyInternationalizationString.close); } } break; } } break; case 2: { //在本地查找该场景; var sceneinof = Common.Room.AllRoomSceneUIList.Find((obj) => { return obj.Id.ToString() == actions["DeviceAddr"].ToString(); }); //本地没有存在; if (sceneinof == null) { //在网关查找该场景; sceneinof =await Send.GetScene(int.Parse(actions["DeviceAddr"].ToString())); //网关没有存在; if (sceneinof == null) { //注解:本地和网关都不存在该场景,界面将不会显示该场景; //sceneinof = new SceneUI(); //移除该场景数据; Common.Logic.CurrentLogic.Actions.Remove(actions); //移除该场景视图; devicesFrameLayout.RemoveFromParent(); continue; } } actionsIcon.UnSelectedImagePath = "ZigeeLogic/scene.png"; ///设备名称Button var btndevicename = new Button { Y = Application.GetRealHeight(20), Height = Application.GetRealHeight(50), Width = Application.GetRealWidth(500), TextAlignment = TextAlignment.CenterLeft, Text = sceneinof.Name, TextColor = ZigbeeColor.Current.LogicTextBlackColor, TextSize = 14, }; actionsrowLayout.AddChidren(btndevicename); ///区域(房间)名称Button var btnregionname = new Button { Y = btndevicename.Bottom + Application.GetRealHeight(10), Width = Application.GetRealWidth(500), TextAlignment = TextAlignment.CenterLeft, Height = Application.GetRealHeight(50), Text = "",//Language.StringByID(MyInternationalizationString.customroom), TextColor = ZigbeeColor.Current.LogicBtnCancelColor, }; actionsrowLayout.AddChidren(btnregionname); /////通过设备找到区域(房间)名称 Common.Room room = new Common.Room(); btnregionname.Text = room.GetRoomNameBySceneId(sceneinof.Id); //Send.RoomNmae(btnregionname, deviceinof); } break; case 4: { var logicinof = Common.Logic.LogicList.Find((obj) => { return obj.LogicId.ToString() == actions["DeviceAddr"].ToString(); }); if (logicinof == null) { continue; } ///显示逻辑名称 var btnlogic = new Button { Width = Application.GetRealWidth(500), TextAlignment = TextAlignment.CenterLeft, Gravity = Gravity.CenterVertical, Text = logicinof.LogicName, TextColor = ZigbeeColor.Current.LogicTextBlackColor, TextSize = 14, //TextColor = 0xff121212, }; actionsrowLayout.AddChidren(btnlogic); var logicedit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; actionsrowLayout.AddRightView(logicedit); logicedit.MouseUpEventHandler += (sender, e) => { var selectedLogicState = new SelectedLogicState(); UserView.HomePage.Instance.AddChidren(selectedLogicState); UserView.HomePage.Instance.PageIndex += 1; selectedLogicState.IsDeviceEditor = true; selectedLogicState.Show(logicinof); }; ///显示Logic条件状态控件 var logicstatus = new Button { Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(160), Gravity = Gravity.CenterVertical, //TextColor = 0xff121212, X = Application.GetRealWidth(1080 - 330), TextColor = ZigbeeColor.Current.LogicTextBlackColor, TextAlignment = TextAlignment.CenterRight, TextSize = 14, }; actionsrowLayout.AddChidren(logicstatus); if (actions["EnableLogic"].ToString() == "1") { logicstatus.Text = Language.StringByID(MyInternationalizationString.open1); } else { logicstatus.Text = Language.StringByID(MyInternationalizationString.disable); } } break; case 6: { var btnsecurity = new Button { Width = Application.GetRealWidth(700), TextAlignment = TextAlignment.CenterLeft, Gravity = Gravity.CenterVertical, TextColor = ZigbeeColor.Current.LogicTextBlackColor, //TextColor = 0xff121212, TextID = MyInternationalizationString.security, TextSize = 14, }; //actionsrowLayout.AddChidren(btnsecurity); var btnsecurityedit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, }; actionsrowLayout.AddRightView(btnsecurityedit); btnsecurityedit.MouseUpEventHandler += (sender, e) => { var securityMode = new SecurityMode(); UserView.HomePage.Instance.AddChidren(securityMode); UserView.HomePage.Instance.PageIndex += 1; securityMode.IsDeviceEditor = true; securityMode.Show(); }; ///显示安防条件状态控件 var securitystatus = new Button { Width = Application.GetRealWidth(500), Height = Application.GetRealHeight(130), Gravity = Gravity.CenterVertical, TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextSize = 14, }; actionsrowLayout.AddChidren(securitystatus); if (actions["SecuritySetting"].ToString() == "0") { if (actions["Password"].ToString() == "888888") { actionsIcon.UnSelectedImagePath = "ZigeeLogic/withdrawal.png"; securitystatus.Text = Language.StringByID(MyInternationalizationString.urgentwithdrawal); } else { actionsIcon.UnSelectedImagePath = "ZigeeLogic/withdrawal.png"; securitystatus.Text = Language.StringByID(MyInternationalizationString.withdrawal); } } else if (actions["SecuritySetting"].ToString() == "1") { if (actions["SecurityModeId"].ToString() == "1") { actionsIcon.UnSelectedImagePath = "ZigeeLogic/athome.png"; securitystatus.Text = Language.StringByID(MyInternationalizationString.logicathomegarrison); } else if (actions["SecurityModeId"].ToString() == "2") { actionsIcon.UnSelectedImagePath = "ZigeeLogic/leavehome.png"; securitystatus.Text = Language.StringByID(MyInternationalizationString.logicremovehomegarrison); } } } break; case 7: { var delaytimevalue = int.Parse(actions["DelayTime"].ToString()); var Minutes = delaytimevalue / 60; var seconds = delaytimevalue % 60; actionsIcon.UnSelectedImagePath = "ZigeeLogic/delay.png"; ///延时Button var delaytimeBtn = new Button { Width = Application.GetRealWidth(500), TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextSize = 14, }; actionsrowLayout.AddChidren(delaytimeBtn); if (Minutes != 0) { if (seconds == 0) { delaytimeBtn.Text = Minutes.ToString() + Language.StringByID(MyInternationalizationString.minute); } else { delaytimeBtn.Text = Minutes.ToString() + Language.StringByID(MyInternationalizationString.minute) + seconds.ToString() + Language.StringByID(MyInternationalizationString.second); } } else { delaytimeBtn.Text = seconds.ToString() + Language.StringByID(MyInternationalizationString.second); } ///延时编辑Button var delaytimeedit = new Button { BackgroundColor = ZigbeeColor.Current.LogicEditBlackColor1, Text = Language.StringByID(MyInternationalizationString.edit), TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, Tag = i, }; actionsrowLayout.AddRightView(delaytimeedit); ///编辑点击事件 delaytimeedit.MouseUpEventHandler += (sender, e) => { var delayTime = new DelayTime(); UserView.HomePage.Instance.AddChidren(delayTime); UserView.HomePage.Instance.PageIndex += 1; delayTime.Show(int.Parse(delaytimeedit.Tag.ToString()), true); }; }; break; } ///删除控件 var del = new Button { BackgroundColor = ZigbeeColor.Current.LogicDelBlackColor1, Text = Language.StringByID(MyInternationalizationString.del), }; actionsrowLayout.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.CurrentLogic.Actions.Remove(actions); // devicesFrameLayout.RemoveFromParent(); var logicCommunalPage = new LogicCommunalPage(); UserView.HomePage.Instance.AddChidren(logicCommunalPage); UserView.HomePage.Instance.PageIndex += 1; logicCommunalPage.Show(() => { }); } }; alert.Show(); }; } } #endregion #region -----每天 设置周期----- var fraline1 = new FrameLayout { Height = Application.GetRealHeight(30), }; middle.AddChidren(fraline1); var weekFrameLayout = new FrameLayout { Height = Application.GetRealHeight(160), BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor, }; middle.AddChidren(weekFrameLayout); var weekRowLayout = new RowLayout { Y = Application.GetRealHeight(30), Width = Application.GetRealWidth(965), Height = Application.GetRealHeight(130), X = Application.GetRealWidth(58), LineColor = ZigbeeColor.Current.LogicRowLayoutLineColor, }; weekFrameLayout.AddChidren(weekRowLayout); var settxet = new Button { Text = Language.StringByID(MyInternationalizationString.setupcycle), TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicTextBlackColor, Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(60), Gravity = Gravity.CenterVertical, TextSize = 14, }; weekRowLayout.AddChidren(settxet); var btnweektext = new Button { Width = Application.GetRealWidth(595), Height = Application.GetRealHeight(60), TextAlignment = TextAlignment.CenterRight, //Text = "每天", TextColor = ZigbeeColor.Current.LogicBtnCancelColor, TextID = MyInternationalizationString.everyday, Y = Application.GetRealHeight(35), X = settxet.Right, TextSize = 14, }; weekRowLayout.AddChidren(btnweektext); var nextBtn = new Button { Width = Application.GetRealWidth(58), Height = Application.GetRealHeight(58), UnSelectedImagePath = "ZigeeLogic/next.png", X = Application.GetRealWidth(965 - 58), Gravity = Gravity.CenterVertical, }; weekRowLayout.AddChidren(nextBtn); UpdateWeek(btnweektext); EventHandler cycleclick = (sender, e) => { /*------保留每月,每年类型*/ var cycle = new Cycle(() => { UpdateWeek(btnweektext); }); UserView.HomePage.Instance.AddChidren(cycle); UserView.HomePage.Instance.PageIndex += 1; cycle.Show(); //var cyclicCycle = new CyclicCycle(() => { UpdateWeek(btnweektext); }); //UserView.HomePage.Instance.AddChidren(cyclicCycle); //UserView.HomePage.Instance.PageIndex += 1; //cyclicCycle.Show(); }; btnweektext.MouseUpEventHandler += cycleclick; nextBtn.MouseUpEventHandler += cycleclick; #endregion #region ----推送设置---- var pushFrameLayout = new FrameLayout { Height = Application.GetRealHeight(160), BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor, }; middle.AddChidren(pushFrameLayout); var pushswitchRowlayout = new RowLayout { Y = Application.GetRealHeight(30), Width = Application.GetRealWidth(965), Height = Application.GetRealHeight(130), X = Application.GetRealWidth(58), LineColor = ZigbeeColor.Current.LogicRowLayoutLineColor, }; pushFrameLayout.AddChidren(pushswitchRowlayout); var btnswitchtxet = new Button { TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicTextBlackColor, Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(60), Gravity = Gravity.CenterVertical, TextID = MyInternationalizationString.pushswitch, TextSize = 14, }; pushswitchRowlayout.AddChidren(btnswitchtxet); var btnswitch = new Button { Width = Application.GetMinRealAverage(104), Height = Application.GetMinRealAverage(63), UnSelectedImagePath = "ZigeeLogic/logicclose.png", SelectedImagePath = "ZigeeLogic/logicopen.png", X = Application.GetRealWidth(965 - 104), Gravity = Gravity.CenterVertical, }; pushswitchRowlayout.AddChidren(btnswitch); var custompushFrameLayout = new FrameLayout { Height = Application.GetRealHeight(0), BackgroundColor = ZigbeeColor.Current.LogicBlankBackgroundColor, }; middle.AddChidren(custompushFrameLayout); var custompushRowLayout = new RowLayout { Y = Application.GetRealHeight(30), Width = Application.GetRealWidth(965), Height = Application.GetRealHeight(130), X = Application.GetRealWidth(58), LineColor = ZigbeeColor.Current.LogicBlankBackgroundColor, }; custompushFrameLayout.AddChidren(custompushRowLayout); var btncustompush = new Button { TextID = MyInternationalizationString.custompush, TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicTextBlackColor, Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(60), Gravity = Gravity.CenterVertical, TextSize = 14, }; custompushRowLayout.AddChidren(btncustompush); var custompushback = new Button { Width = Application.GetRealWidth(58), Height = Application.GetRealHeight(58), UnSelectedImagePath = "ZigeeLogic/next.png", X = Application.GetRealWidth(965 - 58), Gravity = Gravity.CenterVertical, }; custompushRowLayout.AddChidren(custompushback); EventHandler customclick = (sender, e) => { var CustomText = new CustomText(); UserView.HomePage.Instance.AddChidren(CustomText); UserView.HomePage.Instance.PageIndex += 1; CustomText.Show(); }; btncustompush.MouseUpEventHandler += customclick; custompushback.MouseUpEventHandler += customclick; custompushRowLayout.MouseUpEventHandler += customclick; btnswitch.MouseUpEventHandler += (sender1, e1) => { btnswitch.IsSelected = !btnswitch.IsSelected; if (btnswitch.IsSelected) { custompushFrameLayout.Height = Application.GetRealHeight(160); } else { custompushFrameLayout.Height = Application.GetRealHeight(0); } }; #endregion var saveFrameLayout = new FrameLayout { Y = middle.Bottom, Height = Application.GetRealHeight(180), BackgroundColor = ZigbeeColor.Current.LogicMiddleBackgroundColor, }; this.AddChidren(saveFrameLayout); var btnsave = new Button { X = Application.GetRealWidth(85), Height = Application.GetRealHeight(130),//194 Width = Application.GetRealWidth(910), Radius = (uint)Application.GetRealHeight(60), BackgroundColor = ZigbeeColor.Current.LogicBtnSaveBackgroundColor, TextID = MyInternationalizationString.Save, TextColor = ZigbeeColor.Current.LogicBtnSaveTextColor, TextSize=16, }; saveFrameLayout.AddChidren(btnsave); btnsave.MouseUpEventHandler += async (sender, e) => { var name = logicTextBox.Text.Trim(); if (string.IsNullOrEmpty(logicTextBox.Text.Trim())) { new Alert(Language.StringByID(MyInternationalizationString.Tip), Language.StringByID(MyInternationalizationString.PleaseEnterLogicName), Language.StringByID(MyInternationalizationString.Close)).Show(); return; } var logicname = Common.Logic.LogicList.Find((logic) => Common.Logic.CurrentLogic.LogicId != logic.LogicId && logic.LogicName == name); if (logicname != null) { new Alert(Language.StringByID(MyInternationalizationString.Tip), Language.StringByID(MyInternationalizationString.Rename), Language.StringByID(MyInternationalizationString.Close)).Show(); return; } Common.Logic.CurrentLogic.LogicName = name; bool succeed = false; //判断是新添加逻辑(默认0)还是修改逻辑 CommonPage.Loading.Start(); if (Common.Logic.CurrentLogic.LogicId == 0) { //发送添加逻辑命令 var logicifon = await Send.AddModifyLogic(Common.Logic.CurrentLogic); if (logicifon != null && logicifon.LogicId != 0) { succeed = true; Common.Logic.CurrentLogic.LogicId = logicifon.LogicId; Common.Logic.LogicList.Add(Common.Logic.CurrentLogic); } } else { //发送修改逻辑命令 var modlogic=Send.AddModifyLogic(Common.Logic.CurrentLogic); //编辑默认成功(不考虑网络情况); succeed = true; } CommonPage.Loading.Hide(); if (!succeed)//succeed标记是添加成功还是失败 { //网关回复失败,不关闭界面,让它停留当前界面; //(原因:考虑到失败重新编辑原来数据给用户带来了麻烦) ///提示:添加自动化失败; //TipView("添加自动化失败"); //return; } UserView.HomePage.Instance.RemoveViewByTag("Logic"); Category.Category.instance?.RefreshBodyView(); }; } /// /// 更新执行周期的方法 /// /// Btndisplaycycle. void UpdateWeek(Button btndisplaycycle) { switch (Common.Logic.CurrentLogic.TimeAttribute.Repeat) { ///0:只执行一次,执行后IsEnable值置;1,今年内执行;2:每天执行;3:每月执行;4:每年执行;5:周重复。 case 0: { btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.executeonce); }; break; case 1: { }; break; case 2: { btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.everyday); }; break; case 3: { string len = "", value = ""; var stringvalue = Convert.ToString(Common.Logic.CurrentLogic.TimeAttribute.MonthDate, 2); var str = stringvalue.Insert(0, new string('0', 32 - stringvalue.Length)); for (int j = 31; j >= 0; j--) { len += str.Substring(j, 1); } for (int j = 0; j < len.Length; j++) { var strvalue = len.Substring(j, 1); if (strvalue == "1") { value += (j + 1).ToString() + ","; } } btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.monthly) + value.TrimEnd(',') + Language.StringByID(MyInternationalizationString.day); }; break; case 4: { Dictionary dictionary = new Dictionary(); ///找出执行的月份和天数 if (Common.Logic.CurrentLogic.TimeAttribute.SelectMonDate.Count != 0) { for (int i = 0; i < Common.Logic.CurrentLogic.TimeAttribute.SelectMonDate.Count; i++) { var dayvalue = Common.Logic.CurrentLogic.TimeAttribute.SelectMonDate[i]; if (dayvalue != 0) { dictionary.Add(i + 1, dayvalue); } } } if (dictionary.Count != 0 && dictionary.Count == 1) { string len = "", leng = ""; int minvalue = 0, Maximum = 0; foreach (var value in dictionary) { ///取出月份 var month = value.Key; ///取出日数 var day = value.Value; var maxvalue = Convert.ToString(day, 2); var str = maxvalue.Insert(0, new string('0', 32 - maxvalue.Length)); for (int j = 31; j >= 0; j--) { len += str.Substring(j, 1); } for (int j = 0; j < len.Length; j++) { var strvalue = len.Substring(j, 1); if (strvalue == "1") { minvalue = j + 1; break; } } for (int j = 0; j < len.Length; j++) { var strvalue = len.Substring(j, 1); if (strvalue == "1") { Maximum = j + 1; } } if (month.ToString().Length < 2) { leng = "0" + month.ToString(); } else { leng = month.ToString(); } if (minvalue == Maximum) { btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.everyyear) + leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString()); } else { btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.everyyear) + leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString()) + "-" + leng + "/" + (Maximum.ToString().Length < 2 ? "0" + Maximum.ToString() : Maximum.ToString()); } } } else { int b = 0; string stringtext = ""; foreach (var value in dictionary) { string len = "", leng = ""; int minvalue = 0, Maximum = 0; ///取出月份 var month = value.Key; ///取出日数 var day = value.Value; var maxvalue = Convert.ToString(day, 2); var str = maxvalue.Insert(0, new string('0', 32 - maxvalue.Length)); for (int j = 31; j >= 0; j--) { len += str.Substring(j, 1); } if (month.ToString().Length < 2) { leng = "0" + month.ToString(); } else { leng = month.ToString(); } if (b == 0) { for (int j = 0; j < len.Length; j++) { var strvalue = len.Substring(j, 1); if (strvalue == "1") { minvalue = j + 1; break; } } stringtext += leng + "/" + (minvalue.ToString().Length < 2 ? "0" + minvalue.ToString() : minvalue.ToString()) + "-"; } if (b == dictionary.Count - 1) { for (int j = 0; j < len.Length; j++) { var strvalue = len.Substring(j, 1); if (strvalue == "1") { Maximum = j + 1; } } stringtext += leng + "/" + (Maximum.ToString().Length < 2 ? "0" + Maximum.ToString() : Maximum.ToString()); } b++; } btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.everyyear) + stringtext; } }; break; case 5: { string len = "", text = ""; List listvalueInt = new List(); listvalueInt.Clear(); var maxvalue = Convert.ToString(Common.Logic.CurrentLogic.TimeAttribute.WeekDay, 2); var str = maxvalue.Insert(0, new string('0', 8 - maxvalue.Length)); for (int j = 7; j >= 0; j--) { len += str.Substring(j, 1); } for (int j = 0; j < len.Length; j++) { var strvalue = len.Substring(j, 1); if (strvalue == "1") { listvalueInt.Add(j + 1); if ((j + 1) == 1) { text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.mon1) + ","; //text += Language.StringByID(MyInternationalizationString.mon) + ","; } else if ((j + 1) == 2) { text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.tue1) + ","; //text += Language.StringByID(MyInternationalizationString.tue) + ","; } else if ((j + 1) == 3) { text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.wed1) + ","; //text += Language.StringByID(MyInternationalizationString.wed) + ","; } else if ((j + 1) == 4) { text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.thu1) + ","; //text += Language.StringByID(MyInternationalizationString.thu) + ","; } else if ((j + 1) == 5) { text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.frl1) + ","; //text += Language.StringByID(MyInternationalizationString.frl) + ","; } else if ((j + 1) == 6) { text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.sat1) + ","; //text += Language.StringByID(MyInternationalizationString.sat) + ","; } else if ((j + 1) == 7) { text += Language.StringByID(MyInternationalizationString.week1) + Language.StringByID(MyInternationalizationString.sun1) + ","; //text += Language.StringByID(MyInternationalizationString.sun) + ","; } } } //暂时隐藏掉,需要显示周末和工作日再放开; //if (listvalueInt.Count == 5 && !listvalueInt.Contains(6) && !listvalueInt.Contains(7)) //{ // btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.workingday); //} //else if (listvalueInt.Count == 2 && listvalueInt.Contains(6) && listvalueInt.Contains(7)) //{ // btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.weekend); //} //else if (listvalueInt.Count == 7) //{ // btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.everyday); //} //else //{ // btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.week1) + text.Replace(Language.StringByID(MyInternationalizationString.week1), "").TrimEnd(','); //} btndisplaycycle.Text = Language.StringByID(MyInternationalizationString.week1) + text.Replace(Language.StringByID(MyInternationalizationString.week1), "").TrimEnd(','); //btndisplaycycle.Text = text.TrimEnd(','); }; break; } } void ConditionView(bool edit) { Common.Logic.CurrentLogic.LogicName = logicTextBox.Text.Trim(); #region 组合条件View FrameLayout flMain = new FrameLayout { BackgroundColor = 0x50000000 }; this.AddChidren(flMain); flMain.MouseUpEventHandler += (sender2, e2) => { flMain.RemoveFromParent(); }; var framelayout = new FrameLayout { Width = Application.GetRealWidth(1080), Height = Application.GetRealHeight(530), Y = Application.GetRealHeight(1920 - 530), BackgroundColor = ZigbeeColor.Current.LogicBackgroundColor, Radius = (uint)Application.GetRealHeight(60), }; flMain.AddChidren(framelayout); framelayout.SetCornerWithSameRadius(Application.GetRealHeight(58),HDLUtils.RectCornerTopLeft|HDLUtils.RectCornerTopRight); #region -------取消 完成 var timetype = new RowLayout { Height = Application.GetRealHeight(140), LineColor = ZigbeeColor.Current.LogicRowLayoutLineColor, }; framelayout.AddChidren(timetype); var Btncancel = new Button { TextID = MyInternationalizationString.cancel, TextColor = ZigbeeColor.Current.LogicBtnCancelColor, Height = Application.GetRealHeight(140), Width = Application.GetRealWidth(200), X = Application.GetRealWidth(80), TextAlignment = TextAlignment.CenterLeft, TextSize = 14, }; timetype.AddChidren(Btncancel); Btncancel.MouseUpEventHandler += (sender16, e16) => { flMain.RemoveFromParent(); UserView.HomePage.Instance.ScrollEnabled = true; }; var Btntitle = new Button { TextID = MyInternationalizationString.condition, TextColor = ZigbeeColor.Current.LogicBtnTypeColor, Height = Application.GetRealHeight(140), Width = Application.GetRealWidth(320), TextAlignment = TextAlignment.Center, X = Btncancel.Right + Application.GetRealWidth(100), TextSize = 16, }; timetype.AddChidren(Btntitle); var Btncomplete = new Button { TextID = MyInternationalizationString.complete, TextColor = ZigbeeColor.Current.LogicBtnCompleteColor, Height = Application.GetRealHeight(140), Width = Application.GetRealWidth(200), TextAlignment = TextAlignment.CenterRight, X = Btntitle.Right + Application.GetRealWidth(100), TextSize = 14, }; timetype.AddChidren(Btncomplete); #endregion #region -------满足所有条件 满足其中一个条件 #region -------满足所有条件 var andFrameLayout = new FrameLayout { Height = Application.GetRealHeight(160), Y = timetype.Bottom + Application.GetRealHeight(20), }; framelayout.AddChidren(andFrameLayout); var androw = new RowLayout { Y = Application.GetRealHeight(30), Width = Application.GetRealWidth(920), Height = Application.GetRealHeight(130), X = Application.GetRealWidth(80), LineColor = ZigbeeColor.Current.LogicRowLayoutLineColor, }; andFrameLayout.AddChidren(androw); var andbtn = new Button { Width = Application.GetRealWidth(600), TextID = MyInternationalizationString.Allconditions, TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicBtnNotSelectedColor, TextSize = 14, }; androw.AddChidren(andbtn); var andSelected = new SelectedButton(); androw.AddChidren(andSelected); #endregion #region -------满足其中一个条件 var orFrameLayout = new FrameLayout { Height = Application.GetRealHeight(160), Y = andFrameLayout.Bottom, }; framelayout.AddChidren(orFrameLayout); var orrow = new RowLayout { Y = Application.GetRealHeight(30), Width = Application.GetRealWidth(920), Height = Application.GetRealHeight(130), X = Application.GetRealWidth(80), LineColor = ZigbeeColor.Current.LogicBackgroundColor, }; orFrameLayout.AddChidren(orrow); var orbtn = new Button { Width = Application.GetRealWidth(600), TextID = MyInternationalizationString.anycondition, TextAlignment = TextAlignment.CenterLeft, TextColor = ZigbeeColor.Current.LogicBtnNotSelectedColor, TextSize = 14, }; orrow.AddChidren(orbtn); var orSelected = new SelectedButton(); orrow.AddChidren(orSelected); #endregion ///满足所有条件点击事件 EventHandler andclick = (sedner14, e14) => { andSelected.Visible = true; orSelected.Visible = false; andbtn.TextColor = ZigbeeColor.Current.LogicBtnSelectedColor; orbtn.TextColor = ZigbeeColor.Current.LogicBtnNotSelectedColor; }; androw.MouseUpEventHandler += andclick; andbtn.MouseUpEventHandler += andclick; andSelected.MouseUpEventHandler += andclick; andFrameLayout.MouseUpEventHandler += andclick; ///满足其中一个条件点击事件 EventHandler orclick = (sedner15, e15) => { andSelected.Visible = false; orSelected.Visible = true; andbtn.TextColor = ZigbeeColor.Current.LogicBtnNotSelectedColor; orbtn.TextColor = ZigbeeColor.Current.LogicBtnSelectedColor; }; orrow.MouseUpEventHandler += orclick; orbtn.MouseUpEventHandler += orclick; orSelected.MouseUpEventHandler += orclick; orFrameLayout.MouseUpEventHandler += orclick; #endregion #endregion if (edit) { if (Common.Logic.CurrentLogic.Relationship == 0) { andSelected.Visible = true; orSelected.Visible = false; andbtn.TextColor = ZigbeeColor.Current.LogicBtnSelectedColor; orbtn.TextColor = ZigbeeColor.Current.LogicBtnNotSelectedColor; } else { andSelected.Visible = false; orSelected.Visible = true; andbtn.TextColor = ZigbeeColor.Current.LogicBtnNotSelectedColor; orbtn.TextColor = ZigbeeColor.Current.LogicBtnSelectedColor; } } Btncomplete.MouseUpEventHandler += (sender, e) => { if (!andSelected.Visible && !orSelected.Visible) { ///可以提示未选中状态; return; } flMain.RemoveFromParent(); if (andSelected.Visible) { Common.Logic.CurrentLogic.Relationship = 0; } if (orSelected.Visible) { Common.Logic.CurrentLogic.Relationship = 1; } if (edit) { if (Common.Logic.CurrentLogic.LogicId != 0) { Send.LogicControlSwitch(Common.Logic.CurrentLogic); } var logicCommunalPage = new LogicCommunalPage(); UserView.HomePage.Instance.AddChidren(logicCommunalPage); UserView.HomePage.Instance.PageIndex += 1; logicCommunalPage.Show(() => { }); } else { var addLogicPage = new AddLogicPage(); UserView.HomePage.Instance.AddChidren(addLogicPage); UserView.HomePage.Instance.PageIndex += 1; addLogicPage.Show(); } }; } /// /// 闪现式提示框的方法 /// /// 提示内容 /// 停留时间单位为s public void TipView(string tipText, int second = 1) { var frameLayout = new FrameLayout { BackgroundColor = 0x50000000 }; this.AddChidren(frameLayout); var btn = new Button { Gravity = Gravity.Center, Text = tipText, BackgroundColor = 0xff1f1f1f, Width = Application.GetRealWidth(500), Height = Application.GetRealHeight(100), Radius = (uint)Application.GetRealHeight(50), }; frameLayout.AddChidren(btn); var dateTime1 = DateTime.Now; new System.Threading.Thread(() => { Application.RunOnMainThread(() => { while (true) { if ((DateTime.Now - dateTime1).TotalMilliseconds > second * 1000) { //默认一秒关闭 frameLayout.RemoveFromParent(); break; } } }); }) { IsBackground = true }.Start(); } } }