using System;
using System.Collections.Generic;
using Shared.Common;
using Shared.Phone.UserCenter;
namespace Shared.Phone.Device.CommonForm
{
public class SceneCategoryView : RowLayoutBase
{
#region ■ 变量声明___________________________
///
/// scene
///
public SceneUI scene;
///
/// room
///
private Common.Room room;
///
/// 延时时间
///
private NormalViewControl btnDelayTime;
///
/// 延时图标
///
private IconViewControl btnDelayIcon;
///
/// 场景图片控件
///
private ScenePictrueControl sceneContr = null;
///
/// 是否已经完成控件初始化结束
///
private bool isInitControlFinish = false;
#endregion
#region ■ 初始化_____________________________
///
/// SceneCategoryView
///
public SceneCategoryView()
{
this.Width = Application.GetRealWidth(1080);
this.Height = Application.GetRealHeight(397 + 46);
this.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
this.IsUseSameSubViewWidth = false;
}
///
/// 初始化
///
///
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(400, 58, true);
btnDelayTime.X = Application.GetRealWidth(580);
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 = this.GetPictrueRealSize(52);
btnDelayIcon.Height = this.GetPictrueRealSize(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 () =>
{
//如果当前住宅是虚拟住宅
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();
return;
}
//1成功
if (removeSceneAllData.removeSceneData.Result == 1)
{
HdlSceneLogic.Current.DeleteLocalScene(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.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);
};
};
}
#endregion
///
///
///
///
///
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();
}
///
/// SetTimeText
///
///
public void SetTimeText(string name)
{
btnDelayIcon.Visible = true;
btnDelayTime.Text = name;
}
///
/// SetTimeImage
///
public void SetTimeImage()
{
btnDelayIcon.Visible = false;
btnDelayTime.Text = string.Empty;
}
///
/// 开启Loading特效
///
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();
};
}
///
/// 自定义控件(需要的它移除事件)
///
private class MyProgressLoading : ProgressLoading
{
///
/// 控件销毁的事件
///
public Action DisponeEvent = null;
///
/// 控件销毁
///
public override void RemoveFromParent()
{
base.RemoveFromParent();
this.DisponeEvent?.Invoke();
this.DisponeEvent = null;
}
}
}
}