using Shared.Common; using System; using System.Collections.Generic; namespace Shared.Phone.UserCenter.Residence { /// /// 住宅管理的画面★ /// public class ResidenceListForm : EditorCommonForm { #region ■ 变量声明___________________________ /// /// 列表控件 /// private VerticalListControl listView = null; /// /// 住宅数据 /// private Dictionary dicResidenceData = null; /// /// 住宅顺序 /// private List listResidenceSort = new List(); #endregion #region ■ 初始化_____________________________ /// /// 画面显示(底层会固定调用此方法,借以完成画面创建) /// public void ShowForm() { //设置标题信息 base.SetTitleText(Language.StringByID(R.MyInternationalizationString.ResidenceManagement)); //右上添加按钮 var btnTopIcon = new MostRightIconControl(69, 69); btnTopIcon.UnSelectedImagePath = "Item/Add.png"; topFrameLayout.AddChidren(btnTopIcon); btnTopIcon.InitControl(); btnTopIcon.ButtonClickEvent += (sender, e) => { //显示添加住宅名称的画面 this.ShowAddNameForm(); }; //初始化中部控件 this.InitMiddleFrame(); } /// /// 初始化中部控件 /// private void InitMiddleFrame() { //清空bodyFrame this.ClearBodyFrame(); //读取住宅顺序 var strData = UserCenterLogic.LoadFileContent(UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ResidenceSortFile)); if (strData != null) { listResidenceSort = Newtonsoft.Json.JsonConvert.DeserializeObject>(strData); strData = null; } listView = new VerticalListControl(29); listView.Y = Application.GetRealHeight(-6); listView.Height = bodyFrameLayout.Height + Application.GetRealHeight(6); listView.BackgroundColor = UserCenterColor.Current.White; bodyFrameLayout.AddChidren(listView); HdlThreadLogic.Current.RunThread(() => { //设置住宅信息 this.SetResidenceInfo(); }); } #endregion #region ■ 设置住宅信息_______________________ /// /// 设置住宅信息 /// private async void SetResidenceInfo() { //开启进度条 this.ShowProgressBar(); //获取住宅信息 var Pra = new GetResidenceInfoPra(); string resultData = await UserCenterLogic.GetResponseDataByRequestHttps("App/GetHomePager", false, Pra); if (resultData == null) { //关闭进度条 this.CloseProgressBar(ShowReLoadMode.YES); return; } //关闭进度条 this.CloseProgressBar(); var pageData = Newtonsoft.Json.JsonConvert.DeserializeObject(resultData); //暂时存储数据 var dicData = new Dictionary(); for (int i = 0; i < pageData.PageData.Count; i++) { dicData[pageData.PageData[i].Id] = pageData.PageData[i]; if (listResidenceSort.Contains(pageData.PageData[i].Id) == false) { //新添加的住宅 listResidenceSort.Add(pageData.PageData[i].Id); } } //保存顺序 string fullName = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.ResidenceSortFile); UserCenterLogic.SaveFileContent(fullName, listResidenceSort); HdlThreadLogic.Current.RunMain(() => { if (this.Parent == null) { return; } listView.Height = bodyFrameLayout.Height + Application.GetRealHeight(6); this.dicResidenceData = new Dictionary(); for (int i = 0; i < listResidenceSort.Count; i++) { var info = dicData[listResidenceSort[i]]; if (info.IsOthreShare == false) { //收集该账号所拥有的自己的住宅的数据 this.dicResidenceData[info.Id] = info; } this.AddRowLayout(info, i != listResidenceSort.Count - 1); } //调整列表控件的高度 this.listView.AdjustRealHeight(Application.GetRealHeight(23)); }); } #endregion #region ■ 添加住宅的行_______________________ /// /// 添加住宅的行 /// /// private void AddRowLayout(Common.ResponseEntity.ResidenceObj info, bool addLine) { var rowLayout = new RowLayoutControl(listView.rowSpace / 2); this.listView.AddChidren(rowLayout); //图标 var btnIcon = rowLayout.frameTable.AddLeftIcon(81); btnIcon.UnSelectedImagePath = "Item/ResidenceIcon.png"; //当前住宅 NormalViewControl btnHome = null; if (info.Id == Config.Instance.Home.Id) { //住宅名称 btnHome = rowLayout.frameTable.AddLeftCaption(info.Name, 800, 60, true); btnHome.TextSize = 15; btnHome.Y = Application.GetRealHeight(12) + rowLayout.chidrenYaxis; rowLayout.frameTable.AddChidren(btnHome, ChidrenBindMode.BindEventOnly); //当前住宅 var btnNowView = rowLayout.frameTable.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uNowResidence), 800, 49, true); btnNowView.Y = Application.GetRealHeight(72) + rowLayout.chidrenYaxis; btnNowView.TextSize = 12; btnNowView.TextColor = UserCenterColor.Current.TextGrayColor1; rowLayout.frameTable.AddChidren(btnNowView, ChidrenBindMode.BindEventOnly); } else { //住宅名称 btnHome = rowLayout.frameTable.AddLeftCaption(info.Name, 800, true); btnHome.TextSize = 15; } //右箭头 rowLayout.frameTable.AddRightArrow(); if (addLine == true) { //底线 rowLayout.frameTable.AddBottomLine(); } rowLayout.frameTable.ButtonClickEvent += (sender, e) => { if (info.Id != Config.Instance.Home.Id) { //确认切换当前住宅到「」? string msg = Language.StringByID(R.MyInternationalizationString.uSwitchResidenceMsg); if (msg.Contains("{0}") == true) { msg = string.Format(msg, info.Name); } this.ShowMassage(ShowMsgType.Confirm, msg, () => { HdlThreadLogic.Current.RunThread(async () => { ProgressBar.Show(); Config.Instance.HomeId = info.Id; Global.CreateHomeDirectory(info.Id); Config.Instance.Save(); //刷新个人中心的内存及线程 await UserCenterLogic.InitUserCenterMenmoryAndThread(); Room.InitAllRoom(); HdlThreadLogic.Current.RunMain(() => { //重新刷新列表 this.listView.RemoveAll(); this.SetResidenceInfo(); }); }); }); } else { //检测能否删除住宅 bool flage = this.CheckIsCanDeleteResidence(info); var form = new ResidenceManagementForm(); form.AddForm(flage); } }; if (info.IsOthreShare == true) { //分享的,不能更改 return; } //更改 var btnChanged = new NormalViewControl(Application.GetRealWidth(184), rowLayout.Height, false); btnChanged.BackgroundColor = 0xff4a4a4a; btnChanged.TextSize = 12; btnChanged.TextColor = UserCenterColor.Current.White; btnChanged.TextAlignment = TextAlignment.Center; btnChanged.TextID = R.MyInternationalizationString.uChanged1; rowLayout.AddRightView(btnChanged); btnChanged.ButtonClickEvent += (sender, e) => { //显示编辑名称界面 this.ShowEditorNameForm(info, btnHome); }; } #endregion #region ■ 编辑住宅名称_______________________ /// /// 显示编辑住宅名称界面 /// /// private void ShowEditorNameForm(Common.ResponseEntity.ResidenceObj info, NormalViewControl btnHome) { //生成一个弹窗画面 var dialogForm = new DialogInputControl(); //编辑住宅 dialogForm.SetTitleText(Language.StringByID(R.MyInternationalizationString.uChangedName)); //请输入住宅名称 dialogForm.SetTipText(Language.StringByID(R.MyInternationalizationString.uPleaseInputResidenceName)); dialogForm.Text = info.Name; //按下确认按钮 dialogForm.ComfirmClickEvent += ((textValue) => { if (textValue == string.Empty) { //请输入住宅名称 string msg = Language.StringByID(R.MyInternationalizationString.uPleaseInputResidenceName); this.ShowMassage(ShowMsgType.Error, msg); return; } //画面关闭 dialogForm.CloseDialog(); if (info.Name != textValue) { //编辑云端的住宅名称 this.EditorResidenceName(textValue, info); } }); } /// /// 编辑云端的住宅名称 /// /// /// /// private async void EditorResidenceName(string ResidenceName, Common.ResponseEntity.ResidenceObj info) { //检测能否保存住宅 if (this.CheckIsCanSaveResidence(info.Id, ResidenceName, true) == false) { return; } //开启进度条 this.ShowProgressBar(); var Pra = new EditorResidencePra(); Pra.HomeId = info.Id; Pra.Name = ResidenceName; if (info.IsOthreShare == true) { Pra.LoginAccessToken = UserCenterLogic.GetConnectMainToken(); } //编辑住宅 bool flage = await UserCenterLogic.GetResultStatuByRequestHttps("App/EditHome", info.IsOthreShare, Pra); if (flage == false) { //关闭进度条 this.CloseProgressBar(); return; } //刷新内存的住宅名 House.EditorHouseByHouseId(info.Id, ResidenceName); //重新刷新列表 this.listView.RemoveAll(); this.SetResidenceInfo(); } #endregion #region ■ 添加住宅名称_______________________ /// /// 显示添加住宅名称的画面 /// private void ShowAddNameForm() { //生成一个弹窗画面 var dialogForm = new DialogInputControl(); //创建住宅 dialogForm.SetTitleText(Language.StringByID(R.MyInternationalizationString.uCreatResidence)); //请输入住宅名称 dialogForm.SetTipText(Language.StringByID(R.MyInternationalizationString.uPleaseInputResidenceName)); //按下确认按钮 dialogForm.ComfirmClickEvent += ((textValue) => { if (textValue == string.Empty) { //请输入住宅名称 string msg = Language.StringByID(R.MyInternationalizationString.uPleaseInputResidenceName); this.ShowMassage(ShowMsgType.Error, msg); return; } //画面关闭 dialogForm.CloseDialog(); //保存住宅 this.AddNewResidence(textValue); }); } /// /// 向云端添加新的住宅 /// /// /// private async void AddNewResidence(string ResidenceName) { //检测能否保存住宅 if (this.CheckIsCanSaveResidence(string.Empty, ResidenceName, false) == false) { return; } //开启进度条 this.ShowProgressBar(); var Pra = new AddResidencePra(); Pra.Name = ResidenceName; //添加住宅 string resultData = await UserCenterLogic.GetResponseDataByRequestHttps("App/AddHome", false, Pra); if (resultData == null) { //关闭进度条 this.CloseProgressBar(); return; } var newInfo = Newtonsoft.Json.JsonConvert.DeserializeObject>(resultData); House.AddHouse(newInfo[0].Id, ResidenceName, 0); //重新刷新列表 this.listView.RemoveAll(); this.SetResidenceInfo(); } #endregion #region ■ 一般方法___________________________ /// /// 检测能否删除住宅 /// /// /// private bool CheckIsCanDeleteResidence(Common.ResponseEntity.ResidenceObj info) { if (this.dicResidenceData.Count == 1) { //如果此账号下只剩下唯一一个自己的住宅,当删除这个住宅时,提示不能删除 //因为最少要有一个住宅 if (this.dicResidenceData.ContainsKey(info.Id) == true) { return false; } } if (info.IsOthreShare == true) { //分享过来的住宅不能删除 return false; } return true; } /// /// 检测能否保存住宅 /// /// 住宅ID /// 住宅名 /// isEditor /// private bool CheckIsCanSaveResidence(string residenceId, string residenceName, bool isEditor) { //住宅名字重复检测 foreach (string strId in this.dicResidenceData.Keys) { if (residenceId != strId && residenceName == this.dicResidenceData[strId].Name) { //住宅名字已经存在 int msgId = isEditor == true ? R.MyInternationalizationString.EditZigbeeHome_Exist : R.MyInternationalizationString.AddZigbeeHome_Exist; string msg = Language.StringByID(msgId); this.ShowMassage(ShowMsgType.Error, msg); return false; } } return true; } #endregion #region ■ 界面重新激活事件___________________ /// /// 自身的上层界面关闭后,它自身处于最上层时,触发的事件 /// public override int FormActionAgainEvent() { foreach (string keys in dicResidenceData.Keys) { if (Config.Instance.HomeFilePathList.Contains($"House_{keys}.json") == false) { //保存顺序 listResidenceSort.Remove(keys); Room.CurrentRoom.SaveFloorSort(listResidenceSort); this.listView.RemoveAll(); //数据已经变更 HdlThreadLogic.Current.RunThread(() => { //重新设置住宅信息 this.SetResidenceInfo(); }); break; } } return 1; } #endregion #region ■ 结构体_____________________________ /// /// 访问住宅信息接口的启动参数(查询专用) /// public class GetResidenceInfoPra : IfacePraCommon { /// /// RequestVersion /// public string RequestVersion = Common.CommonPage.RequestVersion; /// /// ReqDto /// public TokenInfo ReqDto = new TokenInfo(); } /// /// 访问住宅信息接口的启动参数(查询专用) /// public class TokenInfo { /// /// LoginAccessToken /// public string LoginAccessToken = Common.Config.Instance.Token; /// /// PageSetting /// public PageSettingInfo PageSetting = new PageSettingInfo() { Page = 1, PageSize = 500 }; } /// /// 添加住宅的启动参数 /// public class AddResidencePra : IfacePraCommon { /// /// RequestVersion /// public string RequestVersion = Common.CommonPage.RequestVersion; /// /// LoginAccessToken /// public string LoginAccessToken = Common.Config.Instance.Token; /// /// Name /// public string Name = string.Empty; } /// /// 新住宅的信息 /// public class NewResidenceInfo { /// /// ZigbeeHomeGuid /// public string Id = string.Empty; } #endregion } }