xm
2020-12-10 3aa397ab145382935492b11c1f18c9634e69910b
ZigbeeApp/Shared/Phone/SmartSound/Forms/SmartSoundContentForDeviceChange.cs
New file
@@ -0,0 +1,609 @@
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),
            Language.StringByID(R.MyInternationalizationString.AC)
        };
        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.Height= 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;
                    case 2: // 空调
                        {
                            int n = 0;
                            for (int i = 0; i < CurrentRoom.DeviceList.Count; i++)
                            {
                                SmartSound.Device device = CurrentRoom.DeviceList[i];
                                //
                                if (device.DeviceType == 7)
                                {
                                    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, "确认删除该控制内容?", () =>
           {
               HdlThreadLogic.Current.RunThread(async () =>
                {
                    this.ShowProgressBar();
                    CurrentRoom.SceneList.Remove(scene);
                    string json = await postBatchEdit();
                    HdlThreadLogic.Current.RunMainInThread(() =>
                    {
                        LoadSceneView();
                        this.CloseProgressBar();
                    });
                });
           }, Language.StringByID(R.MyInternationalizationString.OkMsg));
        }
        /// <summary>
        /// 设备删除
        /// </summary>
        private void ShowDeviceDelectDialog(SmartSound.Device device)
        {
            this.ShowMassage(ShowMsgType.Confirm, "确认删除该控制内容?",  () =>
             {
                 HdlThreadLogic.Current.RunThread(async () =>
                 {
                     this.ShowProgressBar();
                     CurrentRoom.DeviceList.Remove(device);
                     string json = await postBatchEdit();
                     HdlThreadLogic.Current.RunMainInThread(() =>
                     {
                         RefreshFunctionListView();
                         this.CloseProgressBar();
                     });
                 });
             }, 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 = 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 = 14;
                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 = 14;
                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
    }
}