using System;
|
using System.Collections.Generic;
|
using Shared.Common;
|
using ZigBee.Device;
|
using static ZigBee.Device.BindObj;
|
using static ZigBee.Device.Panel;
|
|
namespace Shared.Phone.UserCenter.Bind
|
{
|
public class AddBindTargetsPage : UserCenterCommonForm, ZigBee.Common.IStatus
|
{
|
public void Changed(CommonDevice common)
|
{
|
}
|
|
/// <summary>
|
/// 列表控件
|
/// </summary>
|
private VerticalScrolViewLayout midVerticalScrolViewLayout;
|
/// <summary>
|
/// 按键配置的目标列表
|
/// </summary>
|
List<CommonDevice> targetList = new List<CommonDevice>();
|
public static Action<List<BindListResponseObj>> action;
|
public System.Collections.Generic.List<CommonDevice> allDeviceList = new System.Collections.Generic.List<CommonDevice>();
|
public System.Collections.Generic.List<SceneUI> allScList = new System.Collections.Generic.List<SceneUI> { };
|
Action<bool> action1;
|
bool isChoose = false;
|
public override void RemoveFromParent()
|
{
|
base.RemoveFromParent();
|
}
|
|
/// <summary>
|
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
/// </summary>
|
public void Show(Panel key, int currentClusterID, bool isDevice)
|
{
|
#region topFrameLayout (只有UI,无数据处理)
|
var topFrameLayout = new FrameLayout()
|
{
|
Height = Application.GetRealHeight(220),
|
BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor,
|
};
|
this.AddChidren(topFrameLayout);
|
|
var titleFrameLayout = new FrameLayout()
|
{
|
Y = Application.GetRealHeight(80),
|
Height = Application.GetRealHeight(140),
|
BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCTopViewBackgroundColor,
|
};
|
topFrameLayout.AddChidren(titleFrameLayout);
|
|
var title = new Button()
|
{
|
TextAlignment = TextAlignment.Center,
|
TextID = R.MyInternationalizationString.uAddDevice,
|
TextColor = Shared.Common.ZigbeeColor.Current.GXCTextBlackColor,
|
Width = Application.GetRealWidth(1080 - 500),
|
Gravity = Gravity.CenterHorizontal,
|
};
|
titleFrameLayout.AddChidren(title);
|
if (isDevice)
|
{
|
title.TextID = R.MyInternationalizationString.BindDevice;
|
}
|
else
|
{
|
title.TextID = R.MyInternationalizationString.BindScene;
|
|
}
|
var back = new Button()
|
{
|
X = Application.GetRealWidth(50),
|
Height = Application.GetRealHeight(100),
|
Width = Application.GetRealWidth(100),
|
UnSelectedImagePath = "Item/Back.png",
|
SelectedImagePath = "Item/BackOn.png",
|
Gravity = Gravity.CenterVertical,
|
};
|
titleFrameLayout.AddChidren(back);
|
back.MouseUpEventHandler += (sender, e) =>
|
{
|
this.RemoveFromParent();
|
};
|
#endregion
|
|
#region addBindDevice FrameLayout (只有UI,无数据处理)
|
var midFrameLayout = new FrameLayout()
|
{
|
Width = LayoutParams.MatchParent,
|
Height = Application.GetRealHeight(1920 - 220),
|
Y = topFrameLayout.Bottom,
|
BackgroundColor = Shared.Common.ZigbeeColor.Current.GXCBackgroundColor,
|
};
|
this.AddChidren(midFrameLayout);
|
|
var btnFinifh = new Button()
|
{
|
Width = Application.GetRealWidth(720),
|
Height = Application.GetRealHeight(120),
|
Y = Application.GetRealHeight(1920 - 220 - 270),
|
Gravity = Gravity.CenterHorizontal,
|
Radius = (uint)Application.GetRealHeight(120) / 2,
|
TextID = R.MyInternationalizationString.uFinish,
|
BackgroundColor = UserCenterColor.Current.ClickButtonColor,
|
};
|
|
btnFinifh.MouseUpEventHandler += async (sender, e) =>
|
{
|
var addBindeDev = new AddBindData();
|
addBindeDev.DeviceAddr = key.DeviceAddr;
|
addBindeDev.Epoint = key.DeviceEpoint;
|
|
if (!isDevice)
|
{
|
if (!isChoose)
|
{
|
targetList.Clear();
|
}
|
}
|
foreach (var de in targetList)
|
{
|
if (de.DeviceAddr != null)
|
{
|
var addBindInfo = new AddBindListObj();
|
addBindInfo.BindType = 0;
|
addBindInfo.BindCluster = currentClusterID;
|
addBindInfo.BindMacAddr = de.DeviceAddr;
|
addBindInfo.BindEpoint = de.DeviceEpoint;
|
addBindeDev.BindList.Add(addBindInfo);
|
}
|
else
|
{
|
|
var addBindInfo = new AddBindListObj();
|
addBindInfo.BindType = 1;
|
addBindInfo.BindCluster = currentClusterID;
|
var sc1 = (SceneUI)de;
|
addBindInfo.BindScenesId = sc1.ScenesId;
|
addBindeDev.BindList.Add(addBindInfo);
|
}
|
}
|
bool isFinish = false;
|
try
|
{
|
CommonPage.Loading.Start("");
|
var dev = new AddedDeviceBindResponseAllData();
|
dev = await key.AddDeviceBindAsync(addBindeDev);
|
foreach (var ab in dev.addedDeviceBindResponseData?.BindList)
|
{
|
switch (ab.Result)
|
{
|
case 0:
|
PanelBindPage.bindList.Add((BindListResponseObj)ab);
|
|
for (int i = 0; i < targetList.Count; i++)
|
{
|
var de = targetList[i];
|
var sc1 = new SceneUI();
|
if (de.DeviceAddr == null)
|
{
|
sc1 = (SceneUI)de;
|
|
if (sc1.ScenesId == ab.BindScenesId)
|
{
|
targetList.RemoveAt(i);
|
i--;
|
}
|
}
|
}
|
isFinish = true;
|
break;
|
case 1:
|
new Tip()
|
{
|
MaxWidth = 150,
|
Text = Language.StringByID(R.MyInternationalizationString.BindErrorAbsence),
|
Direction = AMPopTipDirection.Up,
|
CloseTime = 1
|
}.Show(btnFinifh);
|
break;
|
case 2:
|
switch (dev.addBindResultResponseData?.Result)
|
{
|
case 0:
|
PanelBindPage.bindList.Add((BindListResponseObj)ab);
|
for (int i = 0; i < targetList.Count; i++)
|
{
|
var de = targetList[i];
|
if (de.DeviceAddr == ab.BindMacAddr && de.DeviceEpoint == ab.BindEpoint)
|
{
|
targetList.RemoveAt(i);
|
i--;
|
}
|
}
|
isFinish = true;
|
break;
|
case 140:
|
new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFull), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh);
|
break;
|
default:
|
new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh);
|
break;
|
}
|
break;
|
case 3:
|
new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindErrorExisted), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh);
|
break;
|
case 4:
|
new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnFinifh);
|
break;
|
default:
|
break;
|
}
|
}
|
}
|
catch { }
|
finally
|
{
|
if (isFinish)
|
{
|
if (action != null)
|
{
|
action(PanelBindPage.bindList);
|
}
|
this.RemoveFromParent();
|
}
|
else
|
{
|
this.RemoveFromParent();
|
}
|
CommonPage.Loading.Hide();
|
}
|
};
|
midFrameLayout.AddChidren(btnFinifh);
|
|
midVerticalScrolViewLayout = new VerticalScrolViewLayout()
|
{
|
Height = btnFinifh.Y - Application.GetRealHeight(120),
|
};
|
midFrameLayout.AddChidren(midVerticalScrolViewLayout);
|
|
SetMiddleFrameInfo(key, currentClusterID, isDevice);
|
#endregion
|
}
|
|
/// <summary>
|
/// 设置中部信息
|
/// </summary>
|
private void SetMiddleFrameInfo(Panel key, int currentClusterID, bool isDevice)
|
{
|
midVerticalScrolViewLayout.RemoveAll();
|
if (isDevice)
|
{
|
|
foreach (CommonDevice device in PanelBindPage.list)
|
{
|
foreach (var clu in device.DeviceInfo?.InClusterList)
|
{
|
if (clu.InCluster == currentClusterID)
|
{
|
//本地设备掉线,不显示
|
if (device.DeviceInfo.IsOnline == 0)
|
{
|
Console.WriteLine("length loss");
|
continue;
|
}
|
|
var rowLayout = new RowLayout()
|
{
|
Height = Application.GetRealHeight(170),
|
};
|
midVerticalScrolViewLayout.AddChidren(rowLayout);
|
|
var devicePic = new Button()
|
{
|
X = Application.GetRealWidth(50),
|
Width = Application.GetMinRealAverage(110),
|
Height = Application.GetMinRealAverage(110),
|
Gravity = Gravity.CenterVertical,
|
BackgroundColor = ZigbeeColor.Current.DialogTitleColor,
|
};
|
rowLayout.AddChidren(devicePic);
|
|
var btnBindName = new Button()
|
{
|
Width = Application.GetRealWidth(500 - 120),
|
X = devicePic.Right + Application.GetRealWidth(20),
|
TextColor = Shared.Common.ZigbeeColor.Current.TextBlack,
|
TextAlignment = TextAlignment.CenterLeft,
|
};
|
rowLayout.AddChidren(btnBindName);
|
|
var btnSelect = new Button()
|
{
|
Width = Application.GetMinRealAverage(110),
|
Height = Application.GetMinRealAverage(110),
|
X = Application.CurrentWidth - Application.GetRealWidth(150),
|
TextColor = Shared.Common.ZigbeeColor.Current.TextBlack,
|
TextAlignment = TextAlignment.CenterLeft,
|
//UnSelectedImagePath = "Item/Tick.png",
|
SelectedImagePath = "Item/TickSelected.png",
|
Gravity = Gravity.CenterVertical,
|
};
|
rowLayout.AddChidren(btnSelect);
|
|
if (device.DeviceInfo.DeviceName == "")
|
{
|
btnBindName.Text = device.DeviceAddr + device.DeviceEpoint;
|
}
|
else
|
{
|
btnBindName.Text = device.DeviceInfo.DeviceName;
|
}
|
|
//被绑定设备图片
|
//灯光
|
if (device.Type == DeviceType.ColorDimmableLight)
|
{
|
//图标
|
devicePic.SelectedImagePath = "Device/LightSelected.png";
|
devicePic.UnSelectedImagePath = "Device/Light.png";
|
}
|
//开关设备(这个东西也是个“灯光”)
|
else if (device.Type == DeviceType.OnOffOutput)
|
{
|
//图标
|
devicePic.SelectedImagePath = "Device/LightSelected.png";
|
devicePic.UnSelectedImagePath = "Device/Light.png";
|
}
|
//窗帘
|
else if (device.Type == DeviceType.WindowCoveringDevice)
|
{
|
//图标
|
devicePic.SelectedImagePath = "Device/WindowCoveringDeviceSelected.png";
|
devicePic.UnSelectedImagePath = "Device/WindowCoveringDevice.png";
|
}
|
//控制面板
|
else if (device.Type == DeviceType.OnOffSwitch)
|
{
|
//图标
|
devicePic.SelectedImagePath = "Device/ButtonControlSelected.png";
|
devicePic.UnSelectedImagePath = "Device/ButtonControl.png";
|
}
|
|
foreach (var bindedDev in PanelBindPage.bindList)
|
{
|
if (device.DeviceAddr == bindedDev.BindMacAddr && device.DeviceEpoint == bindedDev.BindEpoint)
|
{
|
devicePic.IsSelected = true;
|
btnBindName.TextColor = ZigbeeColor.Current.SelectedTextColor;
|
btnSelect.IsSelected = true;
|
}
|
}
|
|
if (devicePic.IsSelected == true)
|
{
|
if (targetList != null)
|
{
|
targetList.Remove(device);
|
}
|
}
|
|
bool IsTip = false;
|
EventHandler<MouseEventArgs> hander = (sender1, e1) =>
|
{
|
//绑定只能选中,不能取消;因为这里考虑到按键已经存在的绑定设备,删除可能会存在删除慢或这删除失败的问题,
|
//如果是新增的绑定,在临时表中取消有很快
|
if (PanelBindPage.bindList.Count != 0)
|
{
|
if (IsTip)
|
{
|
return;
|
}
|
IsTip = true;
|
|
if (devicePic.IsSelected)
|
{
|
new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindExist), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnBindName);
|
return;
|
}
|
}
|
|
if (!devicePic.IsSelected)
|
{
|
devicePic.IsSelected = true;
|
btnSelect.IsSelected = true;
|
btnBindName.TextColor = ZigbeeColor.Current.SelectedTextColor;
|
targetList.Add(device);
|
}
|
//else{
|
// devicePic.IsSelected = false;
|
// btnSelect.IsSelected = false;
|
// btnBindName.TextColor = ZigbeeColor.Current.TextBlack;
|
// targetList.Remove(device);
|
//}
|
};
|
rowLayout.MouseUpEventHandler += hander;
|
devicePic.MouseUpEventHandler += hander;
|
btnBindName.MouseUpEventHandler += hander;
|
btnSelect.MouseUpEventHandler += hander;
|
}
|
}
|
}
|
|
|
}
|
else
|
{
|
int index = 0;
|
foreach (var scene in PanelBindPage.scList)
|
{
|
var rowLayout = new RowLayout()
|
{
|
Height = Application.GetRealHeight(170),
|
};
|
midVerticalScrolViewLayout.AddChidren(rowLayout);
|
|
var devicePic = new Button()
|
{
|
X = Application.GetRealWidth(50),
|
Width = Application.GetMinRealAverage(110),
|
Height = Application.GetMinRealAverage(110),
|
Gravity = Gravity.CenterVertical,
|
UnSelectedImagePath = "Item/Scene.png",
|
SelectedImagePath = "Item/SceneSelected.png",
|
Tag = index,
|
};
|
rowLayout.AddChidren(devicePic);
|
|
var btnBindName = new Button()
|
{
|
Width = Application.GetRealWidth(500 - 120),
|
X = devicePic.Right + Application.GetRealWidth(20),
|
TextColor = Shared.Common.ZigbeeColor.Current.TextBlack,
|
TextAlignment = TextAlignment.CenterLeft,
|
};
|
rowLayout.AddChidren(btnBindName);
|
|
var btnSelect = new Button()
|
{
|
Width = Application.GetMinRealAverage(110),
|
Height = Application.GetMinRealAverage(110),
|
X = Application.CurrentWidth - Application.GetRealWidth(150),
|
TextColor = Shared.Common.ZigbeeColor.Current.TextBlack,
|
TextAlignment = TextAlignment.CenterLeft,
|
//UnSelectedImagePath = "Item/Tick.png",
|
SelectedImagePath = "Item/TickSelected.png",
|
Gravity = Gravity.CenterVertical,
|
};
|
rowLayout.AddChidren(btnSelect);
|
devicePic.IsSelected = false;
|
btnSelect.IsSelected = false;
|
btnBindName.TextColor = ZigbeeColor.Current.TextBlack;
|
if (scene.SceneName == null)
|
{
|
btnBindName.Text = Language.StringByID(R.MyInternationalizationString.Unknown);
|
}
|
else
|
{
|
btnBindName.Text = scene.SceneName;
|
}
|
|
foreach (var bindedSc in PanelBindPage.bindList)
|
{
|
if (scene.ScenesId == bindedSc.BindScenesId)
|
{
|
devicePic.IsSelected = true;
|
btnBindName.TextColor = ZigbeeColor.Current.SelectedTextColor;
|
btnSelect.IsSelected = true;
|
targetList.Add(scene);
|
}
|
}
|
|
foreach (var sc in targetList)
|
{
|
var sc1 = (SceneUI)sc;
|
if (scene.ScenesId == sc1.ScenesId)
|
{
|
devicePic.IsSelected = true;
|
btnBindName.TextColor = ZigbeeColor.Current.SelectedTextColor;
|
btnSelect.IsSelected = true;
|
}
|
}
|
|
bool IsTip = false;
|
EventHandler<MouseEventArgs> hander = (sender1, e1) =>
|
{
|
if (PanelBindPage.bindList.Count != 0)
|
{
|
if (IsTip)
|
{
|
return;
|
}
|
IsTip = true;
|
if (devicePic.IsSelected)
|
{
|
new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindExist), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnBindName);
|
return;
|
}
|
}
|
if (targetList.Count != 0)
|
{
|
var alert = new Alert(Language.StringByID(R.MyInternationalizationString.Tip), Language.StringByID(R.MyInternationalizationString.SureChangeScene),
|
Language.StringByID(R.MyInternationalizationString.Cancel), Language.StringByID(R.MyInternationalizationString.Confrim));
|
alert.Show();
|
alert.ResultEventHandler += async (sender, e) =>
|
{
|
if (e)
|
{
|
if (!devicePic.IsSelected)
|
{
|
bool delBindedScene = false;
|
foreach (var bindedSc in PanelBindPage.bindList)
|
{
|
var delDevice = new DelDeviceBindData();
|
delDevice.DeviceAddr = key.DeviceAddr;
|
delDevice.Epoint = key.DeviceEpoint;
|
|
var removeDevice = new RemoveBindListObj();
|
removeDevice.BindCluster = bindedSc.BindCluster;
|
removeDevice.BindType = 1;
|
removeDevice.BindScenesId = bindedSc.BindScenesId;
|
delDevice.RemoveBindList.Add(removeDevice);
|
|
try
|
{
|
CommonPage.Loading.Start("");
|
var delResult = new DelDeviceBindResponseAllData();
|
delResult = await key.DelDeviceBindAsync(delDevice);
|
if (delResult.delDeviceBindResponseData?.RemoveBindList != null)
|
{
|
foreach (var re in delResult.delDeviceBindResponseData.RemoveBindList)
|
{
|
switch (re.Result)
|
{
|
case 0:
|
delBindedScene = true;
|
targetList.Clear();
|
isChoose = true;
|
targetList.Add(scene);
|
break;
|
default:
|
new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.BindErrorAbsence), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnBindName);
|
break;
|
}
|
}
|
}
|
}
|
catch { }
|
finally
|
{
|
CommonPage.Loading.Hide();
|
}
|
}
|
|
if (PanelBindPage.bindList.Count == 0)
|
{
|
delBindedScene = true;
|
targetList.Clear();
|
isChoose = true;
|
targetList.Add(scene);
|
}
|
|
if (delBindedScene)
|
{
|
PanelBindPage.bindList.Clear();
|
}
|
if (action != null)
|
{
|
action(PanelBindPage.bindList);
|
}
|
SetMiddleFrameInfo(key, currentClusterID, isDevice);
|
}
|
else
|
{
|
targetList.Remove(scene);
|
SetMiddleFrameInfo(key, currentClusterID, isDevice);
|
}
|
}
|
};
|
}
|
else
|
{
|
|
if (!devicePic.IsSelected)
|
{
|
targetList.Add(scene);
|
isChoose = true;
|
devicePic.IsSelected = true;
|
btnSelect.IsSelected = true;
|
btnBindName.TextColor = ZigbeeColor.Current.SelectedTextColor;
|
}
|
else
|
{
|
//targetList.Remove(scene);
|
//devicePic.IsSelected = false;
|
//btnSelect.IsSelected = false;
|
//btnBindName.TextColor = ZigbeeColor.Current.TextBlack;
|
}
|
}
|
};
|
rowLayout.MouseUpEventHandler += hander;
|
devicePic.MouseUpEventHandler += hander;
|
btnBindName.MouseUpEventHandler += hander;
|
btnSelect.MouseUpEventHandler += hander;
|
}
|
}
|
}
|
|
|
public void ChangedILogicStatus(Logic logic)
|
{
|
//throw new NotImplementedException();
|
}
|
|
public void ChangedISceneStatus(Scene scene)
|
{
|
// throw new NotImplementedException();
|
}
|
|
/// <summary>
|
/// 设备状态更新接口
|
/// </summary>
|
public void DeviceInfoChange(CommonDevice common, string typeTag)
|
{
|
}
|
}
|
}
|