黄学彪
2020-03-06 a5b3c4bae726ef6770d4bfcbf2f4b50a37ed4a15
ZigbeeApp/Shared/Phone/Device/CommonForm/SceneCategoryView.cs
@@ -1,5 +1,9 @@
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
@@ -23,7 +27,7 @@
        /// <summary>
        /// sceneImg
        /// </summary>
        private Button sceneImg;
        private ImageView sceneImg;
        /// <summary>
        /// SceneCategoryView
@@ -35,7 +39,7 @@
            X = Application.GetRealWidth(x);
            Y = Application.GetRealHeight(y);
            Width = Application.GetRealWidth(1080);
            Height = Application.GetRealHeight(446);
            Height = Application.GetRealHeight(397 + 46);
            BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
        }
@@ -56,23 +60,30 @@
        /// </summary>
        private void InitFrame()
        {
            RemoveAll();
            var sceneRowLayout = new RowLayout
            {
                Y = Application.GetRealHeight(46),
                Height = Application.GetRealHeight(446 - 46),
                LineColor = ZigbeeColor.Current.GXCGrayBackgroundColor
                Height = Application.GetRealHeight(440),
                LineColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
                Tag = scene
            };
            AddChidren(sceneRowLayout);
            sceneRowLayout.SubViewWidth = Application.GetRealWidth(199);
            sceneImg = new Button()
            sceneImg = new ImageView()
            {
                X = Application.GetRealWidth(179),
                Width = Application.GetRealWidth(844),
                Height = Application.GetRealHeight(400),
                UnSelectedImagePath = scene.IconPath,
                Height = Application.GetRealHeight(397),
                ImagePath = scene.IconPathType == 0 ? scene.IconPath : System.IO.Path.Combine(Config.Instance.FullPath, scene.IconPath),
                Radius = (uint)Application.GetRealHeight(17)
            };
            sceneRowLayout.AddChidren(sceneImg);
            sceneRowLayout.AddChidren(sceneImg);
            //阴影
            var btnShadow = new PicViewControl(sceneImg.Width + Application.GetRealWidth(14 * 2), sceneImg.Height + Application.GetRealHeight(43), false);
            btnShadow.X = sceneImg.X - Application.GetRealWidth(14);
            btnShadow.UnSelectedImagePath = "Scene/SceneShadow.png";
            sceneRowLayout.AddChidren(btnShadow);
            var leftFL = new FrameLayout
            {
@@ -80,7 +91,7 @@
                Y = Application.GetRealHeight(58),
                Width = Application.GetRealWidth(251),
                Height = Application.GetRealHeight(282),
                BackgroundColor = ZigbeeColor.Current.GXCBlackBackgroundColor2,
                BackgroundColor = 0xd6333333,
                Radius = (uint)Application.GetRealHeight(17)
            };
            sceneRowLayout.AddChidren(leftFL);
@@ -93,7 +104,7 @@
                Height = Application.GetMinRealAverage(65),
                UnSelectedImagePath = "Item/Collection.png",
                SelectedImagePath = "Item/CollectionSelected.png",
                IsSelected = Common.Room.CurrentRoom.GetLoveRoom().SceneUIFilePathList.Contains(scene.FileName),
                IsSelected = HdlRoomLogic.Current.IsCollectInRoom(scene),
                Tag = scene
            };
            leftFL.AddChidren(collectionBtn);
