using System; using System.Collections.Generic; using Shared; namespace Shared.SimpleControl.Phone { public class AlexaSettingPage : Dialog { Room room; List showList = new List (); VerticalScrolViewLayout deviceScrolView; VerticalScrolViewLayout typeLayout; string selectedDeviceType = "All"; List roomSceneFilePathList = new List (); List roomDeviceFilePathList = new List (); int show = 99; FrameLayout bodyView; public AlexaSettingPage (Room r) { room = r; showList.Clear (); roomSceneFilePathList.AddRange (room.SceneFilePathList); roomDeviceFilePathList.AddRange (room.DeviceFilePathList); showList.AddRange (roomDeviceFilePathList); showList.AddRange (roomSceneFilePathList); bodyView = new FrameLayout () { BackgroundColor = SkinStyle.Current.MainColor, }; AddChidren (bodyView); } public void ShowPage (Action action, Action, List> saveAction) { #region ---TopView--- var topView = new RowLayout () { Y = Application.GetRealHeight (36), Height = Application.GetRealHeight (90), Width = Application.GetRealWidth (640), BackgroundColor = SkinStyle.Current.MainColor, }; bodyView.AddChidren (topView); var back = new Button () { Height = Application.GetRealHeight (90), Width = Application.GetRealWidth (85), UnSelectedImagePath = "Item/Back.png", SelectedImagePath = "Item/BackSelected.png", }; topView.AddChidren (back); back.MouseUpEventHandler += (sender, e) => { this.Close (); }; Button NameButton = new Button () { Width = Application.GetRealWidth (400), Height = Application.GetMinReal (90), TextID = R.MyInternationalizationString.AddNewDevice, //Text = MainPage.SoftTitle, SelectedTextColor = SkinStyle.Current.TextColor1, TextColor = SkinStyle.Current.TextColor1, Gravity = Gravity.CenterHorizontal, TextAlignment = TextAlignment.Center, TextSize = 20, }; topView.AddChidren (NameButton); #endregion #region type view var chooseTypeView = new RowLayout () { Y = topView.Bottom, Height = Application.GetRealHeight (110), BackgroundColor = SkinStyle.Current.ViewColor, }; bodyView.AddChidren (chooseTypeView); Button btnEquipmentIcon = new Button () { Width = Application.GetRealHeight (65), Height = Application.GetRealHeight (65), UnSelectedImagePath = "Item/LogicModule.png", X = Application.GetRealWidth (30), Gravity = Gravity.CenterVertical, }; chooseTypeView.AddChidren (btnEquipmentIcon); Button btnDrodIcon = new Button () { X = Application.GetRealWidth (540), Height = Application.GetMinRealAverage (46), Width = Application.GetMinRealAverage (47), UnSelectedImagePath = "Item/Down.png", SelectedImagePath = "Item/DownSelected.png", Gravity = Gravity.CenterVertical, }; chooseTypeView.AddChidren (btnDrodIcon); Button btnEquipmentType = new Button () { Width = Application.GetRealHeight (460), X = btnEquipmentIcon.Right + Application.GetRealWidth (20), TextAlignment = TextAlignment.CenterLeft, Text = Language.StringByID (R.MyInternationalizationString.All), TextColor = SkinStyle.Current.TextColor1, SelectedTextColor = SkinStyle.Current.DialogTextColor }; chooseTypeView.AddChidren (btnEquipmentType); typeLayout = new VerticalScrolViewLayout () { Y = chooseTypeView.Bottom, Height = Application.GetRealHeight (0), BackgroundColor = SkinStyle.Current.ViewColor }; EventHandler chooseTypeMethod = (sender, e) => { if (show == 99) {//第一次需要先初始化选择设备类型界面 InitEquipmentTypeView (btnEquipmentType, btnEquipmentIcon, chooseTypeView); show = 0; } else if (show == 0) { typeLayout.Height = Application.GetRealHeight (1136 - 126 - 90); chooseTypeView.BackgroundColor = SkinStyle.Current.MainColor; show = 1; } else if (show == 1) { typeLayout.Height = 0; chooseTypeView.BackgroundColor = SkinStyle.Current.ViewColor; show = 0; } }; btnEquipmentType.MouseUpEventHandler += chooseTypeMethod; btnDrodIcon.MouseUpEventHandler += chooseTypeMethod; chooseTypeView.MouseUpEventHandler += chooseTypeMethod; #endregion deviceScrolView = new VerticalScrolViewLayout () { Y = chooseTypeView.Bottom, Height = Application.GetRealHeight (1136 - 126 - 110 - 89), BackgroundColor = SkinStyle.Current.ViewColor, }; bodyView.AddChidren (deviceScrolView); InitDeviceList (); var btnClose = new Button () { Height = Application.GetRealHeight (90), Y = deviceScrolView.Bottom, BackgroundColor = SkinStyle.Current.MainColor, Text = "OK", TextColor = SkinStyle.Current.TextColor1, TextAlignment = TextAlignment.Center, TextSize = 16, }; bodyView.AddChidren (btnClose); btnClose.MouseUpEventHandler += (sender, e) => { saveAction (roomSceneFilePathList, roomDeviceFilePathList); this.Close (); }; } /// /// 显示在本地找到的所有设备 /// void InitDeviceList () { deviceScrolView.RemoveAll (); System.Threading.Tasks.Task.Run (() => { //找出需要显示的设备 var filesList = IO.FileUtils.ReadFiles ().FindAll ((obj) => { string [] str = obj.Split ('_'); return obj.StartsWith ("Equipment_") && str.Length == 5; }); var localEquipments = filesList.FindAll ((obj) => { string typeString = obj.Split ('_') [1]; return ( #region light typeString.ToString () == DeviceType.LightCCT.ToString () || typeString.ToString () == DeviceType.LightRGB.ToString () || typeString.ToString () == DeviceType.LightDALI.ToString () || typeString.ToString () == DeviceType.LightRGBW.ToString () || typeString.ToString () == DeviceType.LightLogic.ToString () || typeString.ToString () == DeviceType.LightSwitch.ToString () || typeString.ToString () == DeviceType.LightDimming.ToString () || typeString.ToString () == DeviceType.LightMixSwitch.ToString () || typeString.ToString () == DeviceType.LightRGBandCCT.ToString () || typeString.ToString () == DeviceType.LightMixDimming.ToString () || typeString.ToString () == DeviceType.LightEnergySocket.ToString () || typeString.ToString () == DeviceType.LightEnergySwitch.ToString () || typeString.ToString () == DeviceType.LightSwitchSocket.ToString () || typeString.ToString () == DeviceType.DMX48.ToString () #endregion #region curtain || typeString.ToString () == DeviceType.CurtainModel.ToString () || typeString.ToString () == DeviceType.CurtainRoller.ToString () || typeString.ToString () == DeviceType.CurtainTrietex.ToString () #endregion #region ac //|| typeString.ToString () == DeviceType.ACPanel.ToString () //|| typeString.ToString () == DeviceType.ACDevice.ToString () //|| typeString.ToString () == DeviceType.ACInfrared.ToString () //|| typeString.ToString () == DeviceType.ACCoolmaster.ToString () //|| typeString.ToString () == DeviceType.CustomAC.ToString () //|| typeString.ToString () == DeviceType.HVAC.ToString () #endregion #region || typeString.ToString () == DeviceType.FanModule.ToString () //|| typeString.ToString () == DeviceType.UniversalDevice.ToString () #endregion ); }); var globalSceneFileList = Newtonsoft.Json.JsonConvert.DeserializeObject> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (Scene.GlobalSceneFilePath))); if (globalSceneFileList == null) { globalSceneFileList = new List (); } List RoomsSceneFileList = new List (); foreach (var r in Room.Lists) { if (string.IsNullOrEmpty (r.Name)) { continue; } if (r != null) { RoomsSceneFileList.AddRange (r.SceneFilePathList); } } List TargetList = new List (); if (selectedDeviceType == "Scene") { if (string.IsNullOrEmpty (room.RoomFilePath) || room.RoomFilePath == Room.FavoriteRoom) { TargetList.AddRange (globalSceneFileList); TargetList.AddRange (RoomsSceneFileList); } else { Application.RunOnMainThread (() => { new ScenePhoneMethod ().AddOrUpdataSceneBaseMassage (room.RoomFilePath); }); } } else { TargetList.AddRange (localEquipments); } for (int i = 0; i < TargetList.Count;) { var taget = TargetList [i]; var tacount = TargetList.FindAll ((obj) => obj == taget).Count; if (tacount == 1) { i++; } while (tacount > 1) { TargetList.Remove (taget); tacount--; } } foreach (string filePath in TargetList) { try { string [] str = filePath.Split ('_'); if (selectedDeviceType != null && selectedDeviceType != "Scene" && selectedDeviceType != "All") { //只显示当前选择的设备类型的设备 if (selectedDeviceType == "EC") { if (str [1].Contains (DeviceType.LightSwitch.ToString ())) { var b = IO.FileUtils.ReadFile (filePath); LightSwitch c = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (b)); if (!c.IsSocket) { continue; } } else continue; } else { if (!str [1].Contains (selectedDeviceType)) { continue; } } } var commonBytes = IO.FileUtils.ReadFile (filePath); if (commonBytes.Length == 0) { Utlis.WriteLine ("length loss"); continue; } if (commonBytes.Length == 1) { Utlis.WriteLine ("length loss 1"); continue; } if (str [1] == DeviceType.InfraredMode.ToString ()) { InfraredMode c = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (filePath))); if (c.InfraredType != InfraredType.TV) { continue; } } var deviceFilePath = filePath; if (deviceFilePath.Contains ("LightEnergySocket")) { deviceFilePath = deviceFilePath.Replace ("LightEnergySocket", "LightSwitch"); } else if (deviceFilePath.Contains ("LightEnergySwitch")) { deviceFilePath = deviceFilePath.Replace ("LightEnergySwitch", "LightSwitch"); } else if (deviceFilePath.Contains ("LightSwitchSocket")) { deviceFilePath = deviceFilePath.Replace ("LightSwitchSocket", "LightSwitch"); } else if(deviceFilePath.Contains("ACInfrared")) { deviceFilePath = deviceFilePath.Replace ("ACInfrared", "HVAC"); } else if (deviceFilePath.Contains ("CurtainModel")) { deviceFilePath = deviceFilePath.Replace ("CurtainModel", "CurtainModule"); } Common commonDevice = Newtonsoft.Json.JsonConvert.DeserializeObject (System.Text.Encoding.UTF8.GetString (commonBytes)); if (commonDevice.Type == DeviceType.OnePortBus || commonDevice.Type == DeviceType.OnePortWirelessFR || commonDevice.Type == DeviceType.OnePortMqttFR || commonDevice.Type == DeviceType.RCU || commonDevice.Type == DeviceType.A31MusicModel || commonDevice.Type == DeviceType.MusicA31) { continue; } Application.RunOnMainThread (() => { var deviceRow = new RowLayout () { Height = Application.GetRealHeight (120), }; deviceScrolView.AddChidren (deviceRow); var btnPoint = new Button () { Width = Application.GetMinRealAverage (10), Height = Application.GetMinRealAverage (10), Radius = (uint)Application.GetMinRealAverage (5), X = Application.GetRealWidth (50), Gravity = Gravity.CenterVertical, BackgroundColor = SkinStyle.Current.TextColor1, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, }; deviceRow.AddChidren (btnPoint); Button btnEquipment = new Button () { X = btnPoint.Right + Application.GetRealWidth (30), Width = Application.GetRealWidth (310), TextAlignment = TextAlignment.CenterLeft, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, SelectedTextColor = SkinStyle.Current.DialogTextColor, TextColor = SkinStyle.Current.TextColor1, Text = commonDevice.Name, Tag = filePath, }; deviceRow.AddChidren (btnEquipment); //2020-01-10 隐藏定位按钮 //Button btnFindDevcie = new Button () { // X = btnEquipment.Right, // Width = Application.GetRealWidth (75), // Height = Application.GetRealHeight (72), // Gravity = Gravity.CenterVertical, // UnSelectedImagePath = "CrabtreeAdd/Position.png", // SelectedImagePath = "CrabtreeAdd/PositionOn.png", //}; //deviceRow.AddChidren (btnFindDevcie); //btnFindDevcie.MouseUpEventHandler += (sdd, dds) => { // btnFindDevcie.IsSelected = true; // Control.ControlBytesSend (Command.PositioningEquipment, commonDevice.SubnetID, commonDevice.DeviceID, new byte [] { 5 }); // System.Threading.Tasks.Task.Run (() => { // System.Threading.Thread.Sleep (3000); // Application.RunOnMainThread (() => { // btnFindDevcie.IsSelected = false; // }); // }); //}; if (selectedDeviceType != "Scene") { //2020-01-10 隐藏修改按钮 //return; var btnEdit = new Button () { X = btnEquipment.Right + Application.GetRealWidth (80), Width = Application.GetMinRealAverage (75), Height = Application.GetMinRealAverage (72), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "CrabtreeAdd/Edit.png", SelectedImagePath = "CrabtreeAdd/EditOn.png", }; deviceRow.AddChidren (btnEdit); btnEdit.MouseUpEventHandler += (sd, ds) => { Action successAction = () => { GenericDialog.Current.RefreshRemark (commonDevice); if (!roomDeviceFilePathList.Contains (filePath)) { roomDeviceFilePathList.Add (filePath); } }; GenericDialog.Current.ShowModifyRemarksDialog (commonDevice, commonBytes, btnEquipment, successAction); }; } var btnChoose = new Button () { X = Application.GetRealWidth (472 + 80), Width = Application.GetMinRealAverage (75), Height = Application.GetMinRealAverage (72), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "CrabtreeAdd/Choose.png", SelectedImagePath = "CrabtreeAdd/ChooseOn.png", IsSelected = showList.Contains (deviceFilePath), Tag = filePath }; btnChoose.AddTag ("DeviceFilePath", deviceFilePath); deviceRow.AddChidren (btnChoose); btnChoose.MouseUpEventHandler += (sendere, ee) => { btnChoose.IsSelected = !btnChoose.IsSelected; if (btnChoose.IsSelected) { if (selectedDeviceType == "Scene") { roomSceneFilePathList.Add (((Button)sendere).Tag.ToString ()); } else { roomDeviceFilePathList.Add (((Button)sendere).Tag.ToString ()); } showList.Add (((Button)sendere).Tag.ToString ()); } else { if (selectedDeviceType == "Scene") { roomSceneFilePathList.Remove (((Button)sendere).Tag.ToString ()); } else { roomDeviceFilePathList.Remove (((Button)sendere).GetTagByKey ("DeviceFilePath").ToString ()); roomDeviceFilePathList.Remove (((Button)sendere).Tag.ToString ()); } showList.Remove (((Button)sendere).Tag.ToString ()); } }; if (selectedDeviceType == "Scene") { //string [] str = filePath.Split ('_'); var sceneName = str [str.Length - 2];//倒数第一位为场景名 btnChoose.IsSelected = showList.Contains (sceneName); btnChoose.Enable = !btnChoose.IsSelected; } else { //2020-07-23 如果匹配则判断是否添加真正的路径 if (btnChoose.IsSelected) { if (!roomDeviceFilePathList.Contains (filePath)) { roomDeviceFilePathList.Add (filePath); } } } }); } catch (Exception ex) { Utlis.WriteLine (ex.Message); } } }); } void InitEquipmentTypeView (Button btnEquipmentType, Button btnEquipmentIcon, RowLayout chooseTypeView) { bodyView.AddChidren (typeLayout); //下拉列表的数据源(选项为设备类型有关) List typeTemp = new List{ Language.StringByID(R.MyInternationalizationString.All), Language.StringByID(R.MyInternationalizationString.Scenes), Language.StringByID(R.MyInternationalizationString.Lights), //Language.StringByID(R.MyInternationalizationString.AC), Language.StringByID(R.MyInternationalizationString.Curtains), //Language.StringByID(R.MyInternationalizationString.FoolHeat), //Language.StringByID(R.MyInternationalizationString.FreshAir), //Language.StringByID(R.MyInternationalizationString.TV), Language.StringByID(R.MyInternationalizationString.Fan), //Language.StringByID (R.MyInternationalizationString.Security), //Language.StringByID (R.MyInternationalizationString.LogicModule), //Language.StringByID(R.MyInternationalizationString.ElectricalControl), //Language.StringByID (R.MyInternationalizationString.MusicModel), //Language.StringByID (R.MyInternationalizationString.UniversalDevice), //Language.StringByID (R.MyInternationalizationString.Sensor), }; foreach (string typeName in typeTemp) { var dialogRow = new RowLayout () { Height = Application.GetRealHeight (110), }; typeLayout.AddChidren (dialogRow); var btnPoint = new Button () { Width = Application.GetMinRealAverage (10), Height = Application.GetMinRealAverage (10), Radius = (uint)Application.GetMinRealAverage (5), X = Application.GetRealWidth (70), Gravity = Gravity.CenterVertical, BackgroundColor = SkinStyle.Current.TextColor1, SelectedBackgroundColor = SkinStyle.Current.SelectedColor, }; dialogRow.AddChidren (btnPoint); Button btnTypeName = new Button () { Width = Application.GetRealHeight (400), X = btnPoint.Right + Application.GetRealWidth (30), Text = typeName, TextAlignment = TextAlignment.CenterLeft, TextColor = SkinStyle.Current.TextColor1 }; dialogRow.AddChidren (btnTypeName); EventHandler typeEvent = (sender1, e1) => { typeLayout.Height = 0; btnEquipmentType.Text = typeName; if (typeName == Language.StringByID (R.MyInternationalizationString.Lights)) { btnEquipmentIcon.UnSelectedImagePath = "Item/Light.png"; selectedDeviceType = "Light"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.Curtains)) { btnEquipmentIcon.UnSelectedImagePath = "Curtain/Curtain.png"; selectedDeviceType = "Curtain"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.AC)) { btnEquipmentIcon.UnSelectedImagePath = "AC/AC.png"; selectedDeviceType = "AC"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.FoolHeat)) { btnEquipmentIcon.UnSelectedImagePath = "Item/FloorHeating.png"; selectedDeviceType = "FoolHeat"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.DryContactPanel)) { btnEquipmentIcon.UnSelectedImagePath = "Item/DryContact.png"; selectedDeviceType = "DryContact"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.MusicModel)) { btnEquipmentIcon.UnSelectedImagePath = "Item/Music.png"; selectedDeviceType = "Music"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.InfraredMode)) { btnEquipmentIcon.UnSelectedImagePath = "Item/InfraredTV.png"; selectedDeviceType = "InfraredMode"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.TV)) { btnEquipmentIcon.UnSelectedImagePath = "Item/InfraredTV.png"; selectedDeviceType = "InfraredMode"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.ElectricalControl)) { btnEquipmentIcon.UnSelectedImagePath = "Light/Socket.png"; selectedDeviceType = "EC";//电器控制 } else if (typeName == Language.StringByID (R.MyInternationalizationString.Fan)) { btnEquipmentIcon.UnSelectedImagePath = "Fan/Fan.png"; selectedDeviceType = "Fan"; //} else if (typeName == Language.StringByID (R.MyInternationalizationString.LogicModule)) { // btnEquipmentIcon.UnSelectedImagePath = "Item/PointBig.png"; // selectedDeviceType = "LogicModule"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.Scenes)) { btnEquipmentIcon.UnSelectedImagePath = "Scene/Scene.png"; selectedDeviceType = "Scene"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.UniversalDevice)) { btnEquipmentIcon.UnSelectedImagePath = "UniversalDevice/UniversalDevice.png"; selectedDeviceType = "UniversalDevice"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.Sensor)) { btnEquipmentIcon.UnSelectedImagePath = "UniversalDevice/UniversalDevice.png"; selectedDeviceType = "Sensor"; } else if (typeName == Language.StringByID (R.MyInternationalizationString.FreshAir)) { btnEquipmentIcon.UnSelectedImagePath = "FreshAir/FreshAir.png"; selectedDeviceType = "FreshAir"; } else { btnEquipmentIcon.UnSelectedImagePath = "Item/LogicModule.png"; selectedDeviceType = "All"; } chooseTypeView.BackgroundColor = SkinStyle.Current.ViewColor; InitDeviceList (); }; dialogRow.MouseUpEventHandler += typeEvent; btnTypeName.MouseUpEventHandler += typeEvent; } } } }