黄学彪
2020-12-17 9f326f4000847e6167d8166fa2f6a66f53cb3734
ZigbeeApp/Shared/Phone/Device/CommonForm/SceneCategoryView.cs
@@ -1,30 +1,29 @@
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 : RowLayout
using System;
using System.Collections.Generic;
using Shared.Common;
using Shared.Phone.UserCenter;
namespace Shared.Phone.Device.CommonForm
{
    public class SceneCategoryView : RowLayoutBase
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// scene
        /// </summary>
        public SceneUI scene;
        /// <summary>
        /// room
        /// </summary>
        private Common.Room room;
        /// <summary>
        /// 延时时间
        /// </summary>
        private NormalViewControl btnDelayTime;
        /// <summary>
        /// 延时图标
        /// </summary>
        #region ■ 变量声明___________________________
        /// <summary>
        /// scene
        /// </summary>
        public SceneUI scene;
        /// <summary>
        /// room
        /// </summary>
        private Common.Room room;
        /// <summary>
        /// 延时时间
        /// </summary>
        private NormalViewControl btnDelayTime;
        /// <summary>
        /// 延时图标
        /// </summary>
        private IconViewControl btnDelayIcon;
        /// <summary>
        /// 场景图片控件
@@ -35,19 +34,19 @@
        /// </summary>
        private bool isInitControlFinish = false;
        #endregion
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// SceneCategoryView
        /// </summary>
        public SceneCategoryView()
        {
            this.Width = Application.GetRealWidth(1080);
            this.Height = Application.GetRealHeight(397 + 46);
            this.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
            this.IsUseSameSubViewWidth = false;
        /// <summary>
        /// SceneCategoryView
        /// </summary>
        public SceneCategoryView()
        {
            this.Width = Application.GetRealWidth(1080);
            this.Height = Application.GetRealHeight(397 + 46);
            this.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
            this.IsUseSameSubViewWidth = false;
        }
        /// <summary>
@@ -60,47 +59,49 @@
            this.LineColor = UserCenterColor.Current.Transparent;
            this.scene = i_scene;
            this.scene = i_scene;
            this.room = i_room;
            //自定义的场景图片控件
            //自定义的场景图片控件
            this.sceneContr = new ScenePictrueControl();
            this.AddChidren(sceneContr);
            sceneContr.InitControl(this.scene);
            this.AddChidren(sceneContr);
            sceneContr.InitControl(this.scene);
            //场景点击
            sceneContr.ButtonClickEvent += (sender, e) =>
            {
                this.SceneUpHandler();
            };
            //收藏
            sceneContr.AddCollectionControl();
                //不能反复点击
                sceneContr.CanClick = false;
                this.SceneUpHandler(sceneContr);
            };
            //收藏
            sceneContr.AddCollectionControl();
            sceneContr.CollectEvent += (collect) =>
            {
                if (room.IsLove)
                {
                    this.RemoveFromParent();
                if (room.IsLove)
                {
                    this.RemoveFromParent();
                }
            };
            //延时时间
            this.btnDelayTime = new NormalViewControl(200, 58, true);
            btnDelayTime.X = Application.GetRealWidth(780);
            btnDelayTime.Y = Application.GetRealHeight(317);
            btnDelayTime.Text = CommonFormResouce.GetTimeString(scene.SceneDelayTime);
            };
            //延时时间
            this.btnDelayTime = new NormalViewControl(400, 58, true);
            btnDelayTime.X = Application.GetRealWidth(580);
            btnDelayTime.Y = Application.GetRealHeight(317);
            btnDelayTime.Text = this.GetTimeString(scene.SceneDelayTime);
            btnDelayTime.TextAlignment = TextAlignment.CenterRight;
            btnDelayTime.TextColor = ZigbeeColor.Current.GXCTextSelectedColor3;
            btnDelayTime.IsBold = true;
            this.AddChidren(btnDelayTime);
            //延时图标
            btnDelayTime.TextColor = ZigbeeColor.Current.GXCTextSelectedColor3;
            btnDelayTime.IsBold = true;
            this.AddChidren(btnDelayTime);
            //延时图标
            this.btnDelayIcon = new IconViewControl(52);
            btnDelayIcon.X = Application.GetRealWidth(900);
            btnDelayIcon.Y = Application.GetRealHeight(30);
            btnDelayIcon.Width = Application.GetMinRealAverage(52);
            btnDelayIcon.Height = Application.GetMinRealAverage(52);
            btnDelayIcon.UnSelectedImagePath = "Scene/Delaying.png";
            btnDelayIcon.Y = Application.GetRealHeight(30);
            btnDelayIcon.Width = this.GetPictrueRealSize(52);
            btnDelayIcon.Height = this.GetPictrueRealSize(52);
            btnDelayIcon.UnSelectedImagePath = "Scene/Delaying.png";
            this.AddChidren(btnDelayIcon);
            btnDelayIcon.Visible = false;
@@ -117,14 +118,14 @@
            this.AddLeftView(btnTemp1);
            //定时
            var btnDelay = new NormalViewControl(Application.GetRealWidth(199), sceneContr.btnScenePic.Height, false);
            btnDelay.BackgroundColor = ZigbeeColor.Current.GXCTextSelectedColor;
            btnDelay.TextID = R.MyInternationalizationString.Delay;
            btnDelay.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
            btnDelay.TextAlignment = TextAlignment.Center;
            btnDelay.Tag = scene.SceneDelayTime;
            btnDelay.Radius = (uint)Application.GetRealHeight(17);
            btnDelay.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight |
                HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerBottomRight);
            btnDelay.BackgroundColor = ZigbeeColor.Current.GXCTextSelectedColor;
            btnDelay.TextID = R.MyInternationalizationString.Delay;
            btnDelay.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
            btnDelay.TextAlignment = TextAlignment.Center;
            btnDelay.Tag = scene.SceneDelayTime;
            btnDelay.Radius = (uint)Application.GetRealHeight(17);
            btnDelay.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight |
                HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerBottomRight);
            this.AddLeftView(btnDelay);
            //变更按钮的高度
            btnDelay.Height = sceneContr.btnScenePic.Height;
