JLChen
2021-04-12 6992b9bc927550ed3ec82eff8ec4a5aa65e6fa63
2021-04-12 1.完善智能音箱功能。
3个文件已添加
11个文件已修改
1371 ■■■■■ 已修改文件
.vs/HDL_APP_Project/xs/UserPrefs.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Assets/Language.ini 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Resources/Language.ini 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Common/R.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/HttpServerRequest.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewAPI.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/Server/NewApiRes.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/HDL_ON.projitems 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI0-Public/PublicAssmebly.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/SmartSpeaker/SmartSpeakerListPage.cs 117 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/SmartSpeaker/SmartSpeakerRoomListPage.cs 309 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/SmartSpeaker/SmartSpeakerSelectDevicesPage (副本).cs 422 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/4-PersonalCenter/SmartSpeaker/SmartSpeakerSelectDevicesPage.cs 437 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -1,29 +1,32 @@
<Properties StartupConfiguration="{D998E133-F0DD-4760-BE3C-461632F54DA4}|Default">
  <MonoDevelop.Ide.ItemProperties.HDL-ON__iOS PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneDeviceTarget.00008030-00014C392121802E" />
  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs">
  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/UI/BindingResidence/BindingResidencePage.cs">
    <Files>
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/SmartSpeaker/SmartSpeakerListPage.cs" Line="194" Column="15" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs" Line="1" Column="1" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs" Line="315" Column="17" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/SmartSpeaker/SmartSpeakerSelectDevicesPage.cs" Line="84" Column="51" />
      <File FileName="HDL_ON/DAL/Server/HttpServerRequest.cs" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs" />
      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs" />
      <File FileName="HDL_ON/UI/BindingResidence/BindingResidencePage.cs" Line="121" Column="42" />
      <File FileName="HDL_ON/UI/BindingResidence/WellcomToHomeForm.cs" />
    </Files>
    <Pads>
      <Pad Id="ProjectPad">
        <State name="__root__">
          <Node name="HDL_APP_Project" expanded="True">
            <Node name="HDL_ON" expanded="True">
              <Node name="Common" expanded="True" />
              <Node name="DAL" expanded="True">
                <Node name="Server" expanded="True" />
              </Node>
              <Node name="UI" expanded="True">
                <Node name="BindingResidence" expanded="True">
                  <Node name="BindingResidencePage.cs" selected="True" />
                </Node>
                <Node name="UI2" expanded="True">
                  <Node name="4-PersonalCenter" expanded="True">
                    <Node name="SmartSpeaker" expanded="True" />
                    <Node name="PersonalCenterPageBLL.cs" selected="True" />
                  </Node>
                  <Node name="4-PersonalCenter" expanded="True" />
                </Node>
              </Node>
            </Node>
            <Node name="HDL-ON_Android" expanded="True" />
          </Node>
        </State>
      </Pad>
HDL-ON_Android/Assets/Language.ini
@@ -741,6 +741,7 @@
9065=Data management
9066=Remarks
9067=Remarks cannot be blank.
9068=Do you want to unbind?
    
10000=Invalid password, please log in again.
10001=Fail to request server, please try again later.
@@ -1630,6 +1631,7 @@
9065=数据管理
9066=备注
9067=备注不能为空
9068=是否解除绑定?
10000=无效登录密钥,请重新登录!
10001=请求服务器失败,请稍后再试!
HDL-ON_iOS/Resources/Language.ini
@@ -741,6 +741,7 @@
9065=Data management
9066=Remarks
9067=Remarks cannot be blank.
9068=Do you want to unbind?
    
10000=Invalid password, please log in again.
10001=Fail to request server, please try again later.
@@ -1630,6 +1631,7 @@
9065=数据管理
9066=备注
9067=备注不能为空
9068=是否解除绑定?
10000=无效登录密钥,请重新登录!
10001=请求服务器失败,请稍后再试!
HDL_ON/Common/R.cs
@@ -1329,7 +1329,10 @@
        /// å¤‡æ³¨ä¸èƒ½ä¸ºç©º
        /// </summary>
        public const int RemarksCannotBeBlank = 9067;
        /// <summary>
        /// æ˜¯å¦è§£é™¤ç»‘定?
        /// </summary>
        public const int DoYouWantToUnbind = 9068;
HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -2274,6 +2274,18 @@
        }
        /// <summary>
        /// è§£é™¤éŸ³ç®±ç»‘定
        /// </summary>
        /// <returns></returns>
        public ResponsePackNew UnbindSpeaker(string tokenId)
        {
            Dictionary<string, object> d = new Dictionary<string, object>();
            d.Add("tokenId", tokenId);
            var requestJson = HttpUtil.GetSignRequestJson(d);
            return HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_Speaker_Unbind, requestJson);
        }
        /// <summary>
        /// èŽ·å–éŸ³ç®±åˆ†é…çš„è®¾å¤‡å’Œåœºæ™¯åˆ—è¡¨
        /// </summary>
        /// <param name="getType">0 æ˜¯æŸ¥è¯¢å…¨éƒ¨ 1是查询设备 2是查询场景</param>
HDL_ON/DAL/Server/NewAPI.cs
@@ -245,6 +245,10 @@
        /// </summary>
        public const string API_POST_Speaker_Remark_Update = "/smart-footstone/app/token/update";
        /// <summary>
        /// è§£ç»‘音箱
        /// </summary>
        public const string API_POST_Speaker_Unbind = "/smart-footstone/app/token/delete";
        /// <summary>
        /// èŽ·å–éŸ³ç®±åˆ†é…çš„è®¾å¤‡å’Œåœºæ™¯åˆ—è¡¨
        /// </summary>
        public const string API_POST_Speaker_DeviceList_Get = "/home-wisdom/app/tokenRelation/list";
