using System; using System.Collections.Generic; using Shared.Common; using Shared.Phone.Device.Category; using Shared.Phone.UserCenter; namespace Shared.Phone.Device.CommonForm { public class SceneCategoryView : FrameLayout { /// /// scene /// public SceneUI scene; /// /// room /// public Shared.Common.Room room; /// /// delayTimeBtn /// private Button delayTimeBtn; /// /// delayImgBtn /// private Button delayImgBtn; /// /// sceneImg /// private ImageView sceneImg; /// /// SceneCategoryView /// /// /// public SceneCategoryView(int x, int y) { X = Application.GetRealWidth(x); Y = Application.GetRealHeight(y); Width = Application.GetRealWidth(1080); Height = Application.GetRealHeight(446); BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor; } /// /// init /// public void Init(SceneUI sceneUI,Common.Room curRoom) { this.scene = sceneUI; this.room = curRoom; InitFrame(); InitStatu(); } /// /// InitFrame /// private void InitFrame() { RemoveAll(); var sceneRowLayout = new RowLayout { Y = Application.GetRealHeight(46), Height = Application.GetRealHeight(446 - 46), LineColor = ZigbeeColor.Current.GXCGrayBackgroundColor, Tag= scene }; AddChidren(sceneRowLayout); sceneRowLayout.SubViewWidth = Application.GetRealWidth(199); sceneImg = new ImageView() { X = Application.GetRealWidth(179), Width = Application.GetRealWidth(844), Height = Application.GetRealHeight(400), ImagePath = scene.IconPathType == 0 ? scene.IconPath : System.IO.Path.Combine(Config.Instance.FullPath, scene.IconPath), Radius = (uint)Application.GetRealHeight(17) }; sceneRowLayout.AddChidren(sceneImg); //sceneImg.SetViewShadow(true); var leftFL = new FrameLayout { X = Application.GetRealWidth(CommonFormResouce.X_Left), Y = Application.GetRealHeight(58), Width = Application.GetRealWidth(251), Height = Application.GetRealHeight(282), BackgroundColor = ZigbeeColor.Current.GXCBlackBackgroundColor2, Radius = (uint)Application.GetRealHeight(17) }; sceneRowLayout.AddChidren(leftFL); var collectionBtn = new Button { X = Application.GetRealWidth(23), Y = Application.GetRealHeight(23), Width = Application.GetMinRealAverage(65), Height = Application.GetMinRealAverage(65), UnSelectedImagePath = "Item/Collection.png", SelectedImagePath = "Item/CollectionSelected.png", IsSelected = Common.Room.CurrentRoom.GetLoveRoom().SceneUIFilePathList.Contains(scene.FileName), Tag = scene }; leftFL.AddChidren(collectionBtn); var sceneNameBtn = new Button() { Width = Application.GetRealWidth(176), Height = Application.GetRealHeight(150), TextColor = ZigbeeColor.Current.GXCTextWhiteColor, Text = scene.Name, Gravity = Gravity.Center, IsMoreLines = true }; leftFL.AddChidren(sceneNameBtn); var collection = new Button { Tag = scene }; leftFL.AddChidren(collection); collection.MouseUpEventHandler += (sender, e) => { if (room.IsLove) { Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene); RemoveViewByTag(collectionBtn.Tag); } else { collectionBtn.IsSelected = !collectionBtn.IsSelected; if (collectionBtn.IsSelected) { Common.Room.CurrentRoom.GetLoveRoom().AddScene(scene); } else { Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene); } } }; delayTimeBtn = new Button { X = Application.GetRealWidth(780), Y = Application.GetRealHeight(317), Width = Application.GetRealWidth(200), Height = Application.GetRealHeight(58), Text = CommonFormResouce.GetTimeString(scene.SceneDelayTime), TextAlignment = TextAlignment.CenterRight, TextColor = ZigbeeColor.Current.GXCTextSelectedColor3 }; sceneRowLayout.AddChidren(delayTimeBtn); delayImgBtn = new Button { X = Application.GetRealWidth(900), Y = Application.GetRealHeight(30), Width = Application.GetMinRealAverage(52), Height = Application.GetMinRealAverage(52), UnSelectedImagePath = "Scene/Delaying.png", Visible=false }; sceneRowLayout.AddChidren(delayImgBtn); //定时 var delayBtn = new RowLayoutDeleteButton { TextID = R.MyInternationalizationString.Delay, Tag = scene.SceneDelayTime, BackgroundColor=ZigbeeColor.Current.GXCTextSelectedColor, }; delayBtn.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight); sceneRowLayout.AddLeftView(delayBtn); //编辑 var settingBtn = new Device.CommonForm.RowLayoutEditButton() { TextID = R.MyInternationalizationString.Editor, Tag = scene.SceneDelayTime }; settingBtn.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerTopLeft); //删除 var deleteBtn = new Device.CommonForm.RowLayoutDeleteButton { Tag = scene }; deleteBtn.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight); if (room.IsSharedRoom) { } else { if (room.IsLove) { sceneRowLayout.AddRightView(deleteBtn); } else { sceneRowLayout.AddRightView(settingBtn); sceneRowLayout.AddRightView(deleteBtn); } } //删除场景 EventHandler delEvent = (sender, e) => { if (room.IsLove) { Shared.Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene); RemoveFromParent(); } else { var alert = new UserCenter.ShowMsgControl(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.ConfirmDelete)); alert.Show(); alert.ConfirmClickEvent += async () => { //0 移除失败 1 移除成功 2 没有该场景 var removeSceneAllData = await ZigBee.Device.Scene.DeleteSceneAsync(scene.Id); if (removeSceneAllData == null || removeSceneAllData.removeSceneData == null) { CommonPage.Instance.FailureToServer(); return; } //1成功 if (removeSceneAllData.removeSceneData.Result == 1) { room.RemoveScene(scene); //RefreshBodyView(); RemoveFromParent(); } //0 移除失败 else if (removeSceneAllData.removeSceneData.Result == 0) { CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.FailedPleaseTryAgain)); return; } //2 没有该场景 else if (removeSceneAllData.removeSceneData.Result == 2) { room.RemoveScene(scene); //RefreshBodyView(); RemoveFromParent(); CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.TheSceneIsNull)); return; } }; } }; deleteBtn.MouseUpEventHandler += delEvent; //编辑场景 settingBtn.MouseUpEventHandler += async (sender, e) => { try { var targetList = new List { }; CommonPage.Loading.Start(); //从网关中反序列化出对应的房间设备 var sceneDeviceList = await ZigBee.Device.Scene.GetSceneDeviceListAsync(scene.Id); if (sceneDeviceList == null) { CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.TheMainGatewayIsNotOnLine)); return; } if (sceneDeviceList.getSceneDeviceListInfo != null) { var deviceList = sceneDeviceList.getSceneDeviceListInfo.DeviceList; var allDevice = Common.Room.AllRoomDeviceUIList; var allScene = Common.Room.AllRoomSceneUIList; if (deviceList != null && allDevice.Count != 0) { foreach (var sceneDev in deviceList) { if (sceneDev.Type == 0) { var dev = allDevice.Find((obj) => obj.DeviceEpoint == sceneDev.Epoint && obj.DeviceAddr == sceneDev.DeviceAddr); if (dev != null) { var sceneTargetDevice = new SceneTargetDeviceUI { Type = 0, DeviceUI = dev, TaskList = sceneDev.TaskList, DelayTimeSerialNumber = deviceList.IndexOf(sceneDev) + 1 }; targetList.Add(sceneTargetDevice); } } else if (sceneDev.Type == 1) { var localScene = allScene.Find((obj) => obj.Id == sceneDev.ElseScenesId); if (localScene != null) { var sceneTargetDeviceScene = new SceneTargetDeviceUI { Type = 1, ElseScenesId = sceneDev.ElseScenesId, SceneName = localScene.Name, SceneUI = localScene, DelayTimeSerialNumber = deviceList.IndexOf(sceneDev) + 1 }; targetList.Add(sceneTargetDeviceScene); } } else { var sceneTargetDeviceScene = new SceneTargetDeviceUI { Type = 2, DelayTime = sceneDev.DelayTime, DelayTimeSerialNumber = deviceList.IndexOf(sceneDev) + 1 }; targetList.Add(sceneTargetDeviceScene); } } } } else { CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.FailedPleaseTryAgain)); } var sceneView = new CategoryAddScene(); Phone.UserView.HomePage.Instance.AddChidren(sceneView); Phone.UserView.HomePage.Instance.PageIndex += 1; sceneView.isModify = true; sceneView.modifyRoom = room; sceneView.modifySceneUI = scene; sceneView.modifySceneTargetDevicesList = targetList; sceneView.Show(); sceneView.EditorAction = (s, r) => { if(r.Id!=room.Id) { RemoveFromParent(); } else { Init(s, r); } }; } catch (Exception ex) { System.Console.WriteLine($"编辑场景出错---{ex.Message}"); } finally { CommonPage.Loading.Hide(); } }; //编辑延时 delayBtn.MouseUpEventHandler += (sender, e) => { if (scene.RemainTime > 0) { CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying)); return; } var timeSelect = new SelectTime(); CommonPage.Instance.AddChidren(timeSelect); timeSelect.TempTime = scene.SceneDelayTime; timeSelect.Init(); timeSelect.TimeAction = (t) => { scene.SceneDelayTime = t; delayTimeBtn.Text = CommonFormResouce.GetTimeString(t); room.ModifySceneDelayTime(scene); }; }; } /// /// InitStatu /// private void InitStatu() { sceneImg.MouseUpEventHandler += SceneUpHandler; } /// /// SceneUpHandler /// /// /// private async void SceneUpHandler(object sender, MouseEventArgs args) { if (scene.RemainTime > 0 && scene.SceneDelayTime == 0) { CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying)); return; } //1成功 0失败 //后面补上相关提示 // Error参数含义 //1:网关无法解析命令数据。 //2:协调器正在升级或备份/恢复数据 //3:操作设备/组/场景不存在 //4:其他错误 //5:数据传输错误(在某次客户端向网关发送数据的过程中,网关在合理时间范围内接收客户端数据不完整导致该错误发生。如客户端向网关一次发送100个字节的数据,但网关等待接收了一秒只接收了80个字节。发生该错误,网关将主动关闭客户端连接) var sceneOpenAllData = await ZigBee.Device.Scene.ControlSceneAsync(scene.Id, scene.SceneDelayTime); if (sceneOpenAllData == null || sceneOpenAllData.sceneOpenData == null) { return; } if (sceneOpenAllData.sceneOpenData.Result == 0) { if (sceneOpenAllData.errorResponData == null) { return; } CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.ControlSceneFail)); } scene.RemainTime = scene.SceneDelayTime; scene.SceneDelayTime = 0; room.ModifySceneDelayTime(scene); new System.Threading.Thread(() => { while (scene.RemainTime > 0) { System.Threading.Thread.Sleep(1000); Application.RunOnMainThread(() => { SetTimeText(CommonFormResouce.GetTimeString(scene.RemainTime)); }); scene.RemainTime -= 1; } Application.RunOnMainThread(() => { SetTimeImage(); }); }) { IsBackground = true }.Start(); } /// /// SetTimeText /// /// public void SetTimeText(string name) { delayImgBtn.Visible = true; delayTimeBtn.Text = name; } /// /// SetTimeImage /// public void SetTimeImage() { delayImgBtn.Visible = false; delayTimeBtn.Text = string.Empty; } } }