@@ -132,23 +133,23 @@
            //编辑
            var btnEditor = new NormalViewControl(Application.GetRealWidth(199), sceneContr.btnScenePic.Height, false);
            btnEditor.BackgroundColor = ZigbeeColor.Current.GXCEditBackGroundColor;
            btnEditor.TextID = R.MyInternationalizationString.Edit;
            btnEditor.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
            btnEditor.TextAlignment = TextAlignment.Center;
            btnEditor.BackgroundColor = ZigbeeColor.Current.GXCEditBackGroundColor;
            btnEditor.TextID = R.MyInternationalizationString.Edit;
            btnEditor.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
            btnEditor.TextAlignment = TextAlignment.Center;
            btnEditor.Tag = scene.SceneDelayTime;
            btnEditor.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerTopLeft);
            //删除
            var btnDelete = new NormalViewControl(Application.GetRealWidth(199), sceneContr.btnScenePic.Height, false);
            btnDelete.Tag = scene;
            btnDelete.BackgroundColor = ZigbeeColor.Current.GXCRedColor;
            btnDelete.TextID = R.MyInternationalizationString.Delete;
            btnDelete.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
            btnDelete.TextAlignment = TextAlignment.Center;
            var btnDelete = new NormalViewControl(Application.GetRealWidth(199), sceneContr.btnScenePic.Height, false);
            btnDelete.Tag = scene;
            btnDelete.BackgroundColor = ZigbeeColor.Current.GXCRedColor;
            btnDelete.TextID = R.MyInternationalizationString.Delete;
            btnDelete.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
            btnDelete.TextAlignment = TextAlignment.Center;
            btnDelete.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight);
            if (room.IsSharedRoom == false && room.IsLove == false)
            if (room.IsSharedRoom == false && room.IsLove == false)
            {
                //不是分享,并且不是收藏
                this.AddRightView(btnEditor);
@@ -156,164 +157,182 @@
                //变更按钮的高度
                btnEditor.Height = sceneContr.btnScenePic.Height;
                btnEditor.Y = 0;
                btnDelete.Height = sceneContr.btnScenePic.Height;
                btnDelete.Y = 0;
                //添加右边空白区域
                btnDelete.Height = sceneContr.btnScenePic.Height;
                btnDelete.Y = 0;
                //添加右边空白区域
                var btnTemp2 = new NormalViewControl(Application.GetRealWidth(58), sceneContr.btnScenePic.Height, false);
                this.AddRightView(btnTemp2);
            }
            //删除场景
                this.AddRightView(btnTemp2);
            }
            //删除场景
            btnDelete.ButtonClickEvent += (sender, e) =>
            {
                var alert = new ShowMsgControl(ShowMsgType.Confirm, Language.StringByID(R.MyInternationalizationString.ConfirmDelete));
                alert.Show();
                alert.ConfirmClickEvent += async () =>
                {
                    //如果当前住宅是虚拟住宅
                    if (Common.Config.Instance.Home.IsVirtually == true)
                    {
                        //移除缓存
                        HdlSceneLogic.Current.DeleteLocalScene(scene);
                        RemoveFromParent();
                        return;
                    }
                    //0 移除失败 1 移除成功 2 没有该场景
                    var removeSceneAllData = await ZigBee.Device.Scene.DeleteSceneAsync(scene.Id);
                    if (removeSceneAllData == null || removeSceneAllData.removeSceneData == null)
                    {
                        CommonPage.Instance.FailureToServer();
                        HdlMessageLogic.Current.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.RequestServerFailed));
                        return;
                    }
                    //1成功
                    if (removeSceneAllData.removeSceneData.Result == 1)
                    {
                        HdlSceneLogic.Current.RemoveScene(scene);
                        HdlSceneLogic.Current.DeleteLocalScene(scene);
                        RemoveFromParent();
                    }
                    //0 移除失败
                    else if (removeSceneAllData.removeSceneData.Result == 0)
                    {
                        CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.FailedPleaseTryAgain));
                        HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.FailedPleaseTryAgain));
                        return;
                    }
                    //2 没有该场景
                    else if (removeSceneAllData.removeSceneData.Result == 2)
                    {
                        HdlSceneLogic.Current.RemoveScene(scene);
                        HdlSceneLogic.Current.DeleteLocalScene(scene);
                        RemoveFromParent();
                        return;
                    }
                };
            };
            //编辑场景
            btnEditor.ButtonClickEvent += (sender, e) =>
            {
                //关闭左滑菜单
                this.HideMenu();
                //编辑场景
                var form = new Phone.Category.AddOrEditorSceneForm();
                form.AddForm(i_scene);
                form.SceneChangedEvent = (myScene, roomId) =>
                {
                    if (roomId != room.Id)
                    {
                        //它变更了房间
                        this.RemoveFromParent();
                    }
                    else
                    {
                        this.InitControl(myScene, room);
                    }
                };
            };
            //编辑延时
            btnDelay.ButtonClickEvent += (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) =>
                {
                    //隐藏右划菜单
                    this.HideMenu();
                    scene.SceneDelayTime = t;
                    btnDelayTime.Text = CommonFormResouce.GetTimeString(t);
                };
            };
            //编辑场景
            btnEditor.ButtonClickEvent += (sender, e) =>
            {
                //关闭左滑菜单
                this.HideMenu();
                //编辑场景
                var form = new Phone.Category.AddOrEditorSceneForm();
                form.AddForm(i_scene);
                form.SceneChangedEvent = (myScene, roomId) =>
                {
                    if (roomId != room.Id)
                    {
                        //它变更了房间
                        this.RemoveFromParent();
                    }
                    else
                    {
                        this.InitControl(myScene, room);
                    }
                };
            };
            //编辑延时
            btnDelay.ButtonClickEvent += (sender, e) =>
            {
                if (scene.RemainTime > 0)
                {
                    HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying));
                    return;
                }
                var timeSelect = new SelectTime();
                CommonPage.Instance.AddChidren(timeSelect);
                timeSelect.TempTime = scene.SceneDelayTime;
                timeSelect.Init();
                timeSelect.TimeAction = (t) =>
                {
                    //隐藏右划菜单
                    this.HideMenu();
                    if (t != 0)
                    {
                        scene.SceneDelayTime = t;
                        btnDelayTime.Text = this.GetTimeString(t);
                        //编辑延时时,需要刷新主页
                        UserView.UserPage.Instance.RefreshAllForm = true;
                    }
                };
            };
        }
        #endregion
        #endregion
        /// <summary>
        /// 
        /// </summary>
        /// <param name="btnScenePic"></param>
        /// <param name="btnSceneName"></param>
        private async void SceneUpHandler()
        {
        /// <param name="sceneContr"></param>
        private async void SceneUpHandler(ScenePictrueControl sceneContr)
        {
            if (scene.SceneDelayTime <= 0 && scene.RemainTime <= 0)
            {
                //如果没有延迟的话,直接开启Loading特效
                this.StartLoadingApreal();
            }
            //调用场景
            var result = await HdlSceneLogic.Current.ControlScene(scene);
            if (result == false)
            {
                return;
            }
            scene.RemainTime = scene.SceneDelayTime;
            scene.SceneDelayTime = 0;
            }
            //调用场景
            var result = await HdlSceneLogic.Current.ControlScene(scene);
            if (result == false)
            {
                sceneContr.CanClick = true;
                return;
            }
            scene.RemainTime = scene.SceneDelayTime;
            scene.SceneDelayTime = 0;
            if (scene.RemainTime <= 0)
            {
                sceneContr.CanClick = true;
                return;
            }
            }
            //调用有延时的场景,需要刷新主页
            UserView.UserPage.Instance.RefreshAllForm = true;
            int myRemainTime = scene.RemainTime;
            //开启内部延时时间线程(旨在全部地方的同一场景时间同步)
            HdlSceneLogic.Current.StartDelayTimeThread(scene);
            new System.Threading.Thread(() =>
            {
                while (myRemainTime > 0 && this.Parent != null)
                {
                    System.Threading.Thread.Sleep(1000);
                    Application.RunOnMainThread(() =>
                    {
                        SetTimeText(CommonFormResouce.GetTimeString(scene.RemainTime));
                    });
                    myRemainTime--;
                }
                Application.RunOnMainThread(() =>
                {
            HdlSceneLogic.Current.StartDelayTimeThread(scene);
            new System.Threading.Thread(() =>
            {
                while (myRemainTime > 0 && this.Parent != null)
                {
                    System.Threading.Thread.Sleep(1000);
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        SetTimeText(this.GetTimeString(scene.RemainTime));
                    }, ShowErrorMode.NO);
                    myRemainTime--;
                }
                HdlThreadLogic.Current.RunMain(() =>
                {
                    if (this.Parent != null)
                    {
                        SetTimeImage();
                        //直接开启Loading特效
                        this.StartLoadingApreal();
                    }
                });
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// SetTimeText
        /// </summary>
        /// <param name="name"></param>
        public void SetTimeText(string name)
        {
            btnDelayIcon.Visible = true;
            btnDelayTime.Text = name;
        }
        /// <summary>
        /// SetTimeImage
        /// </summary>
        public void SetTimeImage()
        {
            btnDelayIcon.Visible = false;
            btnDelayTime.Text = string.Empty;
                        sceneContr.CanClick = true;
                    }
                }, ShowErrorMode.NO);
            })
            { IsBackground = true }.Start();
        }
        /// <summary>
        /// SetTimeText
        /// </summary>
        /// <param name="name"></param>
        public void SetTimeText(string name)
        {
            btnDelayIcon.Visible = true;
            btnDelayTime.Text = name;
        }
        /// <summary>
        /// SetTimeImage
        /// </summary>
        public void SetTimeImage()
        {
            btnDelayIcon.Visible = false;
            btnDelayTime.Text = string.Empty;
        }
        /// <summary>