HDL_ON/DAL/Server/NewApiRes.cs
@@ -1546,10 +1546,10 @@
    }
    /// <summary>
    ///
    /// é…ç½®çš„语音设备和场景数据
    /// </summary>
    [System.Serializable]
    public class TargetInfo
    public class SpeakerTargetInfo
    {
        /// <summary>
        /// æŽ§åˆ¶çš„目标Id,云端的设备Id或者场景Id
@@ -1563,19 +1563,32 @@
        /// ç›®æ ‡åç§°
        /// </summary>
        public string targetName;
        /// <summary>
        /// æ‰©å±•参数当前rowview是否选中
        /// </summary>
        public bool IsSelect;
    }
    //[System.Serializable]
    //public class SpeakerTargetInfoRow: SpeakerTargetInfo
    //{
    //    /// <summary>
    //    /// å½“前rowview是否选中
    //    /// </summary>
    //    public bool isSelect;
    //}
    /// <summary>
    /// æ›´æ–°éŸ³ç®±æŽ§åˆ¶çš„设备和场景目标
    /// </summary>
    [System.Serializable]
        /// <summary>
        /// æ›´æ–°éŸ³ç®±æŽ§åˆ¶çš„设备和场景目标
        /// </summary>
        [System.Serializable]
    public class UpdateSpeakerDeviceListObj : SpeakerObj
    {
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public List<TargetInfo> targetInfos;
        public List<SpeakerTargetInfo> targetInfos;
    }
    /// <summary>
HDL_ON/HDL_ON.projitems
@@ -396,6 +396,9 @@
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Video\VideoMainView.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Video\ObjectClass.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\SmartSpeaker\SmartSpeakerListPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\SmartSpeaker\SmartSpeakerSelectDevicesPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\SmartSpeaker\SmartSpeakerRoomListPage.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\SmartSpeaker\SmartSpeakerSelectDevicesPage %28副本%29.cs" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="$(MSBuildThisFileDirectory)DAL\" />
HDL_ON/UI/UI0-Public/PublicAssmebly.cs
@@ -77,7 +77,7 @@
        /// ä¿å­˜æŒ‰é’®äº‹ä»¶éœ€è¦å°†
        /// </summary>
        /// <param name="callBackAction">回调函数</param>
        public void LoadDialog_EditParater(int titleId, string editParater, Action<string> callBackAction, int errorId_IsNullOrEmpty, int errorId_ContainsPar, List<string> baseList, bool encryption = false)
        public void LoadDialog_EditParater(int titleId, string editParater, Action<string> callBackAction, int errorId_IsNullOrEmpty, int errorId_ContainsPar, List<string> baseList, bool encryption = false, string confirmText = "")
        {
            Dialog dialog = new Dialog()
            {
@@ -210,6 +210,13 @@
                TextID = StringId.Confirm,
            };
            contentView.AddChidren(btnConfirm);
            //自定义btnConfirm标题
            if (!string.IsNullOrEmpty(confirmText))
            {
                btnConfirm.Text = confirmText;
            }
            int mRectCornerID = HDLUtils.RectCornerBottomRight;
            btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), mRectCornerID);
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
@@ -237,6 +237,7 @@
            contentView = new VerticalScrolViewLayout()
            {
                Y = Application.GetRealHeight(8) + personalInfoView.Bottom,
                Height = Application.GetRealHeight(400),
                ScrollEnabled = false
            };
HDL_ON/UI/UI2/4-PersonalCenter/SmartSpeaker/SmartSpeakerListPage.cs
@@ -2,16 +2,13 @@
using Shared;
using HDL_ON.UI.CSS;
using System.Collections.Generic;
using System.Threading;
using HDL_ON.DAL.Server;
namespace HDL_ON.UI
{
    /// <summary>
    /// æ™ºèƒ½éŸ³ç®±åˆ—表
    /// </summary>
    public class SmartSpeakerListPage : FrameLayout
    {
@@ -61,6 +58,7 @@
                Y = bodyY,
                Height = bodyView.Height - bodyY,
                BackgroundColor = CSS_Color.BackgroundColor,
            };
            bodyView.AddChidren(bodyScrolView);
@@ -243,7 +241,8 @@
            };
            view2.AddChidren(btnNickname);
            if (string.IsNullOrEmpty(speakerInfo.remark)) {
            if (string.IsNullOrEmpty(speakerInfo.remark))
            {
                btnNickname.TextID = StringId.SmartSpeaker;
            }
@@ -276,9 +275,7 @@
            btnNickname.MouseUpEventHandler += (sender, e) =>
            {
                new PublicAssmebly().LoadDialog_EditParater(StringId.Remarks, speakerInfo.remark, renameAction, StringId.RemarksCannotBeBlank, 0, new List<string>());
                //HDLCommon.Current.ShowEditTextDialog(speakerInfo.remark, renameAction, Language.StringByID(R.MyInternationalizationString.rename));
                new PublicAssmebly().LoadDialog_EditParater(StringId.Remarks, speakerInfo.remark, renameAction, StringId.RemarksCannotBeBlank, 0, new List<string>(),false, Language.StringByID(StringId.Save));
            };
            #endregion
@@ -323,8 +320,8 @@
            EventHandler<MouseEventArgs> eHandler = (sender, e) =>
            {
                //跳转页面
                GotoSpeakerManagementPage(speakerInfo);
                //跳转数据管理房间列表
                GotoPage(speakerInfo);
            };
            view3.MouseUpEventHandler += eHandler;
            btnDataTitle.MouseUpEventHandler += eHandler;
@@ -360,6 +357,19 @@
            };
            view4.AddChidren(btnUnbindRight);
            EventHandler<MouseEventArgs> eHandler4 = (sender, e) =>
            {
                Action okAction = () =>
                {
                    //解绑音箱
                    UnbindSpeaker(speakerInfo, rowView, lineView);
                };
                new ConfirmDialog().ShowDialog(StringId.Tip, StringId.DoYouWantToUnbind, okAction, null, StringId.Cancel, StringId.Confirm);
            };
            view4.MouseUpEventHandler += eHandler4;
            btnUnbindTitle.MouseUpEventHandler += eHandler4;
            btnUnbindRight.MouseUpEventHandler += eHandler4;
            #endregion