@@ -118,19 +129,19 @@
            {
                if (room.IsLove)
                {
                    Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
                    HdlSceneLogic.Current.DeleteScene(HdlRoomLogic.Current.GetLoveRoom(), scene);
                    RemoveViewByTag(collectionBtn.Tag);
                }
                else
                {
                    collectionBtn.IsSelected = !collectionBtn.IsSelected;
                    if (collectionBtn.IsSelected)
                    {
                        Common.Room.CurrentRoom.GetLoveRoom().AddScene(scene);
                    {
                        HdlSceneLogic.Current.AddScene(HdlRoomLogic.Current.GetLoveRoom(), scene);
                    }
                    else
                    {
                        Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
                        HdlSceneLogic.Current.DeleteScene(HdlRoomLogic.Current.GetLoveRoom(), scene);
                    }
                }
            };
@@ -162,21 +173,26 @@
            var delayBtn = new RowLayoutDeleteButton
            {
                TextID = R.MyInternationalizationString.Delay,
                Tag = scene.SceneDelayTime
                Tag = scene.SceneDelayTime,
                BackgroundColor=ZigbeeColor.Current.GXCTextSelectedColor,
            };
            sceneRowLayout.AddLeftView(delayBtn);
            delayBtn.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight);
            sceneRowLayout.AddLeftView(delayBtn);
            //变更按钮的高度
            delayBtn.Height = sceneImg.Height;
            //编辑
            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)
            {
@@ -185,12 +201,17 @@
            {
                if (room.IsLove)
                {
                    sceneRowLayout.AddRightView(deleteBtn);
                    sceneRowLayout.AddRightView(deleteBtn);
                    //变更按钮的高度
                    deleteBtn.Height = sceneImg.Height;
                }
                else
                {
                    sceneRowLayout.AddRightView(settingBtn);
                    sceneRowLayout.AddRightView(deleteBtn);
                    sceneRowLayout.AddRightView(deleteBtn);
                    //变更按钮的高度
                    settingBtn.Height = sceneImg.Height;
                    deleteBtn.Height = sceneImg.Height;
                }
            }
@@ -199,57 +220,151 @@
            {
                if (room.IsLove)
                {
                    Shared.Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
                    RemoveViewByTag((sender as Button).Tag);
                    HdlSceneLogic.Current.DeleteScene(HdlRoomLogic.Current.GetLoveRoom(), scene);
                    RemoveFromParent();
                }
                else
                {
                    var tip = new CustomAlert { };
                    AddChidren(tip);
                    tip.Show(Language.StringByID(R.MyInternationalizationString.ConfirmDelete));
                    tip.ResultEventHandler += async (e1) =>
                    var alert = new UserCenter.ShowMsgControl(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.ConfirmDelete));
                    alert.Show();
                    alert.ConfirmClickEvent += async () =>
                    {
                        if (e1)
                        //0 移除失败 1 移除成功 2 没有该场景
                        var removeSceneAllData = await ZigBee.Device.Scene.DeleteSceneAsync(scene.Id);
                        if (removeSceneAllData == null || removeSceneAllData.removeSceneData == null)
                        {
                            //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();
                                RemoveViewByTag((sender as Button).Tag);
                            }
                            //0 移除失败
                            else if (removeSceneAllData.removeSceneData.Result == 0)
                            {
                                CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.FailedPleaseTryAgain);
                                return;
                            }
                            //2 没有该场景
                            else if (removeSceneAllData.removeSceneData.Result == 2)
                            {
                                room.RemoveScene(scene);
                                //RefreshBodyView();
                                RemoveViewByTag((sender as Button).Tag);
                                CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.TheSceneIsNull);
                                return;
                            }
                            CommonPage.Instance.FailureToServer();
                            return;
                        }
                        //1成功
                        if (removeSceneAllData.removeSceneData.Result == 1)
                        {
                            HdlSceneLogic.Current.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)
                        {
                            HdlSceneLogic.Current.RemoveScene(scene);
                            //RefreshBodyView();
                            RemoveFromParent();
                            CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.TheSceneIsNull));
                            return;
                        }
                    };
                }
            };
            deleteBtn.MouseUpEventHandler += delEvent;
            //编辑场景
            settingBtn.MouseUpEventHandler += (sender, e) =>
            settingBtn.MouseUpEventHandler += async (sender, e) =>
            {
                SceneUI.EditScene(scene, room);
                try
                {
                    var targetList = new List<SceneTargetDeviceUI> { };
                    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 = HdlRoomLogic.Current.GetAllRoomListDevice();
                        var allScene = HdlSceneLogic.Current.GetAllRoomSceneList();
                        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) =>
@@ -311,7 +426,7 @@
                {
                    return;
                }
                CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.ControlSceneFail);
                CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.ControlSceneFail));
            }
            scene.RemainTime = scene.SceneDelayTime;