using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Shared.Phone.UserCenter.SmartSound.Util;
|
|
namespace Shared.Phone.UserCenter.SmartSound.Forms
|
{
|
public class SmartSoundContentForDeviceChange : EditorCommonForm
|
{
|
|
/// <summary>
|
/// 当前选中的房间
|
/// </summary>
|
private SmartSound.Room CurrentRoom = null;
|
|
private FrameLayout ContentLayout = null;
|
|
private FrameLayout DeviceListViewFrameLayout = null;
|
/// <summary>
|
/// 场景 listView
|
/// </summary>
|
private VerticalListControl SceneListView = null;
|
/// <summary>
|
/// 设备 listView
|
/// </summary>
|
private VerticalListControl DeviceListView = null;
|
/// <summary>
|
/// 没有数据的时候,提示用
|
/// </summary>
|
private FrameLayout TipLayout = null;
|
|
private List<string> TabList = new List<string>() { Language.StringByID(R.MyInternationalizationString.uLight), Language.StringByID(R.MyInternationalizationString.uDeviceBelongId100) };
|
|
private int CurrentSelectIndex = 0;
|
private int imageWith = 683;
|
private int imageHeight = 392;
|
|
/// <summary>
|
/// 选择房间中的设备
|
/// </summary>
|
/// <param name="_room"> 当前房间</param>
|
public SmartSoundContentForDeviceChange(SmartSound.Room _room)
|
{
|
this.CurrentRoom = _room;
|
}
|
|
/// <summary>
|
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
/// </summary>
|
public void ShowForm()
|
{
|
//设置标题信息
|
base.SetTitleText(CurrentRoom.RoomName);
|
|
//初始化中部控件
|
this.InitMiddleFrame();
|
}
|
|
private void InitMiddleFrame()
|
{
|
//1.场景、功能导航条
|
var switchContr = new SceneFunctionSwitchControl();
|
this.bodyFrameLayout.AddChidren(switchContr);
|
switchContr.Gravity = Gravity.CenterVertical;
|
switchContr.Width = Application.GetRealWidth(650);
|
switchContr.Y = Application.GetRealHeight(40);
|
|
ContentLayout = new FrameLayout();
|
this.bodyFrameLayout.AddChidren(ContentLayout);
|
ContentLayout.Height = this.bodyFrameLayout.Height - switchContr.Height - Application.GetRealHeight(40);
|
ContentLayout.Y = switchContr.Height + Application.GetRealHeight(40);
|
|
var listTitle = new List<string>();
|
listTitle.Add(Language.StringByID(R.MyInternationalizationString.uScence));
|
listTitle.Add(Language.StringByID(R.MyInternationalizationString.uFunction));
|
|
//设置初始值
|
switchContr.SetDefultIndex(0);
|
|
//选择事件
|
switchContr.SelectTabEvent += (selectIndex) =>
|
{
|
//刷新bodyView
|
if (selectIndex == 0)
|
{
|
LoadSceneView();
|
}
|
else
|
{
|
LoadFunction();
|
}
|
};
|
|
//开始初始化
|
switchContr.InitControl(listTitle);
|
|
}
|
|
/// <summary>
|
/// 加载场景界面
|
/// </summary>
|
private void LoadSceneView()
|
{
|
try
|
{
|
//3.设备列表 ListView
|
ContentLayout.RemoveAll();
|
|
var tipLayout = new FrameLayout();
|
ContentLayout.AddChidren(tipLayout);
|
tipLayout.Visible = false;
|
ShowNoFunctionTip(tipLayout);
|
|
SceneListView = new VerticalListControl();
|
ContentLayout.AddChidren(SceneListView);
|
SceneListView.Y = Application.GetRealHeight(40);
|
SceneListView.RemoveAll();
|
|
for (int i = 0; i < CurrentRoom.SceneList.Count; i++)
|
{
|
SmartSound.Scene scene = CurrentRoom.SceneList[i];
|
var roomRowLayout = new SceneRowLayout(this, scene, i);
|
SceneListView.AddChidren(roomRowLayout);
|
roomRowLayout.InitControl();
|
}
|
|
if (SceneListView.ChildrenCount > 5)
|
{
|
TextView textView = new TextView();
|
textView.Height = Application.GetRealHeight(127 * 3);
|
SceneListView.AddChidren(textView);
|
}
|
|
if (SceneListView.ChildrenCount == 0)
|
{
|
tipLayout.Visible = true;
|
}
|
else
|
{
|
tipLayout.Visible = false;
|
}
|
}
|
catch (Exception ex)
|
{
|
string eoor = ex.Message;
|
}
|
}
|
|
private void LoadFunction()
|
{
|
try
|
{
|
|
ContentLayout.RemoveAll();
|
|
FrameLayout tab_layout = new FrameLayout();
|
ContentLayout.AddChidren(tab_layout);
|
tab_layout.Height = Application.GetRealHeight(170);
|
tab_layout.Y = 0;
|
|
//添加 ListView 提示
|
TipLayout = new FrameLayout();
|
ContentLayout.AddChidren(TipLayout);
|
TipLayout.Visible = false;
|
TipLayout.Y = tab_layout.Height;
|
ShowNoFunctionTip(TipLayout);
|
|
Buttons.Clear();
|
|
//添加功能项
|
for (int i = 0; i < TabList.Count; i++)
|
{
|
Button button = new Button();
|
tab_layout.AddChidren(button);
|
button.Width = Application.GetRealWidth(250);
|
button.Text = TabList[i];
|
button.X = ControlCommonResourse.XXLeft / 2 + i * button.Width;
|
button.AddTag("Index", i);
|
Buttons.Add(button);
|
|
button.MouseUpEventHandler += (sender, e) =>
|
{
|
Button btn = sender as Button;
|
CurrentSelectIndex = (int)btn.GetTagByKey("Index");
|
RefreshButtonState();
|
RefreshFunctionListView();
|
};
|
}
|
|
//添加 ListView
|
DeviceListViewFrameLayout = new FrameLayout();
|
ContentLayout.AddChidren(DeviceListViewFrameLayout);
|
DeviceListViewFrameLayout.Y = tab_layout.Height;
|
DeviceListViewFrameLayout.Height = ContentLayout.Height - tab_layout.Height;
|
|
RefreshButtonState();
|
RefreshFunctionListView();
|
}
|
catch (Exception ex)
|
{
|
string error = ex.Message;
|
}
|
}
|
|
private void RefreshFunctionListView()
|
{
|
try
|
{
|
|
DeviceListViewFrameLayout.RemoveAll();
|
|
DeviceListView = new VerticalListControl();
|
DeviceListViewFrameLayout.AddChidren(DeviceListView);
|
DeviceListView.Height = DeviceListViewFrameLayout.Height;
|
DeviceListView.RemoveAll();
|
|
switch (CurrentSelectIndex)
|
{
|
case 0:// 灯光
|
{
|
int n = 0;
|
for (int i = 0; i < CurrentRoom.DeviceList.Count; i++)
|
{
|
SmartSound.Device device = CurrentRoom.DeviceList[i];
|
//灯光
|
if (device.DeviceType == 1 || device.DeviceType == 2 || device.DeviceType == 3)
|
{
|
var deviceRowLayout = new DeviceRowLayout(this, device, n);
|
DeviceListView.AddChidren(deviceRowLayout);
|
deviceRowLayout.InitControl();
|
n++;
|
}
|
}
|
}
|
break;
|
case 1: // 窗帘
|
{
|
int n = 0;
|
for (int i = 0; i < CurrentRoom.DeviceList.Count; i++)
|
{
|
SmartSound.Device device = CurrentRoom.DeviceList[i];
|
//
|
if (device.DeviceType == 4 || device.DeviceType == 5 || device.DeviceType == 6)
|
{
|
var deviceRowLayout = new DeviceRowLayout(this, device, n);
|
DeviceListView.AddChidren(deviceRowLayout);
|
deviceRowLayout.InitControl();
|
n++;
|
}
|
}
|
}
|
break;
|
}
|
|
if (DeviceListView.ChildrenCount > 5)
|
{
|
TextView textView = new TextView();
|
textView.Height = Application.GetRealHeight(127 * 3);
|
DeviceListView.AddChidren(textView);
|
}
|
|
if (DeviceListView.ChildrenCount == 0)
|
{
|
TipLayout.Visible = true;
|
}
|
else
|
{
|
TipLayout.Visible = false;
|
}
|
}
|
catch (Exception e)
|
{
|
string error = e.Message;
|
}
|
}
|
|
/// <summary>
|
/// 修改场景昵称
|
/// </summary>
|
/// <param name="scene"></param>
|
/// <param name="sceneRowLayout"></param>
|
private void ShowSetNicknameDialog(SmartSound.Scene scene, SceneRowLayout sceneRowLayout)
|
{
|
//生成一个弹窗画面
|
var dialogForm = new DialogInputControl();
|
//编辑住宅
|
dialogForm.SetTitleText("自定义唤醒词");
|
//请输入住宅名称
|
dialogForm.SetTipText("请输入唤醒词");
|
dialogForm.Text = scene.NicksName;
|
|
//按下确认按钮
|
dialogForm.ComfirmClickEvent += (async (textValue) =>
|
{
|
scene.NicksName = textValue;
|
string remark = scene.SceneName;
|
if (scene.NicksName.Trim() != string.Empty)
|
{
|
remark += "(" + scene.NicksName + ")";
|
}
|
sceneRowLayout.btnCaption.Text = remark;
|
string json = await postBatchEdit();
|
//画面关闭
|
dialogForm.CloseDialog();
|
});
|
}
|
|
/// <summary>
|
/// 修改设备昵称
|
/// </summary>
|
/// <param name="device"></param>
|
/// <param name="deviceRowLayout"></param>
|
private void ShowSetNicknameDialog(SmartSound.Device device, DeviceRowLayout deviceRowLayout)
|
{
|
//生成一个弹窗画面
|
var dialogForm = new DialogInputControl();
|
//编辑住宅
|
dialogForm.SetTitleText("自定义唤醒词");
|
//请输入住宅名称
|
dialogForm.SetTipText("请输入唤醒词");
|
dialogForm.Text = device.NicksName;
|
|
//按下确认按钮
|
dialogForm.ComfirmClickEvent += (async (textValue) =>
|
{
|
device.NicksName = textValue;
|
string remark = device.DeviceName;
|
if (device.NicksName.Trim() != string.Empty)
|
{
|
remark += "(" + device.NicksName + ")";
|
}
|
deviceRowLayout.btnCaption.Text = remark;
|
|
string json = await postBatchEdit();
|
|
//画面关闭
|
dialogForm.CloseDialog();
|
});
|
}
|
|
/// <summary>
|
/// 场景删除
|
/// </summary>
|
private void ShowSceneDelectDialog(SmartSound.Scene scene)
|
{
|
this.ShowMassage(ShowMsgType.Confirm, "确认删除该控制内容?", async () =>
|
{
|
try
|
{
|
CurrentRoom.SceneList.Remove(scene);
|
LoadSceneView();
|
string json = await postBatchEdit();
|
}
|
catch (Exception e)
|
{
|
string sss = e.Message;
|
}
|
|
}, Language.StringByID(R.MyInternationalizationString.OkMsg));
|
}
|
|
/// <summary>
|
/// 设备删除
|
/// </summary>
|
private void ShowDeviceDelectDialog(SmartSound.Device device)
|
{
|
this.ShowMassage(ShowMsgType.Confirm, "确认删除该控制内容?", async () =>
|
{
|
try
|
{
|
//DeviceListView.RemoveAt(index);
|
CurrentRoom.DeviceList.Remove(device);
|
RefreshFunctionListView();
|
|
string json = await postBatchEdit();
|
}
|
catch (Exception e)
|
{
|
string sss = e.Message;
|
}
|
|
}, Language.StringByID(R.MyInternationalizationString.OkMsg));
|
}
|
|
/// <summary>
|
/// 提示没有功能
|
/// </summary>
|
private void ShowNoFunctionTip(FrameLayout layout, string tip = "没有数据哦")
|
{
|
var noFunction = new Button()
|
{
|
Y = Application.GetRealHeight(320),
|
Width = Application.GetMinRealAverage(757),
|
Height = Application.GetMinRealAverage(435),
|
UnSelectedImagePath = "Item/NoFunction.png",
|
Gravity = Gravity.CenterHorizontal
|
};
|
layout.AddChidren(noFunction);
|
|
var noFunctionTip = new Button()
|
{
|
Y = noFunction.Bottom + Application.GetRealHeight(32),
|
Height = Application.GetRealHeight(200),
|
Width = Application.GetRealWidth(700),
|
Gravity = Gravity.CenterHorizontal,
|
Text = tip,
|
TextColor = UserCenterColor.Current.TextGrayColor1,
|
TextAlignment = TextAlignment.Center,
|
IsMoreLines = true
|
};
|
layout.AddChidren(noFunctionTip);
|
}
|
|
//为了方便更新状态,存起来
|
private List<Button> Buttons = new List<Button>();
|
private void RefreshButtonState()
|
{
|
try
|
{
|
for (int i = 0; i < Buttons.Count; i++)
|
{
|
Button btn = Buttons[i];
|
if (i == CurrentSelectIndex)
|
{
|
btn.SelectedImagePath = "Item/RoomIconBackgroundSelected.png";
|
btn.UnSelectedImagePath = "Item/RoomIconBackgroundSelected.png";
|
btn.TextColor = UserCenterColor.Current.White;
|
}
|
else
|
{
|
btn.SelectedImagePath = "Item/RoomIconBackground.png";
|
btn.UnSelectedImagePath = "Item/RoomIconBackground.png";
|
btn.TextColor = UserCenterColor.Current.TextGrayColor1;
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
string error = e.Message;
|
}
|
}
|
|
private async Task<string> postBatchEdit()
|
{
|
// 提交数据至服务器
|
string url = "https://developer.hdlcontrol.com/zigbeespeakerservice/BatchEdit";
|
string json = Newtonsoft.Json.JsonConvert.SerializeObject(SmartSound.getInstantiate());
|
string response_str = await MyHttpWebResponse.PostWebRequest(url, json, Encoding.UTF8);
|
return response_str;
|
}
|
|
#region ■ 自定义场景选择控件_____________________
|
|
/// <summary>
|
/// 场景列表行
|
/// </summary>
|
private class SceneRowLayout : RowLayoutControl
|
{
|
private SmartSoundContentForDeviceChange smartSoundContentForDeviceChange = null;
|
|
private SmartSound.Scene scene = null;
|
/// <summary>
|
/// 删除按钮
|
/// </summary>
|
public NormalViewControl btnDelect = null;
|
public NormalViewControl btnCaption = null;
|
private int Index = 0;
|
|
public SceneRowLayout(SmartSoundContentForDeviceChange _smartSoundContentForDeviceChange, SmartSound.Scene _scene, int _index)
|
{
|
smartSoundContentForDeviceChange = _smartSoundContentForDeviceChange;
|
scene = _scene;
|
Index = _index;
|
}
|
|
/// <summary>
|
/// 初始化内部控件
|
/// </summary>
|
public void InitControl()
|
{
|
this.BackgroundColor = UserCenterColor.Current.White;
|
this.Height = Application.GetRealHeight(175);
|
string remark = scene.SceneName;
|
if (scene.NicksName.Trim() != string.Empty)
|
{
|
remark += " (" + scene.NicksName + ")";
|
}
|
btnCaption = frameTable.AddLeftCaption(remark, 2000);
|
|
var nicknameIcon = frameTable.AddRightArrow();//58
|
nicknameIcon.TextSize = 17;
|
|
nicknameIcon.SelectedImagePath = "SmartSound/Nickname.png";
|
nicknameIcon.UnSelectedImagePath = "SmartSound/Nickname.png";
|
nicknameIcon.AddTag("obj", scene);
|
nicknameIcon.ButtonClickEvent += (sender, e) =>
|
{
|
// 添加昵称
|
var btn = sender as IconViewControl;
|
SmartSound.Scene tmpScene = (SmartSound.Scene)btn.GetTagByKey("obj");
|
smartSoundContentForDeviceChange.ShowSetNicknameDialog(tmpScene, this);
|
};
|
|
//底线
|
frameTable.AddBottomLine();
|
|
btnDelect = base.AddDeleteControl();
|
btnDelect.Text = Language.StringByID(R.MyInternationalizationString.Delete);
|
btnDelect.ButtonClickEvent += (sender, e) =>
|
{
|
//删除场景
|
smartSoundContentForDeviceChange.ShowSceneDelectDialog(scene);
|
};
|
}
|
}
|
#endregion
|
|
#region ■ 自定灯光选择控件_____________________
|
|
/// <summary>
|
/// 房间列表行
|
/// </summary>
|
private class DeviceRowLayout : RowLayoutControl
|
{
|
private SmartSoundContentForDeviceChange smartSoundContentForDeviceChange = null;
|
|
private SmartSound.Device device = null;
|
/// <summary>
|
/// 删除按钮
|
/// </summary>
|
public NormalViewControl btnDelect = null;
|
public NormalViewControl btnCaption = null;
|
private int Index = 0;
|
|
public DeviceRowLayout(SmartSoundContentForDeviceChange _smartSoundContentForDeviceChange, SmartSound.Device _device, int _index)
|
{
|
smartSoundContentForDeviceChange = _smartSoundContentForDeviceChange;
|
device = _device;
|
Index = _index;
|
}
|
|
/// <summary>
|
/// 初始化内部控件
|
/// </summary>
|
public void InitControl()
|
{
|
this.BackgroundColor = UserCenterColor.Current.White;
|
this.Height = Application.GetRealHeight(175);
|
string remark = device.DeviceName;
|
if (device.NicksName.Trim() != string.Empty)
|
{
|
remark += " (" + device.NicksName + ")";
|
}
|
btnCaption = frameTable.AddLeftCaption(remark, 2000);
|
|
var nicknameIcon = frameTable.AddRightArrow();//58
|
nicknameIcon.TextSize = 17;
|
|
nicknameIcon.SelectedImagePath = "SmartSound/Nickname.png";
|
nicknameIcon.UnSelectedImagePath = "SmartSound/Nickname.png";
|
nicknameIcon.AddTag("obj", device);
|
nicknameIcon.ButtonClickEvent += (sender, e) =>
|
{
|
var btn = sender as IconViewControl;
|
SmartSound.Device tmpDevice = (SmartSound.Device)btn.GetTagByKey("obj");
|
smartSoundContentForDeviceChange.ShowSetNicknameDialog(tmpDevice, this);
|
};
|
|
//底线
|
frameTable.AddBottomLine();
|
|
btnDelect = base.AddDeleteControl();
|
btnDelect.Text = "删除";
|
btnDelect.ButtonClickEvent += (sender, e) =>
|
{
|
smartSoundContentForDeviceChange.ShowDeviceDelectDialog(device);
|
};
|
}
|
}
|
#endregion
|
}
|
}
|