HDL Home App 第二版本 旧平台金堂用 正在使用
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindTargetsPage.cs
New file
@@ -0,0 +1,1189 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Shared.Common;
using ZigBee.Device;
using static ZigBee.Device.BindObj;
using static ZigBee.Device.Panel;
namespace Shared.Phone.UserCenter.DeviceBind
{
  /// <summary>
  /// 普通面板的绑定界面【可绑定多个目标】
  /// </summary>
  public class BindTargetsPage : BindCommonLayout
  {
    /// 构造函数
    /// </summary>
    /// <param name="doorLock"></param>
    public BindTargetsPage(ZigBee.Device.Panel key)
    {
      this.currentKey = key;
    }
    #region 变量申明
    /// <summary>
    /// 当前按键对象
    /// </summary>
    ZigBee.Device.Panel currentKey;
    /// <summary>
    /// 显示被绑定设备或场景的view
    /// </summary>
    VerticalFrameRefreshControl midVerticalRefreshLayout;
    /// <summary>
    /// 按键当前簇ID
    /// </summary>
    int currentClusterID = 0;
    /// <summary>
    /// 空数据时的图片
    /// </summary>
    Button entryStatusPic;
    /// <summary>
    /// 空数据的提示
    /// </summary>
    Button btnPicTip;
    /// <summary>
    /// 按键绑定表通知
    /// </summary>
    Action<List<BindListResponseObj>> action;
    /// <summary>
    /// 设备被绑定通知
    /// </summary>
    Action<List<BindListResponseObj>> devicBindAction;
    /// <summary>
    /// 本地设备列表
    /// </summary>
    private System.Collections.Generic.List<CommonDevice> localDeviceList = new System.Collections.Generic.List<CommonDevice>();
    /// <summary>
    /// 本地场景列表
    /// </summary>
    private System.Collections.Generic.List<SceneUI> scList = new System.Collections.Generic.List<SceneUI> { };
    /// <summary>
    /// 空数据显示布局
    /// </summary>
    FrameLayout blankFrameLayout;
    /// <summary>
    /// 动态获取按键支持的模式大类型
    /// </summary>
    List<int> typeModeList;
    /// <summary>
    /// 是否支持读取
    /// </summary>
    bool IsRead = false;
    #endregion
    /// <summary>
    /// 初始化按键数据
    /// </summary>
    void InitListInfo()
    {
      System.Threading.Tasks.Task.Run(async () =>
      {
        try
        {
          localDeviceList.Clear();
          scList.Clear();
                //获取本地设备列表
                foreach (var dev in Shared.Common.LocalDevice.Current.listAllDevice)
          {
            localDeviceList.Add(dev);
          }
                //获取本地场景列表
                scList = HdlSceneLogic.Current.GetAllRoomSceneList();
                //动态获取按键支持的大类
                typeModeList = await GetTypeMode();
                #region 读取面板当前模式
                //读取按键当前模式
                var tempDeata = HdlDeviceBindLogic.Current.ReadPanelConfigureInfoAsync(currentKey);
          if (tempDeata != null && tempDeata.deviceStatusReportData != null)
          {
            foreach (var attr in tempDeata.deviceStatusReportData.AttriBute)
            {
              currentKey.panelMode = attr.AttriButeData;
              if (currentKey.panelMode == 1)
              {
                currentClusterID = 6;
              }
              else if (currentKey.panelMode == 100 || currentKey.panelMode == 101 || currentKey.panelMode == 102)
              {
                currentClusterID = 6;
              }
              else if (currentKey.panelMode == 200 || currentKey.panelMode == 201 || currentKey.panelMode == 203 || currentKey.panelMode == 204 || currentKey.panelMode == 205)
              {
                currentClusterID = 8;
              }
              else if (currentKey.panelMode == 300 || currentKey.panelMode == 301 || currentKey.panelMode == 302 || currentKey.panelMode == 303 || currentKey.panelMode == 304)
              {
                currentClusterID = 258;
              }
                    //读取按键当前绑定目标
                    GetDeviceBindResponseAllData getBindList = null;
              if (IsRead)
              {
                getBindList = HdlDeviceBindLogic.Current.GetDeviceBindAsync(currentKey);
                var bindDeviceListTemp = new System.Collections.Generic.List<BindListResponseObj> { };
                var bindSceneListTemp = new System.Collections.Generic.List<BindListResponseObj> { };
                if (getBindList != null && getBindList.getAllBindResponseData != null)
                {
                  currentKey.bindList.Clear();
                  foreach (var b in getBindList.getAllBindResponseData.BindList)
                  {
                    if (b.BindCluster == currentClusterID)
                    {
                      if (b.BindCluster == 6)
                      {
                        if (b.BindType == 2)
                        {
                          bindSceneListTemp.Add(b);
                        }
                        else
                        {
                          bindDeviceListTemp.Add(b);
                        }
                      }
                      else
                      {
                        if (currentClusterID == 8)
                        {
                          if (b.BindCluster == 8)
                          {
                            currentKey.bindList.Add(b);
                          }
                        }
                        else
                        {
                          currentKey.bindList.Add(b);
                        }
                      }
                    }
                  }
                }
                else
                {
                  Application.RunOnMainThread(() =>
                        {
                                CommonPage.Loading.Hide();
                                midVerticalRefreshLayout.EndHeaderRefreshing();
                                new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime) + "(" + "5007" + ")", Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
                                return;
                              });
                }
                if (currentKey.panelMode == 1)
                {
                  currentKey.bindList = bindSceneListTemp;
                  currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddScene);
                }
                else if (currentKey.panelMode == 100 || currentKey.panelMode == 101 || currentKey.panelMode == 102)
                {
                  currentKey.bindList = bindDeviceListTemp;
                  currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddSwitch);
                }
                else if (currentKey.panelMode == 200 || currentKey.panelMode == 201 || currentKey.panelMode == 203 || currentKey.panelMode == 204 || currentKey.panelMode == 205)
                {
                  currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddDimmer);
                }
                else if (currentKey.panelMode == 300 || currentKey.panelMode == 301 || currentKey.panelMode == 302 || currentKey.panelMode == 303 || currentKey.panelMode == 304)
                {
                  currentKey.currentKeySelectModeText = Language.StringByID(R.MyInternationalizationString.AddCurtain);
                }
              }
              currentKey.ReSave();
            }
                  #endregion
                  Application.RunOnMainThread(() =>
                  {
                    RefreshList();
                    CommonPage.Loading.Hide();
                    midVerticalRefreshLayout.EndHeaderRefreshing();
                  });
          }
          else
          {
            Application.RunOnMainThread(() =>
                  {
                    CommonPage.Loading.Hide();
                    midVerticalRefreshLayout.EndHeaderRefreshing();
                    new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime) + "(" + "108_ 6533" + ")", Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
                  });
            return;
          }
        }
        catch { }
      });
    }
    /// <summary>
    /// 按键绑定页显示
    /// </summary>
    public void Show()
    {
      #region TopFrameLayout
      this.TopFrameLayout(this, Language.StringByID(R.MyInternationalizationString.PanelBindTargets));
      EventHandler<MouseEventArgs> eHandlerBack = (sender, e) =>
      {
        RemoveFromParent();
      };
      this.btnBack.MouseUpEventHandler += eHandlerBack;
      this.btnBackFrameLayout.MouseUpEventHandler += eHandlerBack;
      this.MidFrameLayout(this);
      var btnAddFrameLayout = new FrameLayout()
      {
        X = Application.GetRealWidth(772 - 58),
        Width = Application.GetRealWidth(192),
      };
      this.titleFrameLayout.AddChidren(btnAddFrameLayout);
      var btnBindAdd = new Button
      {
        X = Application.GetRealWidth(62),
        Height = Application.GetMinReal(72),
        Width = Application.GetMinReal(72),
        UnSelectedImagePath = "BindPic/BindAdd.png",
      };
      btnAddFrameLayout.AddChidren(btnBindAdd);
      #endregion
      #region eHandlerAdd
      EventHandler<MouseEventArgs> eHandlerAdd = (sender, e) =>
      {
        if (currentKey.bindList.Count != 0)
        {
          if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddScene))
          {
            currentClusterID = 6;
            currentKey.panelMode = 1;
            var addScenePage = new Shared.Phone.UserCenter.DeviceBind.AddScenePage(currentKey);
            Shared.Phone.UserView.HomePage.Instance.AddChidren(addScenePage);
            Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
            addScenePage.Show();
            Action<List<BindListResponseObj>> action = (obj) =>
                  {
                    currentKey.bindList = obj;
                    RefreshList();
                  };
            addScenePage.action += action;
          }
          if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddSwitch))
          {
            currentClusterID = 6;
            var addDevicePage = new Shared.Phone.UserCenter.DeviceBind.AddDevicePage(currentKey, "AddSwitch");
            Shared.Phone.UserView.HomePage.Instance.AddChidren(addDevicePage);
            Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
            addDevicePage.Show();
            devicBindAction = (obj) =>
                  {
                    currentKey.bindList = obj;
                    RefreshList();
                  };
            addDevicePage.actionAddDevicePage += devicBindAction;
          }
          if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddDimmer))
          {
            currentClusterID = 8;
            var addDevicePage = new Shared.Phone.UserCenter.DeviceBind.AddDevicePage(currentKey, "AddDimmer");
            Shared.Phone.UserView.HomePage.Instance.AddChidren(addDevicePage);
            Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
            addDevicePage.Show();
            Action<List<BindListResponseObj>> action = (obj) =>
                  {
                    currentKey.bindList = obj;
                    RefreshList();
                  };
            addDevicePage.actionAddDevicePage += action;
          }
          if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddCurtain))
          {
            currentClusterID = 258;
            var addDevicePage = new Shared.Phone.UserCenter.DeviceBind.AddDevicePage(currentKey, "AddCurtain");
            Shared.Phone.UserView.HomePage.Instance.AddChidren(addDevicePage);
            Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
            addDevicePage.Show();
            Action<List<BindListResponseObj>> action = (obj) =>
                  {
                    currentKey.bindList = obj;
                    RefreshList();
                  };
            addDevicePage.actionAddDevicePage += action;
          }
        }
        else
        {
          currentKey.panelMode = 65535;
          SideslipFramelayout();
        }
      };
      btnBindAdd.MouseDownEventHandler += eHandlerAdd;
      btnAddFrameLayout.MouseDownEventHandler += eHandlerAdd;
      #endregion
      CommonPage.Loading.Start("");
      middleFrameLayout();
      if (currentKey.bindList.Count == 0)
      {
        IsRead = true;
      }
      else
      {
        IsRead = false;
      }
      InitListInfo();
    }
    /// <summary>
    /// 中部布局
    /// </summary>
    void middleFrameLayout()
    {
      midVerticalRefreshLayout = new VerticalFrameRefreshControl(29)
      {
        Height = this.midFrameLayout.Height + 1,
      };
      this.midFrameLayout.AddChidren(midVerticalRefreshLayout);
      midVerticalRefreshLayout.BeginHeaderRefreshingAction += () =>
      {
        midVerticalRefreshLayout.BeginHeaderRefreshing();
        IsRead = true;
        InitListInfo();
      };
      BlankPicUI();
    }
    /// <summary>
    /// 空数据UI显示
    /// </summary>
    void BlankPicUI()
    {
      blankFrameLayout = new FrameLayout
      {
      };
      midVerticalRefreshLayout.AddChidren(blankFrameLayout);
      entryStatusPic = new Button
      {
        X = Application.GetRealWidth(213),
        Y = Application.GetRealHeight(418),
        UnSelectedImagePath = "BindPic/BindEmptyPic.png",
        Visible = false,
      };
      blankFrameLayout.AddChidren(entryStatusPic);
      btnPicTip = new Button
      {
        Y = Application.GetRealHeight(1020),
        Text = Language.StringByID(R.MyInternationalizationString.NoControlTargets),
        TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
        Gravity = Gravity.CenterHorizontal,
        Visible = false,
        TextSize = 12,
      };
      blankFrameLayout.AddChidren(btnPicTip);
    }
    /// <summary>
    /// 按键绑定表显示
    /// </summary>
    async void RefreshList()
    {
      midVerticalRefreshLayout.RemoveAll();
      this.midFrameLayout.RemoveAll();
      middleFrameLayout();
      #region 数据处理
      if (currentKey.bindList.Count == 0)
      {
        entryStatusPic.Height = Application.GetRealHeight(556);
        entryStatusPic.Width = Application.GetRealWidth(654);
        btnPicTip.Height = Application.GetRealHeight(49);
        btnPicTip.Visible = true;
        entryStatusPic.Visible = true;
        blankFrameLayout.Height = midVerticalRefreshLayout.Height;
      }
      else
      {
        entryStatusPic.Height = Application.GetRealHeight(0);
        entryStatusPic.Width = Application.GetRealWidth(0);
        btnPicTip.Height = Application.GetRealHeight(0);
        btnPicTip.Visible = false;
        entryStatusPic.Visible = false;
        blankFrameLayout.Height = Application.GetRealHeight(0);
        if (currentKey.panelMode == 1)
        {
          midVerticalRefreshLayout.Y = Application.GetRealHeight(0);
        }
        else
        {
          BindModeDisplay();
        }
        int curIndex = 0;
        for (int i = 0; i < currentKey.bindList.Count; i++)
        {
          curIndex = i;
          var bindDevice = currentKey.bindList[i];
          SceneUI curSceneUI = null;
          bool isExistScene = false;
          var rowLayout = new RowLayoutControl(midVerticalRefreshLayout.rowSpace / 2);
          rowLayout.BackgroundColor = ZigbeeColor.Current.XMWhite;
          midVerticalRefreshLayout.AddChidren2(rowLayout);
          rowLayout.frameTable.UseClickStatu = false;
          var devicePic = rowLayout.frameTable.AddLeftIcon();
          devicePic.Y = Application.GetRealHeight(49);
          devicePic.UnSelectedImagePath = "DoorLock/DoorLockUserPic.png";
          #region 绑定数据处理
          int currentIndex = i;
          var btnBindNameText = "";
          var btnFloorRoomNameText = "";
          if (currentIndex == currentKey.bindList.Count - 1)
          {
            rowLayout.LineColor = Shared.Common.ZigbeeColor.Current.XMWhite;
          }
          foreach (var sc in currentKey.bindList)
          {
            if (sc.BindType == 2)
            {
              isExistScene = true;
            }
          }
          if (isExistScene)
          {
            curSceneUI = HdlSceneLogic.Current.GetSceneUIBySceneId(bindDevice.BindScenesId);
            devicePic.UnSelectedImagePath = "Scene/SceneIcon.png";
            if (curSceneUI == null)
            {
              btnBindNameText = Language.StringByID(R.MyInternationalizationString.OffLineScene) + "_" + "ID" + "_" + bindDevice.BindScenesId.ToString();
            }
            else
            {
              btnBindNameText = curSceneUI.Name;
              string myName = HdlSceneLogic.Current.GetZoneById(curSceneUI.Id);
              if (myName != null)
              {
                btnFloorRoomNameText = myName;
              }
              else
              {
                btnFloorRoomNameText = Language.StringByID(R.MyInternationalizationString.Undistributed);
              }
            }
          }
          else
          {
            //被绑定设备图片
            foreach (var dev in localDeviceList)
            {
              var tempDev = localDeviceList.Find(obj => obj.DeviceAddr == bindDevice.BindMacAddr && obj.DeviceEpoint == bindDevice.BindEpoint);
              if (tempDev != null)
              {
                //获取设备所属房间
                var tempDevRoom = HdlRoomLogic.Current.GetRoomByDevice(tempDev);
                if (tempDevRoom != null)
                {
                  var tempDevFloorId = tempDevRoom.FloorId;
                  //获取房间的名字
                  var tempDevRoomName = tempDevRoom.Name;
                  //获取楼层的名字
                  var tempDevFloorName = HdlResidenceLogic.Current.GetFloorNameById(tempDevFloorId);
                  if (string.IsNullOrEmpty(tempDevFloorName))
                  {
                    if (string.IsNullOrEmpty(tempDevRoomName))
                    {
                      btnFloorRoomNameText = Language.StringByID(R.MyInternationalizationString.Undistributed);
                    }
                    else
                    {
                      btnFloorRoomNameText = tempDevRoomName;
                    }
                  }
                  else
                  {
                    if (string.IsNullOrEmpty(tempDevRoomName))
                    {
                      btnFloorRoomNameText = Language.StringByID(R.MyInternationalizationString.Undistributed);
                    }
                    else
                    {
                      btnFloorRoomNameText = tempDevFloorName + "," + tempDevRoomName;
                    }
                  }
                }
                else
                {
                  btnFloorRoomNameText = Language.StringByID(R.MyInternationalizationString.Undistributed);
                }
                devicePic.UnSelectedImagePath = tempDev.IconPath;
                devicePic.Text = "";
                if (string.IsNullOrEmpty(tempDev.DeviceEpointName))
                {
                  btnBindNameText = tempDev.DeviceEpoint + Language.StringByID(R.MyInternationalizationString.uDeviceCircuit);
                }
                else
                {
                  btnBindNameText = tempDev.DeviceEpointName;
                }
              }
              else
              {
                btnBindNameText = bindDevice.BindMacAddr + "_" + bindDevice.BindEpoint;
                devicePic.TextAlignment = TextAlignment.CenterLeft;
                devicePic.TextColor = UserCenterColor.Current.Gray;
                devicePic.Text = Language.StringByID(R.MyInternationalizationString.uOffLine);
              }
            }
          }
          var btnBindName = rowLayout.frameTable.AddTopView(btnBindNameText, 800);
          var btnFloorRoomName = rowLayout.frameTable.AddBottomView(btnFloorRoomNameText, 800);
          rowLayout.frameTable.AddBottomLine();
          var btnDel = rowLayout.AddDeleteControl();
          btnDel.ButtonClickEvent += (sender, e) =>
          {
            RemoveTargets(bindDevice, btnDel);
          };
          #endregion
        }
        midVerticalRefreshLayout.AdjustTableHeight(Application.GetRealHeight(23));
      }
      #endregion
    }
    /// <summary>
    /// 当前按键模式显示
    /// </summary>
    public void BindModeDisplay()
    {
      var modeRowLayout = new RowLayoutControl(midVerticalRefreshLayout.rowSpace / 2);
      modeRowLayout.BackgroundColor = ZigbeeColor.Current.XMWhite;
      midVerticalRefreshLayout.AddChidren2(modeRowLayout);
      modeRowLayout.frameTable.UseClickStatu = false;
      modeRowLayout.frameTable.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.keyMode), 400);
      var btnKeyModeTipText = "";
      #region 当前模式文本显示
      switch (currentKey.panelMode)
      {
        case 100:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.OnOffOn);
          break;
        case 101:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.OnOffoFF);
          break;
        case 102:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.OnOffOnOff);
          break;
        case 200:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.DimmerMode1);
          break;
        case 201:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.DimmerMode2);
          break;
        case 203:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.DimmerMode3);
          break;
        case 204:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.DimmerMode4);
          break;
        case 205:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.DimmerMode5);
          break;
        case 300:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.WcdUp);
          break;
        case 301:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.WcdDown);
          break;
        case 302:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.WcdStop);
          break;
        case 303:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.WcdUpStop);
          break;
        case 304:
          btnKeyModeTipText = Language.StringByID(R.MyInternationalizationString.WcdDownStop);
          break;
      }
      #endregion
      modeRowLayout.frameTable.AddMostRightView(btnKeyModeTipText, 800);
      modeRowLayout.frameTable.AddBottomLine();
      var btnDel = modeRowLayout.AddDeleteControl();
      //一键清除按键事件
      btnDel.ButtonClickEvent += async (sender, e) =>
      {
        string msg = Language.StringByID(R.MyInternationalizationString.ClearAllTargets).Replace("{0}", "\r\n");
        var alert = new Shared.Phone.UserCenter.ShowMsgControl(ShowMsgType.Confirm, msg, Language.StringByID(R.MyInternationalizationString.DoorlockConfirm));
        alert.Show();
              //使用确认型弹框时,的回调函数
              alert.ConfirmClickEvent += () =>
               {
             bool isDelSuccess = false;
             System.Threading.Tasks.Task.Run(() =>
                   {
                 try
                 {
                   Application.RunOnMainThread(() =>
                         {
                         CommonPage.Loading.Start("");
                       });
                   var bindResult = HdlDeviceBindLogic.Current.ClearBindInfoAsync(currentKey);
                   if (bindResult != null && bindResult.clearBindInfoResponseData != null)
                   {
                     if (bindResult.clearBindInfoResponseData.Result != 0)
                     {
                       Application.RunOnMainThread(() =>
                             {
                                 new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.RemoveFailed), Direction = AMPopTipDirection.Up, CloseTime = 1 }.Show(btnDel);
                                 CommonPage.Loading.Hide();
                               });
                       return;
                     }
                     else
                     {
                       var temp = HdlDeviceBindLogic.Current.ConfigureHdlKeyValueAsync(currentKey, Panel.KeyMode.Default);
                       if (temp != null && temp.setWritableValueResponData?.Status != 0)
                       {
                         var temp1 = HdlDeviceBindLogic.Current.ConfigureHdlKeyValueAsync(currentKey, Panel.KeyMode.Default);
                         if (temp1 != null && temp1.setWritableValueResponData?.Status != 0)
                         {
                           Application.RunOnMainThread(() =>
                                 {
                                         new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.ChangeBindMode), Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show(btnDel);
                                       });
                         }
                         else
                         {
                           isDelSuccess = true;
                         }
                       }
                       else
                       {
                         isDelSuccess = true;
                       }
                     }
                   }
                   else
                   {
                     Application.RunOnMainThread(() =>
                           {
                             new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime) + "(" + "5006" + ")", Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show(btnDel);
                           });
                   }
                 }
                 catch { }
                 finally
                 {
                   Application.RunOnMainThread(() =>
                         {
                         if (isDelSuccess)
                         {
                           currentKey.panelMode = 65535;
                           currentKey.bindList.Clear();
                           RefreshList();
                                 //如果是场景,用户删除清空当前到房间列表
                                 currentKey.ReSave();
                         }
                         CommonPage.Loading.Hide();
                       });
                 }
               });
           };
      };
    }
    /// <summary>
    /// 侧边导航栏
    /// </summary>
    async void SideslipFramelayout()
    {
      #region UI
      var dialog = new Dialog { };
      dialog.Show();
      var flMain = new FrameLayout { BackgroundColor = 0x00000000 };
      dialog.AddChidren(flMain);
      flMain.MouseUpEventHandler += (sender11, e11) =>
      {
        dialog.Close();
      };
      var sidelipFrameLayout = new FrameLayout()
      {
        Height = Application.GetMinReal(628),
        Width = Application.GetMinReal(415),
        Y = Application.GetRealHeight(115 + 45),
        X = Application.GetRealWidth(605),
        BackgroundImagePath = "DoorLock/SideslipPic.png",
      };
      flMain.AddChidren(sidelipFrameLayout);
      var sidelipVerticalScrolViewLayout = new VerticalScrolViewLayout()
      {
        Height = Application.GetRealHeight(600),
        Y = Application.GetRealHeight(28),
      };
      sidelipFrameLayout.AddChidren(sidelipVerticalScrolViewLayout);
      #endregion
      Button oldbuttonText = null;
      string oldKeySelectModeText = currentKey.currentKeySelectModeText;
      if (typeModeList == null)
      {
        //再次动态获取按键支持的大类
        Application.RunOnMainThread(() =>
        {
          CommonPage.Loading.Start();
        });
        typeModeList = await GetTypeMode();
        if (typeModeList == null)
        {
          Application.RunOnMainThread(() =>
          {
            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime) + "(" + "0003" + ")", Direction = AMPopTipDirection.None, CloseTime = 1 }.Show(Common.CommonPage.Instance);
            CommonPage.Loading.Hide();
          });
          dialog.Close();
          return;
        }
        else
        {
          Application.RunOnMainThread(() =>
          {
            CommonPage.Loading.Hide();
          });
        }
      }
      int count = 0;
      foreach (var value in typeModeList)
      {
        count++;
        #region  rowView
        var rowView = new FrameLayout()
        {
          Height = Application.GetRealHeight(150),
        };
        sidelipVerticalScrolViewLayout.AddChidren(rowView);
        var btnMethodText = new Button()
        {
          Width = Application.GetRealWidth(268),
          Height = Application.GetRealHeight(58),
          X = Application.GetRealWidth(115),
          Y = Application.GetRealHeight(69),
          TextColor = Shared.Common.ZigbeeColor.Current.XMGray3,
          TextSize = 14,
          IsBold = false,
          TextAlignment = TextAlignment.CenterLeft,
        };
        rowView.AddChidren(btnMethodText);
        var line2 = new Button()
        {
          Y = rowView.Height - 1,
          X = Application.GetRealWidth(115),
          Width = Application.GetRealWidth(300),
          Height = 1,
          BackgroundColor = Shared.Common.ZigbeeColor.Current.XMRowLine,
        };
        rowView.AddChidren(line2);
        if (string.IsNullOrEmpty(currentKey.currentKeySelectModeText) && value == 1)
        {
          btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
          btnMethodText.IsBold = true;
          oldbuttonText = btnMethodText;
        }
        if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddScene) && value == 1)
        {
          btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
          btnMethodText.IsBold = true;
          oldbuttonText = btnMethodText;
        }
        else if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddSwitch) && value == 100)
        {
          btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
          btnMethodText.IsBold = true;
          oldbuttonText = btnMethodText;
        }
        else if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddDimmer) && value == 200)
        {
          btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
          btnMethodText.IsBold = true;
          oldbuttonText = btnMethodText;
        }
        else if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddCurtain) && value == 300)
        {
          btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
          btnMethodText.IsBold = true;
          oldbuttonText = btnMethodText;
        }
        #endregion
        #region 数据处理
        switch (value)
        {
          case 1:
            btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.AddScene);
            break;
          case 100:
            btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.AddSwitch);
            break;
          case 200:
            btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.AddDimmer);
            break;
          case 300:
            btnMethodText.Text = Language.StringByID(R.MyInternationalizationString.AddCurtain);
            line2.Visible = false;
            break;
        }
        if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddScene) && value == 1)
        {
          btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
          btnMethodText.IsBold = true;
          oldbuttonText = btnMethodText;
        }
        if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddSwitch) && value == 100)
        {
          btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
          btnMethodText.IsBold = true;
          oldbuttonText = btnMethodText;
        }
        if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddDimmer) && value == 200)
        {
          btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
          btnMethodText.IsBold = true;
          oldbuttonText = btnMethodText;
        }
        if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddCurtain) && value == 300)
        {
          btnMethodText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
          btnMethodText.IsBold = true;
          oldbuttonText = btnMethodText;
        }
        #endregion
        //类型事件选中处理
        EventHandler<MouseEventArgs> eHandler = (sender, e) =>
        {
          if (!btnMethodText.IsSelected)
          {
            if (oldbuttonText != null)
            {
              oldbuttonText.TextColor = Shared.Common.ZigbeeColor.Current.XMGray3;
            }
            oldbuttonText = btnMethodText;
            currentKey.currentKeySelectModeText = btnMethodText.Text;
            oldbuttonText.TextColor = Shared.Common.ZigbeeColor.Current.XMBlack;
          }
          if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddScene))
          {
            var addScenePage = new Shared.Phone.UserCenter.DeviceBind.AddScenePage(currentKey);
            Shared.Phone.UserView.HomePage.Instance.AddChidren(addScenePage);
            Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
            addScenePage.Show();
            Action<List<BindListResponseObj>> action = (obj) =>
                    {
                  currentKey.bindList = obj;
                  RefreshList();
                };
            addScenePage.action += action;
            dialog.Close();
          }
          if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddSwitch))
          {
            var addDevicePage = new Shared.Phone.UserCenter.DeviceBind.AddDevicePage(currentKey, "AddSwitch");
            Shared.Phone.UserView.HomePage.Instance.AddChidren(addDevicePage);
            Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
            addDevicePage.Show();
            Action<List<BindListResponseObj>> action = (obj) =>
                    {
                  currentKey.bindList = obj;
                  RefreshList();
                };
            addDevicePage.actionAddDevicePage += action;
            dialog.Close();
          }
          if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddDimmer))
          {
            var addDevicePage = new Shared.Phone.UserCenter.DeviceBind.AddDevicePage(currentKey, "AddDimmer");
            Shared.Phone.UserView.HomePage.Instance.AddChidren(addDevicePage);
            Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
            addDevicePage.Show();
            Action<List<BindListResponseObj>> action = (obj) =>
                    {
                  currentKey.bindList = obj;
                  RefreshList();
                };
            addDevicePage.actionAddDevicePage += action;
            dialog.Close();
          }
          if (currentKey.currentKeySelectModeText == Language.StringByID(R.MyInternationalizationString.AddCurtain))
          {
            var addDevicePage = new Shared.Phone.UserCenter.DeviceBind.AddDevicePage(currentKey, "AddCurtain");
            Shared.Phone.UserView.HomePage.Instance.AddChidren(addDevicePage);
            Shared.Phone.UserView.HomePage.Instance.PageIndex += 1;
            addDevicePage.Show();
            Action<List<BindListResponseObj>> action = (obj) =>
                    {
                  currentKey.bindList = obj;
                  RefreshList();
                };
            addDevicePage.actionAddDevicePage += action;
            dialog.Close();
          }
        };
        btnMethodText.MouseUpEventHandler += eHandler;
        rowView.MouseUpEventHandler += eHandler;
      }
    }
    /// <summary>
    /// 获取按键支持的大类
    /// </summary>
    /// <returns></returns>
    private async System.Threading.Tasks.Task<List<int>> GetTypeMode()
    {
      //如果当前住宅是虚拟住宅
      if (Common.Config.Instance.Home.IsVirtually == true)
      {
        //则默认全部功能都给它
        typeModeList = new List<int>() { 1, 100, 200, 300, 0, 101, 102 };
        return typeModeList;
      }
      if (typeModeList != null)
      {
        typeModeList.Clear();
      }
      if (currentKey.privateFuncSecondLevelList.Count == 0 || currentKey.privateFuncSecondLevelList.Contains(1) == false || currentKey.privateFuncSecondLevelList.Contains(100) == false || currentKey.privateFuncSecondLevelList.Contains(200) == false || currentKey.privateFuncSecondLevelList.Contains(300) == false)
      {
        //获取第二级功能
        typeModeList = await currentKey.GetPanelDeviceFunctionLevel2(256);
        if (typeModeList == null)
        {
          return null;
        }
        currentKey.privateFuncSecondLevelList = typeModeList;
      }
      else
      {
        typeModeList = currentKey.privateFuncSecondLevelList;
      }
      return typeModeList;
    }
    /// <summary>
    /// 删除当前目标方法
    /// </summary>
    /// <param name="bindDevice"></param>
    /// <param name="btnDel"></param>
    /// <returns></returns>
    private int RemoveTargets(BindListResponseObj bindDevice, Button btnDel)
    {
      int result = -1;
      var delDevice = new DelDeviceBindData();
      delDevice.DeviceAddr = currentKey.DeviceAddr;
      delDevice.Epoint = currentKey.DeviceEpoint;
      if (bindDevice.BindType == 0 || bindDevice.BindType == 1)
      {
        var removeDevice = new RemoveBindListObj();
        removeDevice.BindCluster = bindDevice.BindCluster;
        removeDevice.BindType = 0;
        removeDevice.BindMacAddr = bindDevice.BindMacAddr;
        removeDevice.BindEpoint = bindDevice.BindEpoint;
        delDevice.RemoveBindList.Add(removeDevice);
        //是亮度再次发删除6的命令
        if (currentClusterID == 8)
        {
          var removeDevice2 = new RemoveBindListObj();
          removeDevice2.BindCluster = 6;
          removeDevice2.BindType = 0;
          removeDevice2.BindMacAddr = bindDevice.BindMacAddr;
          removeDevice2.BindEpoint = bindDevice.BindEpoint;
          delDevice.RemoveBindList.Add(removeDevice2);
        }
      }
      else if (bindDevice.BindType == 2)
      {
        var removeDevice = new RemoveBindListObj();
        removeDevice.BindCluster = bindDevice.BindCluster;
        removeDevice.BindType = 1;
        removeDevice.BindScenesId = bindDevice.BindScenesId;
        delDevice.RemoveBindList.Add(removeDevice);
      }
      System.Threading.Tasks.Task.Run(() =>
      {
        try
        {
          Application.RunOnMainThread(() =>
                {
                CommonPage.Loading.Start("");
              });
          var delResult = new DelDeviceBindResponseAllData();
          delResult = HdlDeviceBindLogic.Current.DelDeviceBindAsync(delDevice);
          if (delResult != null && delResult.delDeviceBindResponseData != null)
          {
            if (delResult.delDeviceBindResponseData?.RemoveBindList != null)
            {
              foreach (var re in delResult.delDeviceBindResponseData.RemoveBindList)
              {
                switch (re.Result)
                {
                  case 0:
                    currentKey.bindList.Remove(bindDevice);
                    Application.RunOnMainThread(() =>
                          {
                                    RefreshList();
                                          //如果是场景,用户删除清空当前到房间列表
                                          if (re.BindType == 2)
                                    {
                                      currentKey.panelMode = 65535;
                                    }
                                    currentKey.ReSave();
                                  });
                    result = 0;
                    break;
                  case 1:
                    currentKey.bindList.Clear();
                    try
                    {
                      Application.RunOnMainThread(() =>
                            {
                                        CommonPage.Loading.Start("");
                                      });
                      var getBindList = HdlDeviceBindLogic.Current.GetDeviceBindAsync(currentKey);
                      var bindDeviceListTemp = new System.Collections.Generic.List<BindListResponseObj> { };
                      var bindSceneListTemp = new System.Collections.Generic.List<BindListResponseObj> { };
                      if (getBindList != null)
                      {
                        if (getBindList.getAllBindResponseData != null)
                        {
                          foreach (var b in getBindList.getAllBindResponseData.BindList)
                          {
                            if (b.BindCluster == currentClusterID)
                            {
                              if (b.BindCluster == 6)
                              {
                                if (b.BindType == 2)
                                {
                                  bindSceneListTemp.Add(b);
                                }
                                else
                                {
                                  bindDeviceListTemp.Add(b);
                                }
                              }
                              else
                              {
                                currentKey.bindList.Add(b);
                              }
                            }
                          }
                        }
                      }
                      if (currentKey.panelMode == 1)
                      {
                        currentKey.bindList = bindSceneListTemp;
                      }
                      else if (currentKey.panelMode == 100 || currentKey.panelMode == 101 || currentKey.panelMode == 102)
                      {
                        currentKey.bindList = bindDeviceListTemp;
                      }
                    }
                    catch { }
                    finally
                    {
                      Application.RunOnMainThread(() =>
                            {
                                        RefreshList();
                                        CommonPage.Loading.Hide();
                                      });
                    }
                    break;
                  case 2:
                    if (delResult.removeBindResultResponseData != null)
                    {
                      if (delResult.removeBindResultResponseData.Result == 0)
                      {
                        currentKey.bindList.Remove(bindDevice);
                        Application.RunOnMainThread(() =>
                              {
                                            RefreshList();
                                          });
                        result = 0;
                      }
                      else
                      {
                        Application.RunOnMainThread(() =>
                              {
                                            new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.RemoveFailed), Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show(btnDel);
                                          });
                      }
                    }
                    break;
                  default:
                    break;
                }
              }
            }
            else
            {
              Application.RunOnMainThread(() =>
                    {
                        new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.RemoveFailed), Direction = AMPopTipDirection.Up, CloseTime = 2 }.Show(btnDel);
                      });
            }
          }
          else
          {
            Application.RunOnMainThread(() =>
                  {
                    new Tip() { MaxWidth = 150, Text = Language.StringByID(R.MyInternationalizationString.GwResponseOvertime) + "(" + "5003" + ")", Direction = AMPopTipDirection.None, CloseTime = 2 }.Show(CommonPage.Instance);
                  });
          }
        }
        catch { }
        finally
        {
          Application.RunOnMainThread(() =>
                {
                CommonPage.Loading.Hide();
              });
        }
      });
      return result;
    }
    /// <summary>
    /// 重写移除方法
    /// </summary>
    public override void RemoveFromParent()
    {
      localDeviceList.Clear();
      scList.Clear();
      base.RemoveFromParent();
    }
  }
}