@@ -350,8 +369,51 @@
                frameBack1.RemoveFromParent();
                frameBack2.RemoveFromParent();
            };
        }
        }
        /// <summary>
        /// 获取场景延时字符串
        /// </summary>
        /// <param name="second"></param>
        /// <returns></returns>
        private string GetTimeString(int second)
        {
            if (second == 0)
            {
                return null;
            }
            string timeStr = string.Empty;
            int hour = second / 3600;
            int minu = second % 3600 / 60;
            int sec = second % 60;
            if (hour > 0)
            {
                timeStr += $"{hour}{Language.StringByID(R.MyInternationalizationString.Hour)}";
                if (minu > 0)
                {
                    timeStr += $"{minu}{Language.StringByID(R.MyInternationalizationString.Minute)}";
                }
                if (sec > 0)
                {
                    timeStr += $"{sec}{Language.StringByID(R.MyInternationalizationString.Second)}";
                }
                return timeStr;
            }
            else if (minu > 0)
            {
                timeStr += $"{minu}{Language.StringByID(R.MyInternationalizationString.Minute)}";
                if (sec > 0)
                {
                    timeStr += $"{sec}{Language.StringByID(R.MyInternationalizationString.Second)}";
                }
                return timeStr;
            }
            else
            {
                return $"{sec}{Language.StringByID(R.MyInternationalizationString.Second)}";
            }
        }
        /// <summary>
        /// 自定义控件(需要的它移除事件)
        /// </summary>
@@ -371,6 +433,6 @@
                this.DisponeEvent?.Invoke();
                this.DisponeEvent = null;
            }
        }
    }
}
        }
    }
}