New file |
| | |
| | | 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 |
| | | {
|
| | | #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>
|
| | | /// 场景图片控件
|
| | | /// </summary>
|
| | | private ScenePictrueControl sceneContr = null;
|
| | | /// <summary>
|
| | | /// 是否已经完成控件初始化结束
|
| | | /// </summary>
|
| | | private bool isInitControlFinish = false;
|
| | |
|
| | | #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>
|
| | | /// 初始化
|
| | | /// </summary>
|
| | | /// <param name="i_scene"></param>
|
| | | public void InitControl(SceneUI i_scene, Common.Room i_room)
|
| | | {
|
| | | this.RemoveAll();
|
| | |
|
| | | this.LineColor = UserCenterColor.Current.Transparent;
|
| | |
|
| | | this.scene = i_scene; |
| | | this.room = i_room;
|
| | |
|
| | | //自定义的场景图片控件 |
| | | this.sceneContr = new ScenePictrueControl();
|
| | | this.AddChidren(sceneContr); |
| | | sceneContr.InitControl(this.scene); |
| | |
|
| | | //场景点击
|
| | | sceneContr.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | this.SceneUpHandler();
|
| | | }; |
| | | |
| | | //收藏 |
| | | sceneContr.AddCollectionControl(); |
| | | sceneContr.CollectEvent += (collect) =>
|
| | | {
|
| | | 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); |
| | | btnDelayTime.TextAlignment = TextAlignment.CenterRight;
|
| | | 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"; |
| | | this.AddChidren(btnDelayIcon);
|
| | | btnDelayIcon.Visible = false;
|
| | |
|
| | | if (isInitControlFinish == true)
|
| | | {
|
| | | //编辑场景的回调函数会重新刷新控件
|
| | | //所以这里不再初始化
|
| | | return;
|
| | | }
|
| | | this.isInitControlFinish = true;
|
| | |
|
| | | //添加左边的空白区域
|
| | | var btnTemp1 = new NormalViewControl(Application.GetRealWidth(58), sceneContr.btnScenePic.Height, false);
|
| | | 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); |
| | | this.AddLeftView(btnDelay);
|
| | | //变更按钮的高度
|
| | | btnDelay.Height = sceneContr.btnScenePic.Height;
|
| | | btnDelay.Y = 0;
|
| | |
|
| | | //编辑
|
| | | 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.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; |
| | | btnDelete.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight);
|
| | |
|
| | | if (room.IsSharedRoom == false && room.IsLove == false) |
| | | {
|
| | | //不是分享,并且不是收藏
|
| | | this.AddRightView(btnEditor);
|
| | | this.AddRightView(btnDelete);
|
| | | //变更按钮的高度
|
| | | btnEditor.Height = sceneContr.btnScenePic.Height;
|
| | | btnEditor.Y = 0;
|
| | | btnDelete.Height = sceneContr.btnScenePic.Height; |
| | | btnDelete.Y = 0; |
| | | //添加右边空白区域 |
| | | var btnTemp2 = new NormalViewControl(Application.GetRealWidth(58), sceneContr.btnScenePic.Height, false);
|
| | | this.AddRightView(btnTemp2); |
| | | } |
| | | |
| | | //删除场景 |
| | | btnDelete.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | var alert = new 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)
|
| | | {
|
| | | HdlSceneLogic.Current.RemoveScene(scene);
|
| | | 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);
|
| | | 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); |
| | | }; |
| | | };
|
| | | }
|
| | |
|
| | | #endregion |
| | | |
| | | /// <summary>
|
| | | /// |
| | | /// </summary>
|
| | | /// <param name="btnScenePic"></param>
|
| | | /// <param name="btnSceneName"></param> |
| | | private async void SceneUpHandler() |
| | | { |
| | | 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; |
| | | if (scene.RemainTime <= 0)
|
| | | {
|
| | | return;
|
| | | } |
| | | 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(() => |
| | | { |
| | | 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; |
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 开启Loading特效
|
| | | /// </summary>
|
| | | public void StartLoadingApreal()
|
| | | {
|
| | | //弄个遮罩遮住
|
| | | var frameBack1 = new FrameLayout();
|
| | | frameBack1.Y = sceneContr.btnScenePic.Y;
|
| | | frameBack1.X = sceneContr.btnScenePic.X;
|
| | | frameBack1.Width = sceneContr.btnScenePic.Width;
|
| | | frameBack1.Height = sceneContr.btnScenePic.Height;
|
| | | frameBack1.Radius = (uint)Application.GetRealHeight(17);
|
| | | frameBack1.BackgroundColor = 0xb3000000;
|
| | | this.AddChidren(frameBack1);
|
| | |
|
| | | var frameBack2 = new FrameLayout();
|
| | | frameBack2.Y = sceneContr.btnSceneName.Y;
|
| | | frameBack2.X = sceneContr.btnSceneName.X;
|
| | | frameBack2.Width = sceneContr.btnSceneName.Width;
|
| | | frameBack2.Height = sceneContr.btnSceneName.Height;
|
| | | frameBack2.Radius = (uint)Application.GetRealHeight(17);
|
| | | frameBack2.BackgroundColor = 0xb3000000;
|
| | | this.AddChidren(frameBack2);
|
| | |
|
| | | //再加个转圈的
|
| | | var loadContr = new MyProgressLoading();
|
| | | loadContr.LoadingBackgroundColor = UserCenterColor.Current.Transparent;
|
| | | frameBack1.AddChidren(loadContr);
|
| | | loadContr.StartLoading(1000);
|
| | | loadContr.DisponeEvent += () =>
|
| | | {
|
| | | frameBack1.RemoveFromParent();
|
| | | frameBack2.RemoveFromParent();
|
| | | };
|
| | | } |
| | | |
| | | /// <summary>
|
| | | /// 自定义控件(需要的它移除事件)
|
| | | /// </summary>
|
| | | private class MyProgressLoading : ProgressLoading
|
| | | {
|
| | | /// <summary>
|
| | | /// 控件销毁的事件
|
| | | /// </summary>
|
| | | public Action DisponeEvent = null;
|
| | | /// <summary>
|
| | | /// 控件销毁
|
| | | /// </summary>
|
| | | public override void RemoveFromParent()
|
| | | {
|
| | | base.RemoveFromParent();
|
| | |
|
| | | this.DisponeEvent?.Invoke();
|
| | | this.DisponeEvent = null;
|
| | | }
|
| | | } |
| | | } |
| | | } |