gxc
2019-11-28 427d1c7ecd04b03419eae157e32fe3367d8dffea
ZigbeeApp/Shared/Phone/Device/CommonForm/SceneMainView.cs
@@ -26,9 +26,17 @@
        /// </summary>
        private Button CardBG;
        /// <summary>
        /// sceneBG
        /// </summary>
        public Button sceneBG;
        /// <summary>
        /// v_Selected
        /// </summary>
        private bool v_Selected;
        /// <summary>
        /// scene
        /// </summary>
        public SceneUI scene;
        /// <summary>
        /// IsSelected
@@ -61,9 +69,20 @@
        /// <summary>
        /// init
        /// </summary>
        public void Init()
        public void Init(SceneUI sceneUI)
        {
            this.scene = sceneUI;
            InitFrame();
            InitStatu();
        }
        /// <summary>
        /// InitFrame
        /// </summary>
        private void InitFrame()
        {
            CardBG = new Button
            {
                Width = Application.GetMinRealAverage(487),
@@ -82,7 +101,7 @@
            };
            AddChidren(SceneIcon);
            var sceneBG = new Button
            sceneBG = new Button
            {
                Width = Application.GetMinRealAverage(487),
                Height = Application.GetMinRealAverage(348),
@@ -99,7 +118,6 @@
                Height = Application.GetMinRealAverage(63),
                TextColor = ZigbeeColor.Current.GXCTextSelectedColor3,
                TextAlignment = TextAlignment.CenterLeft,
                Text="58s"
            };
            AddChidren(TimeButton);
@@ -123,12 +141,26 @@
                TextColor = ZigbeeColor.Current.GXCTextBlackColor,
                SelectedTextColor = ZigbeeColor.Current.GXCTextSelectedColor,
                TextAlignment = TextAlignment.CenterLeft,
                Text="起床"
            };
            AddChidren(SceneNameButton);
        }
        /// <summary>
        /// InitStatu
        /// </summary>
        private void InitStatu()
        {
            SetIimeByDelayTime(scene.SceneDelayTime);
            SetSceneNameText(scene.Name);
            SetIcon(scene.IconPath);
            SetCollect(Common.Room.CurrentRoom.GetLoveRoom().SceneUIFilePathList.Contains(scene.FileName));
            TimeButton.MouseUpEventHandler += SetTimeEvents;
            CollectButton.MouseUpEventHandler += CollectionEvent;
            SceneIcon.MouseUpEventHandler += SceneUpHandler;
            sceneBG.MouseUpEventHandler += SceneUpHandler;
            SceneNameButton.MouseUpEventHandler += SceneUpHandler;
        }
        /// <summary>
        /// SetTimeText
@@ -151,6 +183,22 @@
            TimeButton.Height = Application.GetMinRealAverage(63);
            TimeButton.UnSelectedImagePath = "Item/Time.png";
            TimeButton.Text = string.Empty;
        }
        /// <summary>
        /// SetIimeByDelayTime
        /// </summary>
        /// <param name="time"></param>
        public void SetIimeByDelayTime(int time)
        {
            if (time > 0)
            {
                SetTimeText(CommonFormResouce.GetTimeString(time));
            }
            else
            {
                SetTimeImage();
            }
        }
        /// <summary>
@@ -179,5 +227,104 @@
        {
            CollectButton.IsSelected = collect;
        }
        /// <summary>
        /// 调用场景
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        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参数含义
            //<para>1:网关无法解析命令数据。</para>
            //<para>2:协调器正在升级或备份/恢复数据
            //<para>3:操作设备/组/场景不存在</para>
            //<para>4:其他错误</para>
            //<para>5:数据传输错误(在某次客户端向网关发送数据的过程中,网关在合理时间范围内接收客户端数据不完整导致该错误发生。如客户端向网关一次发送100个字节的数据,但网关等待接收了一秒只接收了80个字节。发生该错误,网关将主动关闭客户端连接)</para>
            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;
                }
                CommonPage.Instance.ShowErrorInfoAlert(R.MyInternationalizationString.ControlSceneFail);
            }
            scene.RemainTime = scene.SceneDelayTime;
            scene.SceneDelayTime = 0;
            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();
        }
        /// <summary>
        /// 收藏
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="mouseEventArgs"></param>
        private void  CollectionEvent(object sender,MouseEventArgs mouseEventArgs)
        {
            (sender as Button).IsSelected = !(sender as Button).IsSelected;
            if ((sender as Button).IsSelected)
            {
                Shared.Common.Room.CurrentRoom.GetLoveRoom().AddScene(scene);
            }
            else
            {
                Shared.Common.Room.CurrentRoom.GetLoveRoom().RemoveScene(scene);
            }
            scene.Save();
        }
        /// <summary>
        /// setTimeEvent
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="mouseEventArgs"></param>
        private void SetTimeEvents(object sender, MouseEventArgs mouseEventArgs)
        {
            if (scene.RemainTime > 0)
            {
                CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying));
                return;
            }
            var timeSelect = new SelectTime();
            CommonPage.Instance.AddChidren(timeSelect);
            timeSelect.TempTime = scene.DelayTime;
            timeSelect.Init();
            timeSelect.TimeAction = (t) =>
            {
                scene.SceneDelayTime = t;
                SetIimeByDelayTime(t);
            };
        }
    }
}