using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Shared.Common; using Shared.Phone.UserCenter.SmartSound.Forms; using Shared.Phone.UserCenter.SmartSound.Util; using Shared.Phone.UserCenter.SmartSound.Widget; using ZigBee.Device; namespace Shared.Phone.UserCenter.SmartSound { public class SmartSoundControlForm : EditorCommonForm { /// /// 列表控件 /// private VerticalListControl listView = null; private FrameLayout contentLayout = null; public int CurrentIndex = 0; private MostRightIconControl btnAddDeviceIcon = null; /// /// 当前楼层的名称 /// private static NormalViewControl pullLayoutText = null; /// /// 智能音箱数据 /// private static SmartSoundInfo.SoundInfo mSoundInfo = null; /// /// 楼层控件 /// private MyPullControl myPullControl; public SmartSoundControlForm(SmartSoundInfo.SoundInfo soundInfo) { mSoundInfo = soundInfo; } /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// public void ShowForm() { //设置标题信息 base.SetTitleText("语音控制"); //右上添加按钮 if (btnAddDeviceIcon == null) { btnAddDeviceIcon = new MostRightIconControl(69, 69); btnAddDeviceIcon.UnSelectedImagePath = "Item/Add.png"; topFrameLayout.AddChidren(btnAddDeviceIcon); btnAddDeviceIcon.InitControl(); btnAddDeviceIcon.ButtonClickEvent += (sender, e) => { var smartSoundDataAdd = new SmartSoundControlContentForm(mSoundInfo); smartSoundDataAdd.AddForm(); }; } //初始化中部控件 this.InitMiddleFrame(); } private void InitMiddleFrame() { this.ClearBodyFrame(); HdlThreadLogic.Current.RunThread(async () => { this.ShowProgressBar(); string json = await GetData();//获取数据 SmartSoundDataInfo dataInfo = Newtonsoft.Json.JsonConvert.DeserializeObject(json); if (dataInfo != null) { if (dataInfo.StateCode == "SUCCESS") { SmartSound.getInstantiate().LayerList = dataInfo.ResponseData.LayerList; SmartSound.getInstantiate().TokenID = mSoundInfo.Id; SmartSound.getInstantiate().UserID = mSoundInfo.UserID; SmartSound.getInstantiate().HomeID = mSoundInfo.HomeID; } } HdlThreadLogic.Current.RunMainInThread(() => { if (SmartSound.getInstantiate().LayerList == null || SmartSound.getInstantiate().LayerList.Count < 1) { this.CloseProgressBar(); this.ShowNotDataImage(this.bodyFrameLayout, new string[] { "还没有控制内容哦,", "点击\"+\"添加" }); return; } contentLayout = new FrameLayout(); this.bodyFrameLayout.AddChidren(contentLayout); contentLayout.RemoveAll(); myPullControl = new MyPullControl(this, SmartSound.getInstantiate().LayerList); contentLayout.AddChidren(myPullControl); myPullControl.InitControl(); LoadAllRoomListView(); this.CloseProgressBar(); }); }); } /// /// 判断是否有数据 /// /// private bool HaveData() { bool bol = false; for (int i = 0; i < SmartSound.getInstantiate().LayerList.Count; i++) { if (SmartSound.getInstantiate().LayerList[i].RoomList.Count > 0) { bol = true; break; } } return bol; } /// /// 加载房间列表 /// private void LoadAllRoomListView() { try { if (SmartSound.getInstantiate().LayerList == null || SmartSound.getInstantiate().LayerList.Count < 1) return; // 加载当前楼层的所有房间 ListView if (listView == null) { listView = new VerticalListControl(); contentLayout.AddChidren(listView); listView.Y = Application.GetRealHeight(173); listView.Height = bodyFrameLayout.Height - Application.GetRealHeight(173); } else if (listView.Parent == null) { listView = new VerticalListControl(); contentLayout.AddChidren(listView); listView.Y = Application.GetRealHeight(173); listView.Height = bodyFrameLayout.Height - Application.GetRealHeight(173); } SmartSound.Layer layer = SmartSound.getInstantiate().LayerList[CurrentIndex]; pullLayoutText.Text = layer.LayerName; listView.RemoveAll(); foreach (SmartSound.Room room in layer.RoomList) { var roomRowLayout = new RoomRowLayout(this, room); listView.AddChidren(roomRowLayout); roomRowLayout.InitControl(); roomRowLayout.frameTable.ButtonClickEvent += (sender, e) => { // 点击房间,进入选择设备界面 var deviceChange = new SmartSoundContentForDeviceChange(room); deviceChange.AddForm(); }; roomRowLayout.btnDelect.ButtonClickEvent += (sender, e) => { var delBtn = sender as NormalViewControl; DelectRoom(delBtn); }; } if (!HaveData()) { SmartSound.getInstantiate().LayerList.Clear(); myPullControl.Visible = false; this.ShowNotDataImage(this.bodyFrameLayout, new string[] { "还没有控制内容哦,", "点击\"+\"添加" }); } } catch (Exception e) { string error = e.Message; } } private void DelectRoom(NormalViewControl delBtn) { this.ShowMassage(ShowMsgType.Confirm, "确认删除该房间的控制内容?", async () => { HdlThreadLogic.Current.RunThread(async () => { this.ShowProgressBar("正在删除数据...."); //删除房间 var tag = (SmartSound.Room)delBtn.GetTagByKey("obj"); if (SmartSound.getInstantiate().LayerList == null) return; for (int i = 0; i < SmartSound.getInstantiate().LayerList.Count; i++) { SmartSound.Layer _layer = SmartSound.getInstantiate().LayerList[i]; for (int j = 0; j < _layer.RoomList.Count; j++) { SmartSound.Room _room = _layer.RoomList[j]; if (_room.RoomName == tag.RoomName) { _layer.RoomList.Remove(_room); } } } // 重新上传数据 string json = await postBatchEdit(); HdlThreadLogic.Current.RunMainInThread(() => { //this.InitMiddleFrame(); this.LoadAllRoomListView(); }); this.CloseProgressBar(); }); }, Language.StringByID(R.MyInternationalizationString.OkMsg)); } private async Task GetData() { // 从服务器获取数据 string url = string.Format("https://developer.hdlcontrol.com/zigbeespeakerservice/BatchEdit?Platform&UserID={0}&TokenID={1}&HomeID={2}", mSoundInfo.UserID, mSoundInfo.Id,mSoundInfo.HomeID); return await MyHttpWebResponse.GetWebRequest(url); } private async Task postBatchEdit() { // 提交数据至服务器 string url = "https://developer.hdlcontrol.com/zigbeespeakerservice/BatchEdit"; string json = Newtonsoft.Json.JsonConvert.SerializeObject(SmartSound.getInstantiate()); string response_str = MyHttpWebResponse.PostWebRequest(url, json, Encoding.UTF8); return response_str; } public override int FormActionAgainEvent() { ShowForm(); return base.FormActionAgainEvent(); } #region ■ 自定义楼层选择控件_____________________ /// /// 房间列表行 /// private class MyPullControl : FrameRowControl { private SmartSoundControlForm smartSoundControlData = null; private List Layers = null; /// /// 房间列表 /// private NormalViewControl btnName = null; /// /// 房间列表行 /// public MyPullControl(SmartSoundControlForm _SmartSoundDataAdd, List _layers) { this.smartSoundControlData = _SmartSoundDataAdd; this.Layers = _layers; this.UseClickStatu = false; this.BackgroundColor = UserCenterColor.Current.White; this.Height = Application.GetRealHeight(173); } /// /// 初始化控件 /// public void InitControl() { try { //显示文本 btnName = this.AddLeftCaption(string.Empty, 700); btnName.Height = Application.GetRealHeight(60); btnName.TextSize = 17; btnName.Y = Application.GetRealHeight(57); btnName.Text = "房间列表"; var right_icon = this.AddRightArrow(); right_icon.SelectedImagePath = "SmartSound/PullDown.png"; right_icon.UnSelectedImagePath = "SmartSound/PullDown.png"; right_icon.ButtonClickEvent += (sender, e) => { ShowPullList(); }; pullLayoutText = this.AddMostRightView(Layers[smartSoundControlData.CurrentIndex].LayerName, 300, false); pullLayoutText.Name = "pullLayout"; pullLayoutText.ButtonClickEvent += (sender, e) => { ShowPullList(); }; pullLayoutText.Text = Layers[smartSoundControlData.CurrentIndex].LayerName; if (SmartSound.getInstantiate().LayerList.Count < 2) { right_icon.Visible = false; pullLayoutText.Visible = false; } } catch(Exception e) { string error = e.Message; } } private void ShowPullList() { //房间列表行{房间列表 textView,楼层下拉窗} //显示房间{带选择框的;当选中了房间后需要在底部弹出确认按钮,点击确认跳转到新的界面} var pull_frame = new TopRightMenuControl(Layers.Count, 2); pull_frame.Y = this.Height; for (int i = 0; i < Layers.Count; i++) { int index = i; //创建楼层 pull_frame.AddRowMenu(Layers[i].LayerName, "Item/CreatFloor.png", "Item/CreatFloorSelected.png", () => { smartSoundControlData.CurrentIndex = index; smartSoundControlData.LoadAllRoomListView(); }); } } } #endregion #region ■ 自定义智能音箱控件_____________________ /// /// 语音控制房间行 /// private class RoomRowLayout : RowLayoutControl { /// /// 房间名字 /// private NormalViewControl btnName = null; /// /// 删除按钮 /// public NormalViewControl btnDelect = null; private SmartSoundControlForm smartSoundControlForm; private SmartSound.Room room; /// /// 自定音箱关控件 /// public RoomRowLayout(SmartSoundControlForm _smartSoundControlForm, SmartSound.Room _room) { this.smartSoundControlForm = _smartSoundControlForm; this.room = _room; this.BackgroundColor = UserCenterColor.Current.White; this.Height = Application.GetRealHeight(173); } /// /// 初始化内部控件 /// public void InitControl() { //设备 frameTable.AddLeftCaption(this.room.RoomName, 800); frameTable.AddRightArrow(); //底线 frameTable.AddBottomLine(); btnDelect = base.AddDeleteControl(); btnDelect.Text = "删除"; btnDelect.AddTag("obj", room); } } #endregion } }