@@ -464,25 +474,86 @@
        }
        /// <summary>
        /// è·³è½¬AlexaDeviceListPage页面
        /// è¯·æ±‚解绑音箱
        /// </summary>
        /// <param name="speakerInfo"></param>
        void GotoSpeakerManagementPage(SpeakerInfo speakerInfo)
        /// <param name="speakerInfo">音箱参数</param>
        /// <param name="rowView">音箱rowView</param>
        /// <param name="lineView">填充的lineView</param>
        void UnbindSpeaker(SpeakerInfo speakerInfo, FrameLayout rowView, FrameLayout lineView)
        {
            ////没绑定忘记提示先绑定网关,禁止跳转
            //if (!UserConfig.Instance.CheckWhetherGatewayIdNotNull())
            //{
            //    Utlis.ShowAlertOnMainThread(Language.StringByID(R.MyInternationalizationString.PleaseBindTheGatewayFirst));
            //    return;
            //}
            if (speakerInfo == null || string.IsNullOrEmpty(speakerInfo.tokenId)) {
                Utlis.ShowTip(Language.StringByID(StringId.RequestFailedParameterException) + "(-3)");
            }
            ////跳转Alexa管理页面
            //AlexaDeviceListPage speakerInfoDeviceListPage = new AlexaDeviceListPage(speakerInfo);
            //UserMiddle.SettingPageView.AddChidren(speakerInfoDeviceListPage);
            //speakerInfoDeviceListPage.ShowPage();
            //UserMiddle.SettingPageView.PageIndex = UserMiddle.SettingPageView.ChildrenCount - 1;
            var waitPage = new Loading();
            bodyView.AddChidren(waitPage);
            waitPage.Start(Language.StringByID(StringId.PleaseWait));
            System.Threading.Tasks.Task.Run(() =>
            {
                try
                {
                    var revertObj = new HttpServerRequest().UnbindSpeaker(speakerInfo.tokenId);
                    if (revertObj.Code == StateCode.SUCCESS)
                    {
                        //解绑成功
                        Application.RunOnMainThread(() =>
                        {
                            //lineView
                            if (lineView != null)
                            {
                                lineView.RemoveFromParent();
                            }
                            //移除rowView
                            if (rowView != null)
                            {
                                rowView.RemoveFromParent();
                            }
                            //提示解绑成功
                            Utlis.ShowTip(Language.StringByID(StringId.UnbindEmailSuccess));
                        });
                    }
                    else
                    {
                        //提示错误
                        IMessageCommon.Current.ShowErrorInfoAlter(revertObj.Code);
                    }
                }
                catch
                {
                }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        if (waitPage != null)
                        {
                            waitPage.RemoveFromParent();
                            waitPage = null;
                        }
                    });
                }
            });
        }
        /// <summary>
        ///
        /// </summary>
        void GotoPage(SpeakerInfo speakerInfo)
        {
            var page = new SmartSpeakerRoomListPage(speakerInfo);
            MainPage.BasePageView.AddChidren(page);
            page.LoadPage();
            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
        }
    }
