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
|
{
|
/// <summary>
|
/// scene
|
/// </summary>
|
public SceneUI scene;
|
/// <summary>
|
/// room
|
/// </summary>
|
public Shared.Common.Room room;
|
/// <summary>
|
/// delayTimeBtn
|
/// </summary>
|
private Button delayTimeBtn;
|
/// <summary>
|
/// delayImgBtn
|
/// </summary>
|
private Button delayImgBtn;
|
/// <summary>
|
/// sceneImg
|
/// </summary>
|
private ImageView sceneImg;
|
|
/// <summary>
|
/// SceneCategoryView
|
/// </summary>
|
/// <param name="x"></param>
|
/// <param name="y"></param>
|
public SceneCategoryView(int x, int y)
|
{
|
X = Application.GetRealWidth(x);
|
Y = Application.GetRealHeight(y);
|
Width = Application.GetRealWidth(1080);
|
Height = Application.GetRealHeight(446);
|
BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
|
}
|
|
/// <summary>
|
/// init
|
/// </summary>
|
public void Init(SceneUI sceneUI,Common.Room curRoom)
|
{
|
this.scene = sceneUI;
|
this.room = curRoom;
|
|
InitFrame();
|
InitStatu();
|
}
|
|
/// <summary>
|
/// InitFrame
|
/// </summary>
|
private void InitFrame()
|
{
|
RemoveAll();
|
var sceneRowLayout = new RowLayout
|
{
|
Y = Application.GetRealHeight(46),
|
Height = Application.GetRealHeight(446 - 46),
|
LineColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
|
Tag= scene
|
};
|
AddChidren(sceneRowLayout);
|
sceneRowLayout.SubViewWidth = Application.GetRealWidth(199);
|
|
sceneImg = new ImageView()
|
{
|
X = Application.GetRealWidth(179),
|
Width = Application.GetRealWidth(844),
|
Height = Application.GetRealHeight(400),
|
ImagePath = scene.IconPathType == 0 ? scene.IconPath : System.IO.Path.Combine(Config.Instance.FullPath, scene.IconPath),
|
Radius = (uint)Application.GetRealHeight(17)
|
};
|
sceneRowLayout.AddChidren(sceneImg);
|
//sceneImg.SetViewShadow(true);
|
|
var leftFL = new FrameLayout
|
{
|
X = Application.GetRealWidth(CommonFormResouce.X_Left),
|
Y = Application.GetRealHeight(58),
|
Width = Application.GetRealWidth(251),
|
Height = Application.GetRealHeight(282),
|
BackgroundColor = ZigbeeColor.Current.GXCBlackBackgroundColor2,
|
Radius = (uint)Application.GetRealHeight(17)
|
};
|
sceneRowLayout.AddChidren(leftFL);
|
|
var collectionBtn = new Button
|
{
|
X = Application.GetRealWidth(23),
|
Y = Application.GetRealHeight(23),
|
Width = Application.GetMinRealAverage(65),
|
Height = Application.GetMinRealAverage(65),
|
UnSelectedImagePath = "Item/Collection.png",
|
SelectedImagePath = "Item/CollectionSelected.png",
|
IsSelected = Common.Room.CurrentRoom.GetLoveRoom().SceneUIFilePathList.Contains(scene.FileName),
|
Tag = scene
|
};
|
leftFL.AddChidren(collectionBtn);
|
|
var sceneNameBtn = new Button()
|
{
|
Width = Application.GetRealWidth(176),
|
Height = Application.GetRealHeight(150),
|
TextColor = ZigbeeColor.Current.GXCTextWhiteColor,
|
Text = scene.Name,
|
Gravity = Gravity.Center,
|
IsMoreLines = true
|
};
|
leftFL.AddChidren(sceneNameBtn);
|
|
var collection = new Button
|
{
|
Tag = scene
|
};
|
leftFL.AddChidren(collection);
|
collection.MouseUpEventHandler += (sender, e) =>
|
{
|
if (room.IsLove)
|
{
|
Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
|
RemoveViewByTag(collectionBtn.Tag);
|
}
|
else
|
{
|
collectionBtn.IsSelected = !collectionBtn.IsSelected;
|
if (collectionBtn.IsSelected)
|
{
|
Common.Room.CurrentRoom.GetLoveRoom().AddScene(scene);
|
}
|
else
|
{
|
Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
|
}
|
}
|
};
|
|
delayTimeBtn = new Button
|
{
|
X = Application.GetRealWidth(780),
|
Y = Application.GetRealHeight(317),
|
Width = Application.GetRealWidth(200),
|
Height = Application.GetRealHeight(58),
|
Text = CommonFormResouce.GetTimeString(scene.SceneDelayTime),
|
TextAlignment = TextAlignment.CenterRight,
|
TextColor = ZigbeeColor.Current.GXCTextSelectedColor3
|
};
|
sceneRowLayout.AddChidren(delayTimeBtn);
|
|
delayImgBtn = new Button
|
{
|
X = Application.GetRealWidth(900),
|
Y = Application.GetRealHeight(30),
|
Width = Application.GetMinRealAverage(52),
|
Height = Application.GetMinRealAverage(52),
|
UnSelectedImagePath = "Scene/Delaying.png",
|
Visible=false
|
};
|
sceneRowLayout.AddChidren(delayImgBtn);
|
|
//定时
|
var delayBtn = new RowLayoutDeleteButton
|
{
|
TextID = R.MyInternationalizationString.Delay,
|
Tag = scene.SceneDelayTime,
|
BackgroundColor=ZigbeeColor.Current.GXCTextSelectedColor,
|
};
|
delayBtn.SetCornerWithSameRadius(Application.GetRealHeight(17), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerTopLeft | HDLUtils.RectCornerTopRight | HDLUtils.RectCornerBottomRight);
|
sceneRowLayout.AddLeftView(delayBtn);
|
//编辑
|
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)
|
{
|
|
}
|
else
|
{
|
if (room.IsLove)
|
{
|
sceneRowLayout.AddRightView(deleteBtn);
|
}
|
else
|
{
|
sceneRowLayout.AddRightView(settingBtn);
|
sceneRowLayout.AddRightView(deleteBtn);
|
|
}
|
}
|
|
//删除场景
|
EventHandler<MouseEventArgs> delEvent = (sender, e) =>
|
{
|
if (room.IsLove)
|
{
|
Shared.Common.Room.CurrentRoom.GetLoveRoom().DeleteScene(scene);
|
RemoveFromParent();
|
}
|
else
|
{
|
var alert = new UserCenter.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)
|
{
|
room.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)
|
{
|
room.RemoveScene(scene);
|
//RefreshBodyView();
|
RemoveFromParent();
|
CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.TheSceneIsNull));
|
return;
|
}
|
};
|
}
|
};
|
deleteBtn.MouseUpEventHandler += delEvent;
|
//编辑场景
|
settingBtn.MouseUpEventHandler += async (sender, e) =>
|
{
|
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 = Common.Room.AllRoomDeviceUIList;
|
var allScene = Common.Room.AllRoomSceneUIList;
|
|
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) =>
|
{
|
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) =>
|
{
|
scene.SceneDelayTime = t;
|
delayTimeBtn.Text = CommonFormResouce.GetTimeString(t);
|
|
room.ModifySceneDelayTime(scene);
|
};
|
};
|
}
|
|
/// <summary>
|
/// InitStatu
|
/// </summary>
|
private void InitStatu()
|
{
|
sceneImg.MouseUpEventHandler += SceneUpHandler;
|
}
|
|
/// <summary>
|
/// SceneUpHandler
|
/// </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;
|
}
|
CommonFormResouce.ShowTip(Language.StringByID(R.MyInternationalizationString.ControlSceneFail));
|
}
|
|
scene.RemainTime = scene.SceneDelayTime;
|
scene.SceneDelayTime = 0;
|
room.ModifySceneDelayTime(scene);
|
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>
|
/// SetTimeText
|
/// </summary>
|
/// <param name="name"></param>
|
public void SetTimeText(string name)
|
{
|
delayImgBtn.Visible = true;
|
delayTimeBtn.Text = name;
|
}
|
|
/// <summary>
|
/// SetTimeImage
|
/// </summary>
|
public void SetTimeImage()
|
{
|
delayImgBtn.Visible = false;
|
delayTimeBtn.Text = string.Empty;
|
}
|
}
|
}
|