using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using ZigBee.Device; namespace Shared.Phone.UserCenter.SharedContent { /// /// 查看已配置共享内容的主界面 /// public class SearchConfigureSharedMainForm : UserCenterCommonForm { #region ■ 变量声明___________________________ /// /// 设备列表控件 /// private VerticalScrolViewLayout listDeviceView = null; /// /// 场景列表控件 /// private VerticalScrolViewLayout listSceneView = null; /// /// 成员信息 /// private MemberInfoRes memberResult = null; /// /// 成员的分享数据 /// private MemberShardInfoData memberShardInfo = null; /// /// 房间对象 /// private Common.Room room = null; /// /// Tab的选择。1:功能Tab 2:场景Tab /// private int TabSelectIndex = 1; #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// /// 房间信息 /// 成员信息 /// 成员的分享数据 public void ShowForm(Common.Room i_room, MemberInfoRes i_memberResult, MemberShardInfoData i_memberShardInfo) { this.memberResult = i_memberResult; this.room = i_room; this.memberShardInfo = i_memberShardInfo; //设置头部信息 base.SetTitleText(i_room.Name); //初始化中部信息 this.InitMiddleFrame(); } /// /// 初始化中部信息 /// private void InitMiddleFrame() { bodyFrameLayout.RemoveAll(); //初始化Tab控件 var frame = this.InitTabControl(); this.listDeviceView = new VerticalScrolViewLayout(); listDeviceView.Y = frame.Bottom; listDeviceView.Height = bodyFrameLayout.Height - frame.Bottom; listDeviceView.Visible = this.TabSelectIndex == 1; bodyFrameLayout.AddChidren(listDeviceView); this.listSceneView = new VerticalScrolViewLayout(); listSceneView.Y = frame.Bottom; listSceneView.Height = bodyFrameLayout.Height - frame.Bottom; listSceneView.Visible = this.TabSelectIndex == 2; bodyFrameLayout.AddChidren(listSceneView); new System.Threading.Thread(() => { //初始化功能Tab列表 this.InitFunctionTabList(); //初始化场景Tab列表 this.InitSceneTabList(); }) { IsBackground = true }.Start(); } #endregion #region ■ 初始化Tab控件______________________ /// /// 初始化Tab控件 /// /// private FrameLayout InitTabControl() { //Tab切换控件 var frameSwich = new FrameLayout(); frameSwich.Height = Application.GetRealHeight(150); frameSwich.BackgroundColor = UserCenterColor.Current.TopFrameLayout; bodyFrameLayout.AddChidren(frameSwich); //功能 var btnFunction = new ViewNormalControl(frameSwich.Width / 2, Application.GetRealHeight(100)); btnFunction.Gravity = Gravity.CenterVertical; btnFunction.TextID = R.MyInternationalizationString.Function; btnFunction.TextAlignment = TextAlignment.Center; btnFunction.TextColor = UserCenterColor.Current.SelectTextColor; btnFunction.TextAlignment = TextAlignment.Center; frameSwich.AddChidren(btnFunction); //场景 var btnScene = new ViewNormalControl(frameSwich.Width / 2, Application.GetRealHeight(100)); btnScene.Gravity = Gravity.CenterVertical; btnScene.X = frameSwich.Width / 2; btnScene.TextID = R.MyInternationalizationString.uScence; btnScene.TextAlignment = TextAlignment.Center; frameSwich.AddChidren(btnScene); //线 var btnLine = new ProgressLine(); btnLine.Gravity = Gravity.BottomLeft; frameSwich.AddChidren(btnLine); btnLine.SetValue(50, true); if (this.TabSelectIndex == 2) { btnScene.TextColor = UserCenterColor.Current.SelectTextColor; btnFunction.TextColor = Common.ZigbeeColor.Current.TextColor; btnLine.SetValue(50, false); } //功能Tab btnFunction.MouseUpEventHandler += (sender, e) => { if (this.TabSelectIndex == 1) { return; } btnScene.TextColor = Common.ZigbeeColor.Current.TextColor; btnFunction.TextColor = UserCenterColor.Current.SelectTextColor; btnLine.SetValue(50); this.TabSelectIndex = 1; //隐藏场景列表控件,显示设备列表控件 this.listSceneView.Visible = false; this.listDeviceView.Visible = true; }; //场景Tab btnScene.MouseUpEventHandler += (sender, e) => { if (this.TabSelectIndex == 2) { return; } btnScene.TextColor = UserCenterColor.Current.SelectTextColor; btnFunction.TextColor = Common.ZigbeeColor.Current.TextColor; btnLine.SetValue(50, false); this.TabSelectIndex = 2; //隐藏设备列表控件,显示场景列表控件 this.listDeviceView.Visible = false; this.listSceneView.Visible = true; }; return frameSwich; } #endregion #region ■ 显示功能Tab列表____________________ /// /// 初始化功能Tab列表 /// private void InitFunctionTabList() { //获取分享的设备 var listDevice = this.GetShardListDevice(); foreach (var device in listDevice) { Application.RunOnMainThread(() => { //添加设备的明细行 this.AddDeviceDetailRow(device); }); } } /// /// 添加设备的明细行 /// /// 设备对象 private void AddDeviceDetailRow(CommonDevice device) { var row = new StatuRowLayout(listDeviceView); //图片 var btnIcon = new RowLeftIconView(); Common.LocalDevice.Current.SetDeviceIconToControl(btnIcon, device); row.AddChidren(btnIcon, ChidrenBindMode.NotBind); //设备类型的翻译名字 var btnName = new RowCenterView(); btnName.Text = Common.LocalDevice.Current.GetDeviceEpointName(device); row.AddChidren(btnName, ChidrenBindMode.NotBind); //移除 var btnDelete = new RowDeleteButton(); btnDelete.TextID = R.MyInternationalizationString.RemoveBotton; row.AddRightView(btnDelete); btnDelete.MouseUpEventHandler += (sender, e) => { //确定移除选中的设备? string msg = Language.StringByID(R.MyInternationalizationString.uConfirmRemoveSelectDeviceMsg); this.ShowConfirmMsg(msg, "DeleteShardDevice", row, device); }; } /// /// 删除共享设备 /// /// /// public async void DeleteShardDevice(StatuRowLayout row, CommonDevice device) { var result = await HdlShardLogic.Current.DoDeleteSharedContent(memberShardInfo, this.room, new List() { device }, new List()); if (result == true) { Application.RunOnMainThread(() => { row.RemoveFromParent(); if (this.listDeviceView.ChildrenCount == 0 && this.listSceneView.ChildrenCount == 0) { //什么都没有了,则关闭界面 this.CloseForm(); } }); } } #endregion #region ■ 显示场景Tab列表____________________ /// /// 初始化场景Tab列表 /// private void InitSceneTabList() { foreach (var sceneUi in this.room.SceneUIList) { if (sceneUi == null || memberShardInfo.dicAllMemberShard[this.room.FileName].Contains(sceneUi.FileName) == false) { //异常,或者不存在,则不显示 continue; } Application.RunOnMainThread(() => { //添加场景行 this.AddSceneDetailRow(sceneUi); }); } } /// /// 添加场景的明细行 /// /// 场景对象 private void AddSceneDetailRow(Common.SceneUI sceneUI) { var sceneRow = new SceneViewRow(this.listSceneView, sceneUI); //移除 var btnDelete = new RowDeleteButton(); btnDelete.TextID = R.MyInternationalizationString.RemoveBotton; sceneRow.AddRightView(btnDelete); btnDelete.MouseUpEventHandler += (sender, e) => { //确定移除选中的场景? string msg = Language.StringByID(R.MyInternationalizationString.uConfirmRemoveSelectSceneMsg); this.ShowConfirmMsg(msg, "DeleteShardScene", sceneRow, sceneUI); }; } /// /// 删除共享场景 /// /// /// public async void DeleteShardScene(SceneViewRow row, Common.SceneUI sceneUI) { var result = await HdlShardLogic.Current.DoDeleteSharedContent(memberShardInfo, this.room, new List(), new List() { sceneUI }); if (result == true) { Application.RunOnMainThread(() => { row.RemoveFromParent(); if (this.listDeviceView.ChildrenCount == 0 && this.listSceneView.ChildrenCount == 0) { //什么都没有了,则关闭界面 this.CloseForm(); } }); } } #endregion #region ■ 获取可以分享的设备_________________ /// /// 获取分享的设备 /// /// private List GetShardListDevice() { //获取这个房间里面的分享设备的路径 var listDeviceFile = new List(); foreach (var ui in this.room.DeviceUIList) { if (ui.CommonDevice != null && memberShardInfo.dicAllMemberShard[this.room.FileName].Contains(ui.CommonDevice.FilePath) == true) { listDeviceFile.Add(ui.CommonDevice.FilePath); } } var listFile = HdlShardLogic.Current.GetLocalAllShardFile(); var listDevice = new List(); foreach (string file in listFile) { //如果不是设备文件,或者这个房间里面没有这个设备 if (file.StartsWith(Common.LocalDevice.deviceFirstName) == false || listDeviceFile.Contains(file) == false) { continue; } var strArry = file.Split('_'); if (strArry.Length < 3) { continue; } //从分享文件中序列化回来 var deviceData = HdlShardLogic.Current.GetShardFileContent(file); var device = ZigBee.Device.CommonDevice.CommonDeviceByByteString(strArry[1], System.Text.Encoding.UTF8.GetString(deviceData)); if (device != null) { listDevice.Add(device); } } return listDevice; } #endregion #region ■ 一般方法___________________________ #endregion } }