HDL_ON/UI/UI2/4-PersonalCenter/SmartSpeaker/SmartSpeakerRoomListPage.cs
New file
@@ -0,0 +1,309 @@
using System;
using Shared;
using HDL_ON.UI.CSS;
using System.Collections.Generic;
using System.Threading;
using HDL_ON.DAL.Server;
using HDL_ON.Entity;
namespace HDL_ON.UI
{
    /// <summary>
    /// æˆ¿é—´åˆ—表
    /// </summary>
    public class SmartSpeakerRoomListPage : FrameLayout
    {
        /// <summary>
        ///
        /// </summary>
        FrameLayout bodyView;
        /// <summary>
        /// å½“前
        /// </summary>
        VerticalScrolViewLayout bodyScrolView;
        /// <summary>
        /// éŸ³ç®±å‚æ•°
        /// </summary>
        SpeakerInfo speakerInfo;
        /// <summary>
        ///
        /// </summary>
        public SmartSpeakerRoomListPage(SpeakerInfo speakerInfo)
        {
            bodyView = this;
            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
            this.speakerInfo = speakerInfo;
        }
        /// <summary>
        ///
        /// </summary>
        public void LoadPage()
        {
            new TopViewDiv(bodyView, Language.StringByID(StringId.DataManagement)).LoadTopView();
            int bodyY = Application.GetRealHeight(64);
            bodyScrolView = new VerticalScrolViewLayout()
            {
                Y = bodyY,
                Height = bodyView.Height - bodyY,
                BackgroundColor = CSS_Color.BackgroundColor,
            };
            bodyView.AddChidren(bodyScrolView);
            //LoadSmartSpeakertListView(bodyScrolView);
            ShowRoomListView();
        }
        /// <summary>
        /// åŠ è½½æˆ¿é—´åˆ—è¡¨,统计分享的数据
        /// </summary>
        void ShowRoomListView()
        {
            bodyScrolView.RemoveAll();
            var titleView = new FrameLayout()
            {
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Height = Application.GetRealWidth(44),
            };
            bodyScrolView.AddChidren(titleView);
            var btnTitle = new Button()
            {
                X = Application.GetRealWidth(16),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextID = StringId.UseArea,
            };
            titleView.AddChidren(btnTitle);
            var btnLine = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = titleView.Height - Application.GetRealHeight(2),
                Width = Application.GetRealWidth(360),
                Height = Application.GetRealHeight(1),
                BackgroundColor = CSS_Color.DividingLineColor,
            };
            titleView.AddChidren(btnLine);
            //---------------------------------------------
            //未分配区域的功能
            List<Function> allFunctionList = FunctionList.List.GetDeviceFunctionList();
            //未分配区域的功能
            List<Function> unallocatedList = new List<Function>();
            //
            foreach (var function in allFunctionList)
            {
                function.roomIds.Remove(null);
                if (function.roomIds.Count > 0)
                {
                    //allocatedList.Add(function);
                }
                else
                {
                    unallocatedList.Add(function);
                }
            }
            //所有场景
            List<Scene> allSceneList = FunctionList.List.scenes;
            //全局场景场景
            List<Scene> globalSceneList = new List<Scene>();
            //找出所有的全局场景
            foreach (var mScene in allSceneList)
            {
                //roomIds大于0 ä»£è¡¨åˆ†é…åˆ°æˆ¿é—´
                mScene.roomIds.Remove(null);
                if (mScene.roomIds.Count > 0)
                {
                    //allocatedList.Add(function);
                }
                else
                {
                    globalSceneList.Add(mScene);
                }
            }
            try
            {
                //遍历加载房间分享个数统计状态RowLayout
                foreach (var room in SpatialInfo.CurrentSpatial.RoomList)
                {
                    AddRoomFunctionRowLayout(room);
                }
                //2020-12-16 åŠ è½½æœªåˆ†é…åŒºåŸŸåŠŸèƒ½RowLayout
                AddNoAreaFunctionRowLayout(unallocatedList, globalSceneList);
            }
            catch
            {
                Utlis.WriteLine("AddRoomFunctionRowLayout error");
            }
        }
        /// <summary>
        /// æ·»åŠ æˆ¿é—´åˆ—è¡¨
        /// </summary>
        /// <param name="mRoom"></param>
        void AddRoomFunctionRowLayout(Room mRoom)
        {
            ShowBaseRoomFunOrNoAreaFunRowLayout(mRoom, null, null);
        }
        /// <summary>
        /// æ·»åŠ æ— åŒºåŸŸçš„åŠŸèƒ½
        /// </summary>
        /// <param name="unallocatedList">未分配的所有功能列表</param>
        /// <param name="globalSceneList">全区域的场景</param>
        void AddNoAreaFunctionRowLayout(List<Function> unallocatedList, List<Scene> globalSceneList)
        {
            ShowBaseRoomFunOrNoAreaFunRowLayout(null, unallocatedList, globalSceneList);
        }
        /// <summary>
        /// 2020-12-17 é‡æ–°è°ƒæ•´
        /// æ·»åŠ æˆ¿é—´åˆ†äº«æˆ–è€…æ— åŒºåŸŸåˆ†é… ä¸ªæ•°ç»Ÿè®¡çŠ¶æ€çš„RowLayout
        /// </summary>
        /// <param name="room">如果房间为空,代表管理无分配区域</param>
        /// <param name="unallocatedList">管理无分配区域才有效</param>
        /// <param name="globalSceneList">全局场景</param>
        void ShowBaseRoomFunOrNoAreaFunRowLayout(Room mRoom, List<Function> unallocatedList, List<Scene> globalSceneList)
        {
            /// æˆ¿é—´æ‰€æœ‰åŠŸèƒ½å’Œè€…åœºæ™¯åˆ—è¡¨
            List<SpeakerTargetInfo> roomFunctionOrSceneList = new List<SpeakerTargetInfo>();
            var roomView = new RowLayout()
            {
                Height = Application.GetRealWidth(50),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                LineColor = CSS_Color.MainBackgroundColor,
            };
            bodyScrolView.AddChidren(roomView);
            var btnRoomName = new Button()
            {
                X = Application.GetRealWidth(16),
                Y = Application.GetRealWidth(10),
                Width = Application.GetRealWidth(330),
                Height = Application.GetRealWidth(30),
                TextAlignment = TextAlignment.CenterLeft,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = CSS_FontSize.TextFontSize,
                //Text = room.roomName,
            };
            roomView.AddChidren(btnRoomName);
            var btnRight = new Button()
            {
                X = Application.GetRealWidth(351),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(16),
                Height = Application.GetMinRealAverage(16),
                UnSelectedImagePath = "Public/Right.png",
            };
            roomView.AddChidren(btnRight);
            //如果房间为空,代表管理无分配区域
            if (mRoom != null)
            {
                //显示房间名
                btnRoomName.Text = mRoom.roomName;
                var mRoomFunctionList = mRoom.GetRoomFunctions(false);
                var mRoomSceneList = mRoom.GetRoomScenes(true);
                //遍历所有功能列表
                if (mRoomFunctionList != null)
                {
                    foreach (var fun in mRoomFunctionList)
                    {
                        roomFunctionOrSceneList.Add(new SpeakerTargetInfo()
                        {
                            targetId = fun.deviceId,
                            targetName = fun.name,
                            isDevice = true
                        });
                    }
                }
                //遍历所有场景列表
                if (mRoomSceneList != null)
                {
                    foreach (var roomScene in mRoomSceneList)
                    {
                        roomFunctionOrSceneList.Add(new SpeakerTargetInfo()
                        {
                            targetId = roomScene.userSceneId,
                            targetName = roomScene.name,
                            isDevice = false
                        });
                    }
                }
                //roomId = mRoom.roomId;
                //添加分割线
                var lineView = new LineView(roomView.Height - Application.GetRealHeight(1));
                roomView.AddChidren(lineView);
            }
            else
            {
                //显示无区域功能
                btnRoomName.TextID = StringId.NoAreaFunction;
                //遍历所有功能列表
                if (unallocatedList != null)
                {
                    foreach (var fun in unallocatedList)
                    {
                        roomFunctionOrSceneList.Add(new SpeakerTargetInfo()
                        {
                            targetId = fun.deviceId,
                            targetName = fun.name,
                            isDevice = true
                        });
                    }
                }
                //遍历所有场景列表
                if (globalSceneList != null)
                {
                    foreach (var roomScene in globalSceneList)
                    {
                        roomFunctionOrSceneList.Add(new SpeakerTargetInfo()
                        {
                            targetId = roomScene.userSceneId,
                            targetName = roomScene.name,
                            isDevice = false
                        });
                    }
                }
            }
            //点击调整事件
            EventHandler<MouseEventArgs> eHandler = (sender, e) =>
            {
                var page = new SmartSpeakerSelectDevicesPage(speakerInfo, roomFunctionOrSceneList);
                MainPage.BasePageView.AddChidren(page);
                page.LoadPage();
                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
            };
            roomView.MouseUpEventHandler = eHandler;
            btnRoomName.MouseUpEventHandler = eHandler;
            btnRight.MouseUpEventHandler = eHandler;
        }
    }
}
HDL_ON/UI/UI2/4-PersonalCenter/SmartSpeaker/SmartSpeakerSelectDevicesPage (¸±±¾).cs
New file
@@ -0,0 +1,422 @@
//using System;
//using Shared;
//using HDL_ON.UI.CSS;
//using System.Collections.Generic;
//using System.Threading;
//using HDL_ON.DAL.Server;
//namespace HDL_ON.UI
//{
//    /// <summary>
//    /// ç®¡ç†é…ç½®ç»™éŸ³ç®±çš„设备列表
//    /// </summary>
//    public class SmartSpeakerSelectDevicesPage : FrameLayout
//    {
//        /// <summary>
//        ///
//        /// </summary>
//        FrameLayout bodyView;
//        /// <summary>
//        /// å…¨é€‰æŒ‰é’®
//        /// </summary>
//        Button btnChooseAll;
//        /// <summary>
//        /// å½“前
//        /// </summary>
//        VerticalScrolViewLayout bodyScrolView;
//        ///// <summary>
//        ///// åº•部保存操作按钮
//        ///// </summary>
//        //Button btnSave;
//        /// <summary>
//        /// éŸ³ç®±å‚æ•°
//        /// </summary>
//        SpeakerInfo speakerInfo;
//        /// <summary>
//        /// è®¾å¤‡ã€åœºæ™¯åˆ—表
//        /// </summary>
//        List<SpeakerTargetInfo> targetInfoList = new List<SpeakerTargetInfo>();
//        ///// <summary>
//        ///// ç®¡ç†å½“前选择选的设备、场景列表
//        ///// </summary>
//        //List<SpeakerTargetInfo> selectInfoList = new List<SpeakerTargetInfo>();
//        /// <summary>
//        /// å½“前房间的设备和场景
//        /// </summary>
//        List<SpeakerTargetInfo> roomFunctionOrSceneList = new List<SpeakerTargetInfo>();
//        /// <summary>
//        ///
//        /// </summary>
//        /// <param name="speakerInfo"></param>
//        /// <param name="roomFunctionOrSceneList"></param>
//        public SmartSpeakerSelectDevicesPage(SpeakerInfo speakerInfo, List<SpeakerTargetInfo> roomFunctionOrSceneList)
//        {
//            bodyView = this;
//            bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
//            this.speakerInfo = speakerInfo;
//            this.roomFunctionOrSceneList = roomFunctionOrSceneList;
//        }
//        /// <summary>
//        ///
//        /// </summary>
//        public void LoadPage()
//        {
//            new TopViewDiv(bodyView, Language.StringByID(StringId.DataManagement)).LoadTopView();
//            //顶部全选按钮
//            var allRoomView = new FrameLayout()
//            {
//                Y = Application.GetRealHeight(64),
//                Height = Application.GetRealHeight(50),
//                BackgroundColor = CSS_Color.MainBackgroundColor,
//            };
//            bodyView.AddChidren(allRoomView);
//            Button btnAllRoomText = new Button()
//            {
//                X = Application.GetRealWidth(16),
//                Width = Application.GetRealWidth(280),
//                TextID = StringId.SelectedAll,
//                TextSize = CSS_FontSize.SubheadingFontSize,
//                TextColor = CSS_Color.FirstLevelTitleColor,
//                TextAlignment = TextAlignment.CenterLeft,
//            };
//            allRoomView.AddChidren(btnAllRoomText);
//            btnChooseAll = new Button()
//            {
//                X = Application.GetRealWidth(331),
//                Gravity = Gravity.CenterVertical,
//                Width = Application.GetMinRealAverage(28),
//                Height = Application.GetMinRealAverage(28),
//                UnSelectedImagePath = "Public/ChooseIcon.png",
//                SelectedImagePath = "Public/ChooseOnIcon.png",
//                IsSelected = true,
//            };
//            allRoomView.AddChidren(btnChooseAll);
//            allRoomView.AddChidren(new Button()
//            {
//                Gravity = Gravity.CenterHorizontal,
//                Y = Application.GetRealHeight(49),
//                Height = Application.GetMinReal(1),
//                Width = Application.GetRealWidth(343),
//                BackgroundColor = CSS_Color.DividingLineColor,
//            });
//            bodyScrolView = new VerticalScrolViewLayout()
//            {
//                Y = allRoomView.Bottom,
//                Height = Application.GetRealHeight(450),
//            };
//            bodyView.AddChidren(bodyScrolView);
//            var btnSave = new ConfirmButton()
//            {
//                Y = Application.GetRealHeight(519 + 64),
//                TextID = StringId.Save
//            };
//            bodyView.AddChidren(btnSave);
//            //全选按钮点击事件
//            LoadEvent_AllSharedDataChange(allRoomView, btnChooseAll);
//            LoadEvent_Save(btnSave);
//            GetDeviceAndSceneList();
//        }
//        /// <summary>
//        /// å…¨é€‰æŒ‰é’®ç‚¹å‡»äº‹ä»¶
//        /// </summary>
//        void LoadEvent_AllSharedDataChange(FrameLayout allRoomView, Button btnChooseAll)
//        {
//            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
//            {
//                btnChooseAll.IsSelected = !btnChooseAll.IsSelected;
//                if(selectInfoList == null)
//                {
//                    selectInfoList = new List<SpeakerTargetInfo>();
//                }
//                if (btnChooseAll.IsSelected)
//                {
//                    foreach (var info in roomFunctionOrSceneList)
//                    {
//                        selectInfoList.Add(info);
//                    }
//                }
//                RefreshListView();
//            };
//            btnChooseAll.MouseUpEventHandler = eventHandler;
//            allRoomView.MouseUpEventHandler = eventHandler;
//        }
//        /// <summary>
//        /// ä¿å­˜æŒ‰é’®ç‚¹å‡»äº‹ä»¶
//        /// </summary>
//        /// <param name="btnSave"></param>
//        void LoadEvent_Save(Button btnSave)
//        {
//            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
//            {
//                AddDevicesSceneList(targetInfoList);
//            };
//            btnSave.MouseUpEventHandler = eventHandler;
//        }
//        /// <summary>
//        ///
//        /// </summary>
//        /// <param name="updateList"></param>
//        void AddDevicesSceneList(List<SpeakerTargetInfo> updateList)
//        {
//            var waitPage = new Loading();
//            bodyView.AddChidren(waitPage);
//            waitPage.Start(Language.StringByID(StringId.PleaseWait));
//            System.Threading.Tasks.Task.Run(() =>
//            {
//                try
//                {
//                    var updateSpeakerDeviceListObj = new UpdateSpeakerDeviceListObj()
//                    {
//                        homeId = speakerInfo.homeId,
//                        tokenId = speakerInfo.tokenId,
//                        targetInfos = updateList
//                    };
//                    var revertObj = new HttpServerRequest().UpdateSpeakerDeviceList(updateSpeakerDeviceListObj);
//                    if (revertObj.Code == StateCode.SUCCESS)
//                    {
//                        Application.RunOnMainThread(() =>
//                        {
//                            //保存成功、页面关闭
//                            Utlis.ShowTip(Language.StringByID(StringId.SavedSuccessfully));
//                            if (bodyView != null)
//                            {
//                                bodyView.RemoveFromParent();
//                            }
//                        });
//                    }
//                    else
//                    {
//                        //提示错误
//                        IMessageCommon.Current.ShowErrorInfoAlter(revertObj.Code);
//                    }
//                }
//                catch
//                {
//                }
//                finally
//                {
//                    Application.RunOnMainThread(() =>
//                    {
//                        if (waitPage != null)
//                        {
//                            waitPage.RemoveFromParent();
//                            waitPage = null;
//                        }
//                    });
//                }
//            });
//        }
//        /// <summary>
//        /// åŠ è½½æˆ¿é—´çš„è®¾å¤‡å’Œåœºæ™¯åˆ—è¡¨
//        /// </summary>
//        void GetDeviceAndSceneList()
//        {
//            bodyScrolView.RemoveAll();
//            var waitPage = new Loading();
//            bodyView.AddChidren(waitPage);
//            waitPage.Start(Language.StringByID(StringId.PleaseWait));
//            System.Threading.Tasks.Task.Run(() =>
//            {
//                try
//                {
//                    var revertObj = new HttpServerRequest().GetSpeakerDeviceList(0, speakerInfo.tokenId);
//                    if (revertObj.Code == StateCode.SUCCESS)
//                    {
//                        var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SpeakerTargetInfo>>(revertObj.Data.ToString());
//                        Application.RunOnMainThread(() => {
//                            if (list != null && list.Count > 0)
//                            {
//                                targetInfoList = list;
//                            }
//                            else
//                            {
//                                targetInfoList = new List<SpeakerTargetInfo>();
//                            }
//                            RefreshListView();
//                        });
//                    }
//                    else
//                    {
//                        //提示错误
//                        IMessageCommon.Current.ShowErrorInfoAlter(revertObj.Code);
//                    }
//                }
//                catch
//                {
//                }
//                finally
//                {
//                    Application.RunOnMainThread(() =>
//                    {
//                        if (waitPage != null)
//                        {
//                            waitPage.RemoveFromParent();
//                            waitPage = null;
//                        }
//                    });
//                }
//            });
//        }
//        /// <summary>
//        ///
//        /// </summary>
//        void RefreshListView()
//        {
//            bodyScrolView.RemoveAll();
//            if (roomFunctionOrSceneList == null) return;
//            foreach (var roomData in roomFunctionOrSceneList)
//            {
//                AddRowView(roomData);
//            }
//        }
//       /// <summary>
//       ///
//       /// </summary>
//       /// <param name="info"></param>
//        void AddRowView(SpeakerTargetInfo info)
//        {
//            var roomView = new FrameLayout()
//            {
//                Height = Application.GetRealHeight(50),
//                BackgroundColor = CSS_Color.MainBackgroundColor,
//                Tag = "row"
//            };
//            bodyScrolView.AddChidren(roomView);
//            Button btnRoomText = new Button()
//            {
//                X = Application.GetRealWidth(16),
//                Width = Application.GetRealWidth(280),
//                TextSize = CSS_FontSize.SubheadingFontSize,
//                TextColor = CSS_Color.FirstLevelTitleColor,
//                TextAlignment = TextAlignment.CenterLeft,
//                Text = info.targetName,
//            };
//            roomView.AddChidren(btnRoomText);
//            Button btnChoose = new Button()
//            {
//                X = Application.GetRealWidth(331),
//                Gravity = Gravity.CenterVertical,
//                Width = Application.GetMinRealAverage(28),
//                Height = Application.GetMinRealAverage(28),
//                UnSelectedImagePath = "Public/ChooseIcon.png",
//                SelectedImagePath = "Public/ChooseOnIcon.png",
//                Tag = "ChooseIcon"
//            };
//            roomView.AddChidren(btnChoose);
//            var targetData = selectInfoList.Find((obj) => obj.targetId == info.targetId);
//            if (targetData != null)
//            {
//                btnChoose.IsSelected = true;
//                //刷新属于当前房间的分享统计
//                //funs_New.Add(shareData);
//            }
//            else
//            {
//                if (btnChooseAll.IsSelected)
//                    btnChooseAll.IsSelected = false;
//            }
//            var btnLine = new Button()
//            {
//                Gravity = Gravity.CenterHorizontal,
//                //Y = Application.GetRealHeight(49),
//                Height = Application.GetRealHeight(1),
//                Width = Application.GetRealWidth(343),
//                BackgroundColor = CSS_Color.DividingLineColor,
//            };
//            bodyScrolView.AddChidren(btnLine);
//            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
//            {
//                btnChoose.IsSelected = !btnChoose.IsSelected;
//                var sd = selectInfoList.Find((obj) => obj.targetId == info.targetId);
//                if (btnChoose.IsSelected)
//                {
//                    try
//                    {
//                        if (null == sd)
//                        {
//                            selectInfoList.Add(info);
//                        }
//                        btnChooseAll.IsSelected = true;
//                        foreach (var f in roomFunctionOrSceneList)
//                        {
//                            if (selectInfoList.Find((obj) => obj.targetId == f.targetId) == null)
//                            {
//                                btnChooseAll.IsSelected = false;
//                                break;
//                            }
//                        }
//                    }
//                    catch (Exception ex)
//                    {
//                        MainPage.Log($"Evhaaa {ex.Message}");
//                    }
//                }
//                else
//                {
//                    if (null != sd)
//                    {
//                        selectInfoList.Remove(sd);
//                    }
//                    btnChooseAll.IsSelected = false;
//                }
//            };
//            btnChoose.MouseUpEventHandler = eventHandler;
//            roomView.MouseUpEventHandler = eventHandler;
//            btnRoomText.MouseUpEventHandler = eventHandler;
//        }
//    }
//}
HDL_ON/UI/UI2/4-PersonalCenter/SmartSpeaker/SmartSpeakerSelectDevicesPage.cs
New file
@@ -0,0 +1,437 @@
using System;
using Shared;
using HDL_ON.UI.CSS;
using System.Collections.Generic;
using System.Threading;
using HDL_ON.DAL.Server;
namespace HDL_ON.UI
{
    /// <summary>
    /// ç®¡ç†é…ç½®ç»™éŸ³ç®±çš„设备列表
    /// </summary>
    public class SmartSpeakerSelectDevicesPage : FrameLayout
    {
        /// <summary>
        ///
        /// </summary>
        FrameLayout bodyView;
        /// <summary>
        /// å…¨é€‰æŒ‰é’®
        /// </summary>
        Button btnChooseAll;
        /// <summary>
        /// å½“前
        /// </summary>
        VerticalScrolViewLayout bodyScrolView;
        ///// <summary>
        ///// åº•部保存操作按钮
        ///// </summary>
        //Button btnSave;
        /// <summary>
        /// éŸ³ç®±å‚æ•°
        /// </summary>
        SpeakerInfo speakerInfo;
        /// <summary>
        /// è®¾å¤‡ã€åœºæ™¯åˆ—表
        /// </summary>
        List<SpeakerTargetInfo> targetInfoList = new List<SpeakerTargetInfo>();
        /// <summary>
        /// å½“前房间的设备和场景
        /// </summary>
        List<SpeakerTargetInfo> roomFunctionOrSceneList = new List<SpeakerTargetInfo>();
        /// <summary>
        ///
        /// </summary>
        /// <param name="speakerInfo"></param>
        /// <param name="roomFunctionOrSceneList"></param>
        public SmartSpeakerSelectDevicesPage(SpeakerInfo speakerInfo, List<SpeakerTargetInfo> roomFunctionOrSceneList)
        {
            bodyView = this;
            bodyView.BackgroundColor = CSS_Color.MainBackgroundColor;
            this.speakerInfo = speakerInfo;
            this.roomFunctionOrSceneList = roomFunctionOrSceneList;
        }
        /// <summary>
        ///
        /// </summary>
        public void LoadPage()
        {
            new TopViewDiv(bodyView, Language.StringByID(StringId.DataManagement)).LoadTopView();
            //顶部全选按钮
            var allRoomView = new FrameLayout()
            {
                Y = Application.GetRealHeight(64),
                Height = Application.GetRealHeight(50),
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            bodyView.AddChidren(allRoomView);
            Button btnAllRoomText = new Button()
            {
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(280),
                TextID = StringId.SelectedAll,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextAlignment = TextAlignment.CenterLeft,
            };
            allRoomView.AddChidren(btnAllRoomText);
            btnChooseAll = new Button()
            {
                X = Application.GetRealWidth(331),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(28),
                Height = Application.GetMinRealAverage(28),
                UnSelectedImagePath = "Public/ChooseIcon.png",
                SelectedImagePath = "Public/ChooseOnIcon.png",
                //IsSelected = true,
            };
            allRoomView.AddChidren(btnChooseAll);
            allRoomView.AddChidren(new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealHeight(49),
                Height = Application.GetMinReal(1),
                Width = Application.GetRealWidth(343),
                BackgroundColor = CSS_Color.DividingLineColor,
            });
            bodyScrolView = new VerticalScrolViewLayout()
            {
                Y = allRoomView.Bottom,
                Height = Application.GetRealHeight(450),
            };
            bodyView.AddChidren(bodyScrolView);
            var btnSave = new ConfirmButton()
            {
                Y = Application.GetRealHeight(519 + 64),
                TextID = StringId.Save
            };
            bodyView.AddChidren(btnSave);
            //全选按钮点击事件
            LoadEvent_AllSharedDataChange(allRoomView, btnChooseAll);
            LoadEvent_Save(btnSave);
            GetDeviceAndSceneList();
        }
        /// <summary>
        /// å…¨é€‰æŒ‰é’®ç‚¹å‡»äº‹ä»¶
        /// </summary>
        void LoadEvent_AllSharedDataChange(FrameLayout allRoomView, Button btnChooseAll)
        {
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                btnChooseAll.IsSelected = !btnChooseAll.IsSelected;
                var IsSelected = btnChooseAll.IsSelected;
                foreach (var info in roomFunctionOrSceneList)
                {
                    info.IsSelect = IsSelected;
                }
                RefreshListView();
            };
            btnChooseAll.MouseUpEventHandler = eventHandler;
            allRoomView.MouseUpEventHandler = eventHandler;
        }
        /// <summary>
        /// ä¿å­˜æŒ‰é’®ç‚¹å‡»äº‹ä»¶
        /// </summary>
        /// <param name="btnSave"></param>
        void LoadEvent_Save(Button btnSave)
        {
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                AddDevicesSceneList(targetInfoList);
            };
            btnSave.MouseUpEventHandler = eventHandler;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="updateList"></param>
        void AddDevicesSceneList(List<SpeakerTargetInfo> updateList)
        {
            var waitPage = new Loading();
            bodyView.AddChidren(waitPage);
            waitPage.Start(Language.StringByID(StringId.PleaseWait));
            System.Threading.Tasks.Task.Run(() =>
            {
                try
                {
                    //查找需要选中的目标
                    foreach (var info in roomFunctionOrSceneList)
                    {
                        var targetData = updateList.Find((obj) => obj.targetId == info.targetId);
                        if (info.IsSelect)
                        {
                            if (targetData == null)
                            {
                                updateList.Add(info);
                            }
                        }
                        else
                        {
                            if (targetData != null)
                            {
                                updateList.Remove(targetData);
                            }
                        }
                    }
                    var updateSpeakerDeviceListObj = new UpdateSpeakerDeviceListObj()
                    {
                        homeId = speakerInfo.homeId,
                        tokenId = speakerInfo.tokenId,
                        targetInfos = updateList
                    };
                    var revertObj = new HttpServerRequest().UpdateSpeakerDeviceList(updateSpeakerDeviceListObj);
                    if (revertObj.Code == StateCode.SUCCESS)
                    {
                        Application.RunOnMainThread(() =>
                        {
                            //保存成功、页面关闭
                            Utlis.ShowTip(Language.StringByID(StringId.SavedSuccessfully));
                            if (bodyView != null)
                            {
                                bodyView.RemoveFromParent();
                            }
                        });
                    }
                    else
                    {
                        //提示错误
                        IMessageCommon.Current.ShowErrorInfoAlter(revertObj.Code);
                    }
                }
                catch
                {
                }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        if (waitPage != null)
                        {
                            waitPage.RemoveFromParent();
                            waitPage = null;
                        }
                    });
                }
            });
        }
        /// <summary>
        /// åŠ è½½æˆ¿é—´çš„è®¾å¤‡å’Œåœºæ™¯åˆ—è¡¨
        /// </summary>
        void GetDeviceAndSceneList()
        {
            bodyScrolView.RemoveAll();
            var waitPage = new Loading();
            bodyView.AddChidren(waitPage);
            waitPage.Start(Language.StringByID(StringId.PleaseWait));
            System.Threading.Tasks.Task.Run(() =>
            {
                try
                {
                    var revertObj = new HttpServerRequest().GetSpeakerDeviceList(0, speakerInfo.tokenId);
                    if (revertObj.Code == StateCode.SUCCESS)
                    {
                        var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SpeakerTargetInfo>>(revertObj.Data.ToString());
                        if (list != null && list.Count > 0)
                        {
                            targetInfoList = list;
                        }
                        else
                        {
                            targetInfoList = new List<SpeakerTargetInfo>();
                        }
                        //默认全选
                        bool isSelectAll = true;
                        //查找需要选中的目标
                        foreach (var info in roomFunctionOrSceneList)
                        {
                            var targetData = targetInfoList.Find((obj) => obj.targetId == info.targetId);
                            if(targetData == null)
                            {
                                info.IsSelect = false;
                                //有一个没选择则全选设置为false
                                isSelectAll = false;
                            }
                            else
                            {
                                info.IsSelect = true;
                            }
                        }
                        Application.RunOnMainThread(() => {
                            //设置当前全选
                            btnChooseAll.IsSelected = isSelectAll;
                            RefreshListView();
                        });
                    }
                    else
                    {
                        //提示错误
                        IMessageCommon.Current.ShowErrorInfoAlter(revertObj.Code);
                    }
                }
                catch
                {
                }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        if (waitPage != null)
                        {
                            waitPage.RemoveFromParent();
                            waitPage = null;
                        }
                    });
                }
            });
        }
        /// <summary>
        /// RefreshListView
        /// </summary>
        void RefreshListView()
        {
            bodyScrolView.RemoveAll();
            if (roomFunctionOrSceneList == null) return;
            foreach (var roomData in roomFunctionOrSceneList)
            {
                AddRowView(roomData);
            }
        }
        /// <summary>
        /// AddRowView
        /// </summary>
        /// <param name="info"></param>
        void AddRowView(SpeakerTargetInfo info)
        {
            var roomView = new FrameLayout()
            {
                Height = Application.GetRealHeight(50),
                BackgroundColor = CSS_Color.MainBackgroundColor,
                Tag = "row"
            };
            bodyScrolView.AddChidren(roomView);
            Button btnRoomText = new Button()
            {
                X = Application.GetRealWidth(16),
                Width = Application.GetRealWidth(280),
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextAlignment = TextAlignment.CenterLeft,
                Text = info.targetName,
            };
            roomView.AddChidren(btnRoomText);
            Button btnChoose = new Button()
            {
                X = Application.GetRealWidth(331),
                Gravity = Gravity.CenterVertical,
                Width = Application.GetMinRealAverage(28),
                Height = Application.GetMinRealAverage(28),
                UnSelectedImagePath = "Public/ChooseIcon.png",
                SelectedImagePath = "Public/ChooseOnIcon.png",
                Tag = "ChooseIcon"
            };
            roomView.AddChidren(btnChoose);
            btnChoose.IsSelected = info.IsSelect;
            var btnLine = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                //Y = Application.GetRealHeight(49),
                Height = Application.GetRealHeight(1),
                Width = Application.GetRealWidth(343),
                BackgroundColor = CSS_Color.DividingLineColor,
            };
            bodyScrolView.AddChidren(btnLine);
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                btnChoose.IsSelected = !btnChoose.IsSelected;
                info.IsSelect = btnChoose.IsSelected;
                //1.如果点击选择,判断是否需要设置全选
                if (btnChoose.IsSelected)
                {
                    //1.1 é»˜è®¤å…¨é€‰
                    bool isSelectAll = true;
                    foreach (var targetInfo in roomFunctionOrSceneList)
                    {
                        if(targetInfo.IsSelect == false)
                        {
                            //1.2 æœ‰ä¸€ä¸ªè¿˜æ²¡é€‰ä¸­å°±é€€å‡ºï¼Œæ— éœ€é€‰ä¸­å…¨é€‰æŒ‰é’®
                            isSelectAll = false;
                            break;
                        }
                    }
                    if (isSelectAll)
                    {
                        btnChooseAll.IsSelected = true;
                    }
                }
                else
                {
                    //取消全选
                    if (btnChooseAll.IsSelected)
                    {
                        btnChooseAll.IsSelected = false;
                    }
                }
            };
            btnChoose.MouseUpEventHandler = eventHandler;
            roomView.MouseUpEventHandler = eventHandler;
            btnRoomText.MouseUpEventHandler = eventHandler;
        }
    }
}